在Arduino平台上使用ESP8266芯片:直接读取MPU9250数据,在ESP8266上解析输出四元数和欧拉角。

在前面我们使用了六轴传感器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模块把数据上传给上位机,例如电脑或者手机上,实现无线运动传感器模块。同时输出频率也是非常的大的,能够满足一般要求。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值