在前面我们使用了六轴传感器MPU6050,通过调用DMP库,直接让传感器输出欧拉角或四元数。这种方式能减少单片机的运算负担,但是我们无法调节里面的滤波算法和 姿态解析。而且对于九轴传感器MPU9250来说,调用DMP库输出的最大速度为200HZ(百度的数据,具体多少我也不清楚)。因此如果我们需要更高频率的输出,我们可以直接读取MPU9250的九个数据,然后在单片机处理,输出四元数或欧拉角。
第一步,接线:
连接ESP8266的3.3V与传感器的VIN和3.3;GND与GND;D1与SCL;D2与SDA。
第二步,烧录代码:
我的代码是基于GitHub上一个项目移植修改后的访问该项目
在该代码的基础上,我做了以下几点调整:1,删去了显示模块。2,修改针脚。3,修改MPU9250i2c地址
效果展示:
#include <Wire.h>
#define MPU9250_ADDRESS 0x68
#define WHO_AM_I_MPU9250 0x75 // Should return 0x71
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
byte c = readByte(MPU9250_ADDRESS, WHO_AM_I_MPU9250); // Read WHO_AM_I register for MPU-9250
Serial.println(c);
delay(1000);
}
uint8_t readByte(uint8_t address, uint8_t subAddress)
{
uint8_t data; // `data` will store the register data
Wire.beginTransmission(address); // Initialize the Tx buffer
Wire.write(subAddress); // Put slave register address in Tx buffer
Wire.endTransmission(false); // Send the Tx buffer, but send a restart to keep connection alive
Wire.requestFrom(address, (uint8_t) 1); // Read one byte from slave register address
data = Wire.read(); // Fill Rx buffer with result
return data; // Return data read from slave register
}
将上面这段代码写入到arduino,如果能够输出信息的话说明能够正常驱动MPU9250
总结:该运动传感器可以在后期通过WiFi模块把数据上传给上位机,例如电脑或者手机上,实现无线运动传感器模块。同时输出频率也是非常的大的,能够满足一般要求。