🛠 Journalisation IoT autonome avec MicroSD
Objectifs
Ce tutoriel vise à concevoir un système de journalisation de données environnementales autonome. L'objectif est d'utiliser le stockage MicroSD pour sauvegarder des lectures périodiques et l'affichage e-paper pour un résumé visuel, tout en gérant l'énergie pour une autonomie maximale. Nous explorerons l'interaction entre le bus SPI (pour la carte SD), le bus parallèle (pour l'écran) et la gestion des interruptions pour un fonctionnement efficace.
Matériel nécessaire
- Kit d'assemblage M5Stack PaperDIY (ESP32-S3)
- Carte MicroSD formatée en FAT32 (max 32 Go recommandé)
- Câbles de programmation USB-C
- Ordinateur avec Arduino IDE ou PlatformIO installé
- Bibliothèque
M5EPDetSD(native ESP32)
Étapes
Dans votre IDE, sélectionnez la carte "M5Stack-ESP32-S3". Assurez-vous que le mode de partition est défini sur "Huge APP" pour laisser de la place aux bibliothèques graphiques lourdes.
- Configuration de l'environnement
Le module ESP32-S3-WROOM-1-N16R8 communique avec la carte SD via le bus SPI. Vous devez définir les broches CS (Chip Select) correctement. Dans le code, initialisez la carte SD en vérifiant son état. ```cpp #include <SD.h> #include <SPI.h>
- Initialisation du stockage MicroSD
const int SD_CS = 4; // Vérifiez le schéma officiel PaperDIY pour la broche CS exacte
void setupSD() { if (!SD.begin(SD_CS)) { Serial.println("Échec initialisation SD"); return; } Serial.println("Carte SD initialisée"); } ```
L'écran ED047TC1 (960x540) utilise une interface parallèle 8 bits. N'oubliez pas de libérer la mémoire PSRAM (8 MB) pour les buffers d'image, car la SRAM (512 KB) est insuffisante pour le frame buffer complet. ```cpp #include <M5EPD.h> M5EPD_Canvas canvas(&M5.EPD);
- Gestion de l'affichage E-Paper
void drawSummary() { M5.EPD.WriteFullFrameBuffer(); // Rafraîchissement complet canvas.createCanvas(960, 540); canvas.drawCentreString("Données enregistrées", 480, 270, 4); canvas.pushCanvas(0, 0, UPDATE_MODE_GC16); } ```
Dans la boucle loop(), lisez un capteur (simulé ici), formatez la chaîne, et écrivez-la dans un fichier CSV sur la MicroSD. Utilisez flush() pour garantir l'écriture physique sur la carte. ``cpp void loop() { File logFile = SD.open("log.csv", FILE_APPEND); if (logFile) { logFile.print(millis()); logFile.println(",23.5"); // Exemple de valeur logFile.close(); } delay(60000); // 1 minute } ``
- Boucle d'acquisition et écriture
La batterie de 140 mAh est limitée. Désactivez le WiFi et le Bluetooth si non utilisés. Utilisez le mode Deep Sleep de l'ESP32-S3 entre les cycles de mesure pour réduire la consommation en veille.
- Optimisation énergétique
Vérification
Insérez la carte MicroSD dans un PC après l'exécution. Ouvrez le fichier log.csv avec un éditeur de texte ou un tableur. Vous devriez voir des lignes temporelles alignées. Sur l'écran e-paper, le texte "Données enregistrées" doit apparaître en noir net après le rafraîchissement GC16.
Pour aller plus loin
Implémentez une synchronisation WiFi (802.11b/g/n) pour uploader les logs vers un serveur MQTT lorsque le signal est détecté. Vous pouvez aussi ajouter un bouton physique pour forcer un rafraîchissement manuel de l'écran afin d'économiser la durée de vie de l'e-paper.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
epaper_hello_world.inoC++wifi_web_dashboard.inoC++sdcard_logger.inoC++deep_sleep_battery.inoC++ble_beacon.inoC++gpio-button-led-basic.inoC++ (Arduino)