Micropython——九轴传感器(MPU6050)的使用及算法(三)

简介:

上篇文章中,关于九轴传感器(MPU6050),学习其如何对其生成的数据偏移进行校准,这节课我们来将其中的一个问题来进行解决。关于MPU6050地址问题,我们如何学习并判断是否是MPU6050


1、看其MPU6050的数据手册,发现下面这段文字

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM5NjAzMjQ3,size_16,color_FFFFFF,t_70#pic_center

能够发现参数WHO_AM_I 是包含了MPU6050的6为I2C地址的,而其I2C地址是储存在0x75寄存器中。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGFfTA==,size_20,color_FFFFFF,t_70,g_se,x_16

图一:MPU6050实物图

 

对于MPU6050来说,I2C地址是判断AD0是悬空还是接VCC。接VCC时,地址是0X69,悬空或者接地时,地址是0X68。


代码程序:

# @Time    : 2022.4.20
# @Author  : Xa_L
# @FileName: I2C_MPU6050.py

from  machine  import I2C,Pin
#初始化I2C通道1 ,使用GPIO6和GPIO7 分别作为SDA 和SCL 引脚,频率为10KHZ
i2c = I2C(id = 1 ,scl = Pin(7) ,sda = Pin(6), freq = 1000000)
#扫描I2C总线下所有设备地址,并返回对应的列表
addr_list = i2c.scan()
print(addr_list)
print(addr_list[0])
if len(addr_list) == 1:
    #尝试读取该设备的0x75寄存器
    who = i2c.readfrom_mem(addr_list[0],0x75,1)
    print(who[0])
    #如果读取数值为0x68
    if  who[0] == 0x68:
        print("Just a MPU6050  connected")
    else:
        print("Have a device connected but it is not MPU6050")
elif  len(addr_list) == 0:
        print("Nothing connected")
else:
        print("More than one device is conneted ")

运行结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGFfTA==,size_20,color_FFFFFF,t_70,g_se,x_16

 这里我只写了连接的地址为0x68,读者可以自行重写程序看是否为其他设备。

也许有的读者会问为什么是104,不是0x68,其实这是因为十进制和十六进制的关系,所以这里对于进制不做讲解,可以去其他地方仔细进行了解。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGFfTA==,size_20,color_FFFFFF,t_70,g_se,x_16

技术交流
欢迎转载、收藏、有所收获点赞支持一下!

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWGFfTA==,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

 

posted @ 2022-07-06 08:40  Xa_L  阅读(697)  评论(0编辑  收藏  举报