在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模塊把數據上傳給上位機,例如電腦或者手機上,實現無線運動傳感器模塊。同時輸出頻率也是非常的大的,能夠滿足一般要求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章