imu_bhi260.ino

Arduino Nicla Sense ME · Fichier : imu_bhi260.ino · Langage : Arduino · Usage : Lire l’accélération via le hub BHI260AP

L’accéléromètre 16 bits du BHI260AP s’ouvre avec la bibliothèque Arduino_BHY2 : accel.checkNewData puis x/y/z en g. La doc insiste : BHY2.update() est la pompe de la messagerie du hub — sans elle, aucun capteur ne répond.

Matériel requis

Une Arduino Nicla Sense ME (nRF52832 dans un module ANNA-B112, BLE seul, pas de Wi-Fi) avec hub capteurs Bosch BHI260AP, magnétomètre BMM150, baromètre BMP390, capteur de gaz BME688, LED RVB sur pilote I2C et chargeur LiPo BQ25120. La carte seule sur USB ; le BHI260AP et son firmware BHY2 sont flashés en usine dans sa flash QSPI dédiée.

Câblage

Aucun câblage : tous les capteurs Bosch sont soudés et câblés en interne vers le hub. Les broches du connecteur restent libres.

Fonctionnement

BHY2.begin démarre le hub (prover/advanced) ; accel.begin active le capteur dans le firmware BHY2 ; update() draine les FIFO, checkNewData lit la dernière trame. Sortie en g, 1 g ≈ 9,81 m/s².

Exécution

Programmation via Arduino IDE (core ArduinoCore-mbed, target NICLA_SENSE_ME) ; bibliothèques Arduino_BHY2 (capteurs) et Nicla_System (LED, chargeur) ; USB via pont série SAMD11.

Variantes

Ajouter gyro et rotation vectorielle (fusion BSX du hub), augmenter la fréquence de l’update pour du temps réel, ou streamer les 9 axes en BLE.

imu_bhi260.ino

// Les capteurs du Sense ME ne pendent pas sur l'I2C direct :
// ils sont derrière le hub BHI260AP, servi par Arduino_BHY2.
// Règle docs-db : BHY2.update() est la pompe aux lettres du hub,
// à appeler en continu.

#include "Arduino_BHY2.h"

SensorAccel accel(0);

void setup() {
  Serial.begin(115200);
  BHY2.begin();
  accel.begin();
  BHY2.update();          // premier échange avec le hub
}

void loop() {
  BHY2.update();          // OBLIGATOIRE à chaque tour de boucle

  if (accel.checkNewData()) {
    Serial.print("ax="); Serial.print(accel.x());
    Serial.print(" ay="); Serial.print(accel.y());
    Serial.print(" az="); Serial.println(accel.z());
  }
  delay(10);
}

← Retour à la fiche