Architecture firmware
Vue d’ensemble
Section intitulée « Vue d’ensemble »Le firmware KerSim est développé en C++17 avec PlatformIO et le framework Arduino-ESP32. Il est organisé en :
- 5 librairies partagées dans
firmware/lib/ - Firmwares spécifiques par dispositif dans
firmware/devices/ - Fichiers data (scénarios JSON, audio WAV) dans
firmware/data/
Librairies partagées
Section intitulée « Librairies partagées »| Librairie | Rôle | Documentation |
|---|---|---|
| SimComm | Protocole ESP-NOW (broadcast, groupes, canaux) | Pattern ESP-NOW |
| SimScenario | Moteur de scénarios JSON | Pattern JSON engine |
| SimDisplay | Abstraction affichage TFT/OLED | Pattern display |
| SimButton | Bouton debounced (50ms, INPUT_PULLUP) | — |
| SimAudio | Lecteur audio I2S (WAV, FreeRTOS) | Pattern I2S audio |
Dépendances
Section intitulée « Dépendances »| Librairie externe | Version | Usage |
|---|---|---|
| ArduinoJson | 7.x | Parsing scénarios JSON |
| TFT_eSPI | 2.5.x | Affichage TFT (sprite buffering) |
| U8g2 | 2.35.x | Affichage OLED (page buffer) |
| FastLED | 3.7.x | Contrôle LED WS2812B |
| ESP32-audioI2S | 2.x | Lecture audio I2S |
Architecture dual-core (ESP32-S3)
Section intitulée « Architecture dual-core (ESP32-S3) »Les plateformes B et C utilisent l’ESP32-S3 dual-core :
| Core | Tâches | Stack |
|---|---|---|
| Core 0 | WiFi, ESP-NOW, WebSocket | 4096 bytes |
| Core 1 | Audio, LED, affichage écran | 8192 bytes |
Chaque tâche FreeRTOS est assignée à un core spécifique via xTaskCreatePinnedToCore().
Machine à états
Section intitulée « Machine à états »Chaque dispositif est une machine à états finie avec un enum DeviceState :
enum class DeviceState : uint8_t { IDLE, POWERING_ON, READY, // ... états spécifiques au dispositif ERROR,};Conventions
Section intitulée « Conventions »- Fichiers :
snake_case.cpp,snake_case.h - Classes :
PascalCase - Constantes :
UPPER_SNAKE_CASE - Variables/fonctions :
camelCase
Compilation
Section intitulée « Compilation »# Compiler un firmware spécifiquepio run -e dae # DAE (Plateforme C)pio run -e dinamap # Dinamap (Plateforme A+)pio run -e scope # Scope (Plateforme B)
# Flasherpio run -e dae -t upload
# Moniteur sériepio device monitor -b 115200