Réception ESP-NOW
Reçoit les messages ESP-NOW des nodes (paramètres vitaux, annonces, événements) et les transmet à la machine hôte en JSON lines via USB série.
L’ESP32-S3 USB bridge est le seul PCB custom nécessaire pour connecter un SimServer aux nodes de simulation (DAE, Dinamap, Scope…). C’est un petit circuit imprimé 2 couches qui fait le pont entre le réseau ESP-NOW des dispositifs et la machine hôte via USB-C.
graph LR Nodes["Nodes ESP32<br/>(DAE, Dinamap, Scope)"] <-->|ESP-NOW<br/>broadcast| Bridge["ESP32-S3<br/>USB Bridge"] <-->|USB-C<br/>JSON lines| Host["Machine hôte<br/>(Docker SimServer)"]
style Nodes fill:#d94a4a,color:#fff style Bridge fill:#9b59b6,color:#fff style Host fill:#4a90d9,color:#fff| Paramètre | Valeur |
|---|---|
| MCU | ESP32-S3-WROOM-1 (N16R8) |
| Flash | 16 Mo |
| PSRAM | 8 Mo |
| Connecteur | USB-C (USB 2.0, CDC-ACM) |
| Couches PCB | 2 |
| Dimensions | ~40 x 25 mm |
| Coût unitaire | ~5 EUR (composants + PCB) |
| Licence | CERN-OHL-S v2 |
| Conception | KiCad 8 |
Réception ESP-NOW
Reçoit les messages ESP-NOW des nodes (paramètres vitaux, annonces, événements) et les transmet à la machine hôte en JSON lines via USB série.
Émission ESP-NOW
Reçoit les commandes de SimServer via USB série et les retransmet aux nodes en broadcast ESP-NOW (démarrage scénario, overrides, événements).
LED de statut
LED RGB indiquant l’état : démarrage (bleu), connecté (vert), activité ESP-NOW (clignotement), erreur (rouge).
OTA via USB-DFU
Mise à jour du firmware via USB-DFU — pas besoin de retirer le bridge pour le flasher.
┌─────────────────────────────────┐│ ESP32-S3-WROOM-1 ││ (N16R8) ││ ││ ┌─────────┐ ┌────────────┐ ││ │ ESP-NOW │ │ USB CDC │ ││ │ Radio │ │ (série) │ ││ └────┬─────┘ └─────┬──────┘ ││ │ │ ││ ┌────┴────────────────┴──────┐ ││ │ Firmware bridge │ ││ │ (réception / émission │ ││ │ + JSON lines parsing) │ ││ └────────────┬───────────────┘ ││ │ ││ ┌────┴────┐ ││ │ LED RGB │ ││ └─────────┘ │└───────────────┬─────────────────┘ │ ┌────┴────┐ │ USB-C │ └─────────┘Le bridge communique avec la machine hôte en JSON lines à 115200 baud. Chaque ligne est un message JSON complet terminé par \n.
// Bridge → Machine hôte{"type":"vitals","device":"dinamap-01","hr":72,"spo2":98,"rr":16}{"type":"announce","device":"dae-01","deviceType":"dae","capabilities":["shock","analyze"]}{"type":"event","device":"dae-01","name":"shock_delivered","energy":200}
// Machine hôte → Bridge{"cmd":"start","scenario":"acr-fv-adulte","group":1}{"cmd":"override","param":"hr","value":120,"group":1}{"cmd":"stop","group":1}Sur Linux, le bridge apparaît comme /dev/ttyACM0 (USB CDC-ACM).
Le bridge supporte l’isolation par Group ID pour faire fonctionner jusqu’à 3 kits simultanément dans la même salle :
| Kit | Canal WiFi | Group ID |
|---|---|---|
| Kit 1 | 1 | 1 |
| Kit 2 | 6 | 2 |
| Kit 3 | 11 | 3 |
Le Group ID est configuré via une commande JSON au démarrage.
Voir PCB (KiCad) pour les détails de conception et les fichiers de fabrication.