Aller au contenu

Architecture firmware

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/
LibrairieRôleDocumentation
SimCommProtocole ESP-NOW (broadcast, groupes, canaux)Pattern ESP-NOW
SimScenarioMoteur de scénarios JSONPattern JSON engine
SimDisplayAbstraction affichage TFT/OLEDPattern display
SimButtonBouton debounced (50ms, INPUT_PULLUP)
SimAudioLecteur audio I2S (WAV, FreeRTOS)Pattern I2S audio
Librairie externeVersionUsage
ArduinoJson7.xParsing scénarios JSON
TFT_eSPI2.5.xAffichage TFT (sprite buffering)
U8g22.35.xAffichage OLED (page buffer)
FastLED3.7.xContrôle LED WS2812B
ESP32-audioI2S2.xLecture audio I2S

Les plateformes B et C utilisent l’ESP32-S3 dual-core :

CoreTâchesStack
Core 0WiFi, ESP-NOW, WebSocket4096 bytes
Core 1Audio, LED, affichage écran8192 bytes

Chaque tâche FreeRTOS est assignée à un core spécifique via xTaskCreatePinnedToCore().

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,
};
  • Fichiers : snake_case.cpp, snake_case.h
  • Classes : PascalCase
  • Constantes : UPPER_SNAKE_CASE
  • Variables/fonctions : camelCase
Fenêtre de terminal
# Compiler un firmware spécifique
pio run -e dae # DAE (Plateforme C)
pio run -e dinamap # Dinamap (Plateforme A+)
pio run -e scope # Scope (Plateforme B)
# Flasher
pio run -e dae -t upload
# Moniteur série
pio device monitor -b 115200