🛠 Lire l'accélération avec l'IMU MPU6886

M5StickC Plus2 (M5Stack) — kit portable « stick » ESP32-PICO-V3-02 (SKU K016-P2) · debutant · Schéma : IMG-m5stack-stick-c-plus-2-debutant-3-m5stick-c2-imu-acceleration.svg — M5StickC Plus2 inclinée avec vecteurs X, Y, Z d'accélération et bus I2C interne (SDA=G21, SCL=G22) reliant l'IMU MPU6886 et l'horloge RTC BM8563.

Objectifs

Lire les 3 axes d'accélération du MPU6886 (IMU 6 axes : accéléromètre + gyroscope) branché sur le bus I2C interne SDA=G21 / SCL=G22, le même que l'horloge temps réel BM8563 (adresses I2C classiques : 0x68 pour le MPU6886, 0x51 pour le BM8563). Afficher ax, ay, az en g sur l'écran et sur le moniteur série.

Matériel

Code complet

// IMU MPU6886 sur I2C interne SDA=G21 SCL=G22 (adresse 0x68)
#include <M5Unified.h>

void setup {
  auto cfg = M5.config;
  M5.begin(cfg);
  Serial.begin(115200);
  M5.Display.setRotation(1);
  M5.Display.setTextSize(2);
  M5.Display.setTextColor(TFT_CYAN, TFT_BLACK);
  if (!M5.Imu.isEnabled) {
    M5.Display.println("IMU absente!");   // MPU6886 introuvable sur 0x68
  }
}

void loop {
  M5.update;
  float ax = 0, ay = 0, az = 0;
  M5.Imu.getAccel(&ax, &ay, &az);        // en g (1 g = 9.81 m/s2)
  M5.Display.setCursor(0, 10);
  M5.Display.printf("ax %+5.2f g\n", ax);
  M5.Display.printf("ay %+5.2f g\n", ay);
  M5.Display.printf("az %+5.2f g\n", az);
  Serial.printf("%f %f %f\n", ax, ay, az);
  vTaskDelay(100 / portTICK_PERIOD_MS);
}

Vérification attendue

Posée à plat, l'écran affiche environ az = +1.00 g et ax/ay proches de 0 ; penchée sur la tranche, l'axe correspondant passe à ±1 g. Le moniteur série crache 10 lignes par seconde. Un petit scanner I2C (Wire.begin(21, 22)) trouve 0x68 (IMU) et 0x51 (RTC).

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels