2022年11月2日 星期三

ESP8266-01透過I2C讀取MPU6500六軸自由度

ESP8266-01這塊雖然只有8個腳位,但假如扣除VDD、GND、RST和CH_PD,實際上板子本身有幫你引出的GPIO就有4個,網路上也有其他創作者拉引腳方式讓GPIO有10腳位可以控制,嚴格算起來還蠻多得。

以下示範是ESP8266-01和MPU6500間透過I2C傳送資料並且打印上相同區網手機瀏覽器上,並以每500毫秒自動更新數據。
可以透過以下網址下載程式碼:下載連結


  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,14,1);  // request a total of 14 registers
  AcX = Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
  AcY = Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)]
  AcZ = Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  NowTemp = Wire.read()<<8|Wire.read();
  GyX = Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY = Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ = Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  
MPU這個放入的參數為:0x68,代表I2C位址,至於0x3B0x3D0x3F...等這些,是取決於你要抓取MPU6050.h這個開頭檔裡面什麼位子什麼數值。

至於剩下的WebServer部分就大多參考ESP8266所提供的範例了。




上述如果有錯誤或是更好的方法,提醒和交流我會非常感激。