6軸IMUユニット MPU6886のデータシートP31/59では、レジスタ0x75はWHO_AM_Iとなっていて、P49/59には既定値が0x19とあり、また9軸のMPU-9250 Register Map p44/55では、WHO_AM_Iレジスタの既定値が0x71となっていることから、次のIMUユニットの型式を調べるコードは間違っていないようだ。
IMUユニットの型式
main.cpp
#include <M5Core2.h>
#include <Wire.h>
void setup() {
M5.begin();
M5.Lcd.setCursor(20, 40);
M5.Lcd.setTextSize(2);
String f16 = "genshin-regular-16pt";
M5.Lcd.loadFont(f16,SD);
Wire1.begin();
Wire1.beginTransmission(MPU6886_ADDRESS); //0x68
Wire1.write(MPU6886_WHOAMI); //0x75
Wire1.endTransmission(false);
Wire1.requestFrom(MPU6886_ADDRESS, 1);
unsigned char whoami = Wire1.read();
if (whoami == 0x71) {
M5.Lcd.print("MPU9250 が入っています");
} else if (whoami == 0x19) {
M5.Lcd.print("MPU6886 が入っています");
} else {
M5.Lcd.print("不明なデバイスです");
}
M5.Lcd.printf(" 戻り値:(%#x)", whoami);
}
void loop() {
}
M5Stack機種別のモーションセンサ搭載状況
出典:トホホな疑問(31) M5Stack、IMUの種類と取り扱いに戸惑う
機 種 | 加速度/ジャイロ | 磁 気 |
---|---|---|
Basic | — | — |
Gray | MPU9250 | AK8963 |
Fire | MPU6886 | BMM150 |
Fire | SH200Q | BMM150 |
Fire | MPU6050 | BMM150 |
Core2 | MPU6886 | — |