├── README.md └── mpu6050.py /README.md: -------------------------------------------------------------------------------- 1 | # MPU6050-ESP8266-MicroPython 2 | Simple library for MPU6050 on ESP8266 with micropython 3 | 4 | SCL connected to pin 5, SDA to pin 4 5 | example usage: 6 | 7 | ```python 8 | >>>from machine import I2C, Pin 9 | >>>import mpu6050 10 | >>>i2c = I2C(scl=Pin(5), sda=Pin(4)) 11 | >>>accelerometer = mpu6050.accel(i2c) 12 | >>>accelerometer.get_values() 13 | {'GyZ': -235, 'GyY': 296, 'GyX': 16, 'Tmp': 26.64764, 'AcZ': -1552, 'AcY': -412, 'AcX': 16892} 14 | ``` 15 | Accelerometer/Gyroscope values are in int16 range (-32768 to 32767) 16 | If the mpu6050 loses power, you have to call __init__() again 17 | -------------------------------------------------------------------------------- /mpu6050.py: -------------------------------------------------------------------------------- 1 | import machine 2 | 3 | 4 | class accel(): 5 | def __init__(self, i2c, addr=0x68): 6 | self.iic = i2c 7 | self.addr = addr 8 | self.iic.start() 9 | self.iic.writeto(self.addr, bytearray([107, 0])) 10 | self.iic.stop() 11 | 12 | def get_raw_values(self): 13 | self.iic.start() 14 | a = self.iic.readfrom_mem(self.addr, 0x3B, 14) 15 | self.iic.stop() 16 | return a 17 | 18 | def get_ints(self): 19 | b = self.get_raw_values() 20 | c = [] 21 | for i in b: 22 | c.append(i) 23 | return c 24 | 25 | def bytes_toint(self, firstbyte, secondbyte): 26 | if not firstbyte & 0x80: 27 | return firstbyte << 8 | secondbyte 28 | return - (((firstbyte ^ 255) << 8) | (secondbyte ^ 255) + 1) 29 | 30 | def get_values(self): 31 | raw_ints = self.get_raw_values() 32 | vals = {} 33 | vals["AcX"] = self.bytes_toint(raw_ints[0], raw_ints[1]) 34 | vals["AcY"] = self.bytes_toint(raw_ints[2], raw_ints[3]) 35 | vals["AcZ"] = self.bytes_toint(raw_ints[4], raw_ints[5]) 36 | vals["Tmp"] = self.bytes_toint(raw_ints[6], raw_ints[7]) / 340.00 + 36.53 37 | vals["GyX"] = self.bytes_toint(raw_ints[8], raw_ints[9]) 38 | vals["GyY"] = self.bytes_toint(raw_ints[10], raw_ints[11]) 39 | vals["GyZ"] = self.bytes_toint(raw_ints[12], raw_ints[13]) 40 | return vals # returned in range of Int16 41 | # -32768 to 32767 42 | 43 | def val_test(self): # ONLY FOR TESTING! Also, fast reading sometimes crashes IIC 44 | from time import sleep 45 | while 1: 46 | print(self.get_values()) 47 | sleep(0.05) 48 | --------------------------------------------------------------------------------