前言
文章分两部分,第一部分是全部代码展示,复制即用;第二部分是代码分段解释。
用的是esp32的I2C(0),默认scl接GPIO18,sda接GPIO19
关键词:micropython,esp32,mpu6050
所有代码展示
from machine import Pin,I2C
import time
import math
class MPU6050():
def __init__(self, i2c, addr=0x68):
self.iic = i2c
self.addr = addr
self.accelScale=16384
self.gyroScale=131
# 唤醒
self.iic.writeto(self.addr, bytearray([107, 0]))
self.iic.writeto(self.addr,bytearray([26,0]))
# 配置加速度计量程
self.iic.writeto(self.addr,bytearray([27,0]))
# 配置角速度计量程
self.iic.writeto(self.addr,bytearray([28,0]))
# 配置量程系数
AFS_SEL=(self.iic.readfrom_mem(self.addr,27,1))[0]&0x18
if AFS_SEL==0:
self.accelScale=16384
elif AFS_SEL==0x08:
self.accelScale=8192
elif AFS_SEL==0x10:
self.accelScale=4096
elif AFS_SEL==0x18:
self.accelScale=2048
AFS_SEL=(self.iic.readfrom_mem(self.addr,28,1))[0]&0x18
if(AFS_SEL==0):
self.gyroScale=131
elif AFS_SEL==0x08:
self.gyroScale=65.5
elif AFS_SEL==0x10:
self.gyroScale=32.8
elif AFS_SEL==0x18:
self.gyroScale=16.4
self.calibraton=self.calibrate()
# 读取寄存器原生数据
def get_raw_values(self):
reg_data=self.iic.readfrom_mem(self.addr, 59, 14)
return reg_data[:6],reg_data[8:]
# 将原生数据转6轴数据
def raw_to_ints(self):
a,g=self.get_raw_values()
aX=self.bytes_toint(a[0],a