最近闲下来,想学习一下运动传感器,于是在淘宝买了块MPU6050传感器。想要更多了解这款芯片信息的可以自己百度。在看了网上大多数的教程案例后,我发现网上的大多数都是基于AVR芯片处理,但是我想用我自己手上有的Esp8266来驱动这个传感器,在开发的过程中我遇到很多坑。于是我自己总结了已下几点坑。
第一:接线
要接的线有五条:VCC,GND,SCL,SDA,INT。前四个的功能很容易,最后一个是中断引脚,在输出RAW(原生数据)的时候可以不需要连接,但是想用DMP库就得用INT引脚。当传感器的堆栈满了的时候,会触发中断引脚,使主芯片读取传感器里堆栈数据。
第二:测试通讯是否正常
注意下载的库文件,我下载的淘宝卖家的库文件是六年前的库文件,在编译的过程中出现<avr/pgmspace.h>找不到,我移植了ESP8266对应的文件在运行过程中看门狗总是报错。在GitHub上经过一番寻找后,发现改库文件在新版本中修改好了,虽然也是报看门狗,但是调试后能正常的工作。
在测试过程中,我们首先打开MPU6050_6Axis_MotionApps20.h文件,找到#define DEBUG这一行,去除注释后便可以在串口窗看到调试信息。
首先要测试ESP8266与传感器连接是否正常。复制以下代码,如果串口能够打印出"MPU6050 connection successful"的话,说明ESP8266与传感器通讯正常。
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 accelgyro;
void setup() {
// join I2C bus (I2Cdev library doesn't do this automatically)
Wire.begin();
// initialize serial communication
// (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
// it's really up to you depending on your project)
Serial.begin(38400);
// initialize device
Serial.println("Initializing I2C devices...");
accelgyro.initialize();
// verify connection
Serial.println("Testing device connections...");
Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}
void loop() {
}
第三:调用DMP库,直接输出欧拉角
在上一步通讯成功后,其实有两个选择,第一可以用Arduino直接读取传感器的六轴信息后,在Arduino上处理或者在上位机上通过滤波和其他等算法处理成我们需要的信息。第二是我们可以调用官方的DMP库,通过DMP库输出欧拉角。
首先我们要修改中断引脚和LED引脚,修改后便可成功输出欧拉角。