ESP32——MPU6050

一·学习过程及目标

  1. 学会对MPU6050寄存器的读写操作
  2. 了解主要寄存器的含义
  3. 参考源代码,自己编写程序,让MPU6050工作起来,然后读出加速度、陀螺仪、温度等数据

二·先决条件

了解MPU6050

下面是本人看过的帖子,前面两个是比较入门的

第一个

第二个

第三个

第四个

本人所用源码为第四个,源码中还包含oled的功能,但是因为我没有使用oled的功能,所以未进行学习。(所有代码均为C语言)

三·学习过程

1.因为我的开发板引脚使用和源代码冲突,所以先修改了引脚使用,改为

#define MPU_I2C_SCL 16
#define MPU_I2C_SDA 17

2.开始理解代码,如:

i2c_write(st.hw->addr, st.reg->pwr_mgmt_1, 1, &tmp);

本句的意思是将tmp写进某个寄存器长度为1个字节

同理,

i2c_read(st.hw->addr, st.reg->pwr_mgmt_1, 1, &tmp);

这句的意思是从某个寄存器里读1个字节的长度读进tmp

3.在简单的了解读写操作过后我开始阅读MPU6050的寄存器手册着手了解寄存器的作用和如何使用

部分中文MPU6050 DataSheet

链接:https://pan.baidu.com/s/1J7wZ3StnW9tAtv_z23tumw?pwd=igzs 
提取码:igzs

 

4.结合前面了解过的寄存器读写操作,开始测试。

如:

    tmp=0x80;
    i2c_write(st.hw->addr, st.reg->pwr_mgmt_1, 1, &tmp);
    i2c_read(st.hw->addr, st.reg->pwr_mgmt_1, 1, &data);
    printf("st.reg->pwr_mgmt_1:%x\n",data);

会发现data的值为40;

在查看源代码定义的寄存器命名后知道pwr_mamt_1是电源管理1

查看寄存器手册

 我们知道16进制0x80转换为二级制为“10000000”,对应为DEVICE_RESET位为1,所以寄存器复位,各位变为默认值,寄存器内的值为“01000000”,所以读出的值为40。

接下来一个一个尝试,先写进寄存器再读出,观察是否符合实际。

当然部分寄存器是不可写入数据的,如

 这个寄存器是由其他寄存器自动写入的,是不能人为写入的,所以我们只能读也只需要读出数据就行。

5.在熟悉寄存器的读写操作和寄存器的作用后,我们开始尝试编写代码操作。

在另一份源代码中我们找到了初始化MPU6050的操作,接下来就是模仿,尝试自己编写代码完成初始化操作。

比如

    MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00);	//唤醒MPU6050 

将0x00写入电源管理器1,在我们的代码中就应该是 

    tmp=0x00;
    i2c_write(st.hw->addr, st.reg->pwr_mgmt_1, 1, &tmp);

 过程不演示了,请自行完成。

我开始尝试替换源代码中初始化MPU6050的功能,初次尝试时我直接注释掉了原本的代码,但是报错了。在看过源码后,我发现它在初始化MPU6050时还初始化了IIC接口,我并没有这一步,在简单的改动后成功完成初始化功能。

四·成果展示

 接下来就是简单的找出所需的数据打印出来

如图:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值