🛠 Enregistreur de capteurs sur la flash embarquée
Objectifs
Constituer un enregistreur autonome (datalogger) sans carte SD : la carte embarque 2 MB de flash SPI (U7, MX25R1635F) reliée au module ANNA-B112, distincte des 2 MB de flash QSPI (U2) réservés au firmware et aux données de calibration du hub BHI260AP. L'exemple officiel « StandaloneFlashStorage » de la bibliothèque Arduino_BHY2 montre comment journaliser accéléromètre, gyroscope, température, gaz et rotation au format CSV directement sur cette flash, puis relire le fichier par le port série. Cas d'usage typique d'Arduino Pro : nœud de surveillance de maturation en entrepôt, hors ligne pendant des jours.
Matériel
- Carte Arduino Nicla Sense ME (ABX00050) et câble micro-USB
- Batterie LiPo sur J4 pour l'autonomie
- Bibliothèque Arduino_BHY2 (les utilitaires de fichiers sont exposés par l'objet BHY2)
- >
Code complet
#include "Arduino_BHY2.h"
SensorXYZ accel(SENSOR_ID_ACC); // ID 4
Sensor temp(SENSOR_ID_TEMP); // ID 128
File logFile;
void setup {
Serial.begin(115200);
while (!Serial);
BHY2.begin;
accel.begin;
temp.begin;
// Ecriture sur la flash SPI 2 MB embarquée
logFile = BHY2.open("log.csv", O_WRONLY | O_CREAT | O_TRUNC);
if (!logFile) {
Serial.println("Ouverture flash impossible");
while (1);
}
logFile.println("millis,ax,ay,az,temp_C");
}
void loop {
static auto printTime = millis;
BHY2.update;
if (millis - printTime >= 1000) {
printTime = millis;
if (accel.dataAvailable && temp.dataAvailable) {
logFile.printf("%lu,%.3f,%.3f,%.3f,%.2f\n", millis,
accel.x, accel.y, accel.z, temp.value);
}
}
}
Vérification attendue
Après quelques minutes de fonctionnement, le fichier « log.csv » contient une ligne par seconde avec horodatage, trois axes et température. On le relit et on le copie vers le PC avec l'exemple de lecture de la flash (ou on l'exploite directement en CSV dans un tableur). Vérifier aussi la robustesse : redémarrer la carte efface le log à cause de O_TRUNC, volontaire dans cet exemple.
Erreurs fréquentes
- Confondre les deux flashes : les 2 MB QSPI sont dédiés au BHI260AP (firmware BHY2, calibration BSX) et ne sont pas un stockage utilisateur ; les 2 MB SPI sont la zone de journalisation.
- Écrire à chaque tour de loop sans temporisation : l'usure de la flash et le bus saturent ; on limite la cadence (1 Hz ici) et on privilégie les FIFO du hub pour du haute fréquence.
- Oublier
BHY2.update: sans la pompe, aucune donnée n'arrive et le CSV ne contient que l'en-tête. - Prévoir la place : 2 MB paraissent énormes mais à ~40 octets par ligne, 1 Hz sature la capacité en moins de 12 heures ; agréger ou compresser pour du multi-jours.
- >
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_rgb.inoArduinoimu_bhi260.inoArduinorotation_fusion.inoArduinopression_bmp390.inoArduinonose_electronique.inoArduinoboussole_bmm150.inoArduino