🛠 Enregistreur de capteurs sur la flash embarquée
Objetivos
Constituir un registrador autónomo (datalogger) sin tarjeta SD: la placa incorpora 2 MB de memoria flash SPI (U7, MX25R1635F) conectada al módulo ANNA-B112, distinta de los 2 MB de memoria flash QSPI (U2) reservados para el firmware y los datos de calibración del hub BHI260AP. El ejemplo oficial «StandaloneFlashStorage» de la biblioteca Arduino_BHY2 muestra cómo registrar el acelerómetro, el giroscopio, la temperatura, los gases y la rotación en formato CSV directamente en esta memoria flash, y luego releer el archivo a través del puerto serie. Caso de uso típico de Arduino Pro: nodo de monitorización de maduración en almacén, sin conexión durante días.
Material
- Placa Arduino Nicla Sense ME (ABX00050) y cable micro-USB
- Batería LiPo en J4 para la autonomía
- Biblioteca Arduino_BHY2 (las utilidades de archivos están expuestas por el objeto BHY2)
- >
Código completo
#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 embarquee
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);
}
}
}
Verificación esperada
Después de unos minutos de funcionamiento, el archivo «log.csv» contiene una línea por segundo con marca de tiempo, tres ejes y temperatura. Se relee y se copia al PC con el ejemplo de lectura de la memoria flash (o se explota directamente como CSV en una hoja de cálculo). Verificar también la robustez: reiniciar la placa borra el registro debido a O_TRUNC, lo cual es intencional en este ejemplo.
Errores frecuentes
- Confundir las dos memorias flash: los 2 MB QSPI están dedicados al BHI260AP (firmware BHY2, calibración BSX) y no son un almacenamiento de usuario; los 2 MB SPI son la zona de registro.
- Escribir en cada vuelta de loop sin temporización: el desgaste de la memoria flash y la saturación del bus; se limita la frecuencia (1 Hz aquí) y se prefieren las FIFO del hub para alta frecuencia.
- Olvidar
BHY2.update: sin la bomba de actualización, no llegan datos y el CSV solo contiene la cabecera. - Prever el espacio: 2 MB parecen enormes, pero a ~40 bytes por línea, 1 Hz satura la capacidad en menos de 12 horas; agregar o comprimir para registros de varios días.
- >
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_rgb.inoArduinoimu_bhi260.inoArduinorotation_fusion.inoArduinopression_bmp390.inoArduinonose_electronique.inoArduinoboussole_bmm150.inoArduino