Guide de choix de plateforme¶
La meilleure plateforme n'existe pas en absolu — elle se définit toujours par rapport aux contraintes d'un projet précis, que cette matrice de décision vous aide à rendre explicites.
Pourquoi formaliser le choix¶
Les projets IoT échouent rarement à cause d'un mauvais capteur ou d'un bug firmware corrigible. Ils échouent parce que la plateforme choisie en phase de prototype s'avère inadaptée à la production :
- Le Raspberry Pi 4 en prototype est remplacé en production par le CM4... après 6 mois de retravail de la carrier board.
- L'ESP32 sélectionné pour son Wi-Fi intégré s'avère en rupture d'approvisionnement 18 mois plus tard.
- Le STM32F4 choisi pour sa puissance de calcul consomme 10× trop pour l'autonomie batterie requise.
Une matrice de décision formalisée dès la phase de spécification force l'équipe à prioriser les critères avant qu'ils ne deviennent des contraintes subies.
Les critères de décision¶
Critères techniques¶
| Critère | Description | Poids typique |
|---|---|---|
| Connectivité RF | Wi-Fi, BLE, LoRa, Cellular, filaire | Élevé si sans-fil |
| Consommation énergétique | Batterie, solaire, secteur | Critique si autonome |
| Puissance de calcul | MIPS, ML embarqué, temps réel | Selon workload |
| Interfaces périphériques | I2C, SPI, CAN, Ethernet | Selon capteurs |
| Temps réel dur | Jitter garanti < N µs | Critique si contrôle |
Critères industriels / business¶
| Critère | Description | Poids typique |
|---|---|---|
| Coût unitaire | BOM à volume de production cible | Élevé en grande série |
| Support long terme | Disponibilité garantie sur 10 ans | Critique en prod. |
| Second source | Fournisseur alternatif disponible | Élevé > 50k pcs/an |
| Certifications | FCC, CE, UL, ATEX, SIL | Obligatoire selon marché |
| Écosystème développement | Maturité SDK, communauté, outils | Élevé si équipe réduite |
Matrice de décision pondérée¶
La matrice attribue une note de 1 à 5 à chaque plateforme pour chaque critère, multipliée par le poids du critère.
Grille de notation (exemple générique)¶
| Critère | Poids | ESP32-S3 | STM32F4 | nRF52840 | Raspberry Pi CM4 |
|---|---|---|---|---|---|
| Coût unitaire (1k pcs) | 5 | 5 (1,20 $) | 3 (2,50 $) | 2 (3,80 $) | 1 (35 $) |
| Consommation sleep | 4 | 3 (10 µA) | 4 (2 µA) | 5 (1,5 µA) | 1 (> 100 mA) |
| Connectivité RF | 4 | 5 (Wi-Fi+BLE) | 1 (aucune) | 4 (BLE 5) | 3 (Wi-Fi+BT) |
| Temps réel dur | 3 | 3 (FreeRTOS) | 5 (bare-metal) | 4 (Zephyr) | 1 (Linux) |
| Support long terme | 4 | 2 (10 ans déclaré) | 5 (15 ans garanti) | 4 (10 ans garanti) | 2 (non garanti) |
| Écosystème dev | 3 | 5 (Arduino+IDF) | 4 (STM32Cube) | 3 (Zephyr) | 5 (Linux+Python) |
| Certifications RF | 3 | 4 (modules certif.) | 1 (via module) | 4 (modules certif.) | 3 (module WLAN) |
Score total pondéré :
ESP32-S3 : 5×5 + 3×4 + 5×4 + 3×3 + 2×4 + 5×3 + 4×3 = 25+12+20+9+8+15+12 = 101
STM32F4 : 3×5 + 4×4 + 1×4 + 5×3 + 5×4 + 4×3 + 1×3 = 15+16+4+15+20+12+3 = 85
nRF52840 : 2×5 + 5×4 + 4×4 + 4×3 + 4×4 + 3×3 + 4×3 = 10+20+16+12+16+9+12 = 95
RPi CM4 : 1×5 + 1×4 + 3×4 + 1×3 + 2×4 + 5×3 + 3×3 = 5+4+12+3+8+15+9 = 56
Cette matrice est un outil de discussion, pas un oracle. Les poids changent selon le projet — et c'est là tout son intérêt.
Cas d'usage 1 — Capteur agricole autonome sur batterie¶
Contexte¶
Réseau de 500 nœuds de mesure déployés dans des parcelles agricoles. Mesure : température sol, humidité sol, luminosité. Remontée des données toutes les 15 minutes. Alimentation sur batterie Li-SOCl2 (Lithium-Thionyle Chlorure, non rechargeable, haute densité d'énergie). Durée de vie minimale : 5 ans sans maintenance.
Contraintes¶
- Courant moyen < 20 µA pour atteindre 5 ans sur 3,6 Ah (120 µAh/an, soit ~13,7 µA en moyenne)
- Portée radio : 2–15 km selon terrain agricole
- Coût cible BOM : < 25 € en volume 5 000 pièces
- Température : -20°C à +60°C en extérieur
Choix argumenté : nRF52832 + module LoRa SX1262¶
Le Wi-Fi est éliminé dès le départ : son courant d'émission (100 mA+) est incompatible avec 5 ans de batterie. Le BLE seul ne couvre pas la portée requise en champ ouvert.
Architecture retenue :
- MCU : nRF52832 (Cortex-M4F, 64 MHz, BLE 5.0)
- Radio LoRa : SX1262 en SPI, piloté par le nRF
- Capteurs : BME280 (T/H/P), DS18B20 (T sol), BH1750 (luminosité)
- MCU en deep sleep 99,8 % du temps (réveil toutes les 15 min)
Calcul d'autonomie simplifié :
- Phase active (acquisition + LoRa TX) : 15 mA × 2 s = 8,3 µAh
- Deep sleep 15 min : 1,5 µA × 0,25 h = 0,375 µAh
- Courant moyen : 8,3/0,25 + 1,5 ≈ 35 µA → batterie 5 Ah → 5,7 ans
Résumé du cas 1¶
| Paramètre | Valeur |
|---|---|
| MCU | nRF52832 |
| Radio | LoRa SX1262 (868 MHz, SF9, BW125) |
| Protocole | LoRaWAN OTAA, classe A |
| Autonomie estimée | 5–7 ans sur Li-SOCl2 3,6 V / 5 Ah |
| Coût BOM estimé | 18–22 € à 5k pcs |
Cas d'usage 2 — Gateway d'usine multi-protocole¶
Contexte¶
Gateway industrielle dans une usine automobile. Doit agréger des données de 50 équipements via Modbus RTU, 10 équipements via Profibus DP (adaptateur), et 5 robots via EtherNet/IP. Publie vers un broker MQTT sur le réseau de production. Exécute des règles de pré-traitement locales. Mise à jour OTA via Balena Cloud.
Contraintes¶
- Multi-protocole : Modbus, MQTT, HTTP, Profibus via adaptateur
- Calcul local (règles, agrégation) : Python ou Node-RED
- Alimentation 24 V DC DIN Rail
- Temperature : 0°C à +55°C (armoire électrique non climatisée)
- Disponibilité : 99,5 % (maximum 44 h d'arrêt/an)
Choix argumenté : Raspberry Pi CM4 + carrier board industrielle¶
Un MCU est insuffisant : la pile réseau complète, TLS, le moteur de règles Python et la mise à jour OTA nécessitent Linux. L'ESP32 et le STM32 sont éliminés.
Architecture retenue :
- SBC : Raspberry Pi CM4 (4 Go RAM, 32 Go eMMC, module Lite sans Wi-Fi pour réduire les interférences)
- Carrier board : conçue sur mesure ou basée sur Waveshare CM4-NANO-B (DIN Rail, 9–28 V)
- OS : Raspberry Pi OS Lite + Balena OS pour la gestion de flotte
- Interfaces : 2 × RS-485 (MAX485), 1 × Ethernet Gigabit, 1 × mini PCIe pour carte Profibus
- Stockage : SSD NVMe 64 Go via adaptateur PCIe (fiabilité supérieure à l'eMMC)
Résumé du cas 2¶
| Paramètre | Valeur |
|---|---|
| SBC | Raspberry Pi CM4 4 Go / 32 Go eMMC |
| OS | Raspberry Pi OS Lite + Balena |
| Protocoles | Modbus RTU, MQTT, EtherNet/IP, HTTP |
| Alimentation | 9–28 V DC via convertisseur Murata |
| MTBF estimé | > 100 000 h (sans pièces mécaniques, SSD) |
| Coût BOM | 120–180 € à 50 unités |
Cas d'usage 3 — Contrôle moteur temps réel¶
Contexte¶
Système d'enroulage précis pour l'industrie textile. Contrôle en boucle fermée de 3 axes servo DC brushless. Fréquence de boucle de contrôle : 5 kHz (jitter max ±2 µs). Communication avec un superviseur PC via EtherCAT. Interface opérateur via écran TFT 4".
Contraintes¶
- Temps réel dur : boucle de contrôle 5 kHz, jitter < ±2 µs garanti
- Calcul DSP : filtre PID 3 axes, Clarke/Park transforms (FOC)
- Interface haute vitesse : encodeurs incrémentaux 10 000 imp/tr, 3 axes
- Certification : IEC 61800-5-1 (sécurité des entraînements électriques)
Choix argumenté : STM32F446RE + RTOS FreeRTOS¶
Linux est totalement exclu : pas de temps réel dur garanti. L'ESP32 a un jitter trop élevé en mode Wi-Fi. Le STM32F4 avec son FPU Cortex-M4 et ses timers haute résolution est parfaitement adapté.
Architecture retenue :
- MCU principal : STM32F446RE (Cortex-M4F 180 MHz, FPU, DSP)
- RTOS : FreeRTOS avec tâche contrôle à priorité maximale, pinned sur un cœur
- Timers : TIM1/TIM8 en mode encoder pour les 3 axes ; TIM2 pour la boucle de contrôle à 5 kHz
- Communication EtherCAT : carte EtherCAT ET1100 (Beckhoff) en SPI
- Écran TFT : SSD1963 via FSMC (mémoire externe) pour rafraîchissement sans charge CPU
Garantie temps réel :
Période interruption TIM2 = 1/5000 = 200 µs
Durée ISR (PID 3 axes + FOC) = ~15 µs @ 180 MHz
Marge disponible = 185 µs = 92,5 %
Jitter interruption STM32 (NVIC latence) = 12 cycles = 67 ns → << 2 µs ✓
Résumé du cas 3¶
| Paramètre | Valeur |
|---|---|
| MCU | STM32F446RE @ 180 MHz |
| RTOS | FreeRTOS, tâche RT à priorité max |
| Fréquence boucle | 5 kHz (200 µs/cycle) |
| Jitter mesuré | < 200 ns (NVIC + FreeRTOS) |
| Interface superviseur | EtherCAT (ET1100 SPI) |
| Coût BOM (PCB custom) | 45–65 € à 200 unités |
Tableau récapitulatif des 3 cas¶
| Critère | Cas 1 — Capteur agricole | Cas 2 — Gateway usine | Cas 3 — Contrôle moteur |
|---|---|---|---|
| Plateforme | nRF52832 + SX1262 | RPi CM4 | STM32F446RE |
| OS / RTOS | Bare-metal / Zephyr | Linux (Balena) | FreeRTOS |
| Connectivité | LoRaWAN | Ethernet + RS-485 | EtherCAT |
| Consommation | 35 µA moyen | 2–5 W | 500 mW–2 W |
| Temps réel | Soft (réveil toutes 15 min) | Non (Linux) | Dur (5 kHz, ±200 ns) |
| Coût BOM | 18–22 € | 120–180 € | 45–65 € |
| Volume cible | 5 000 unités | 50 unités | 200 unités |
Processus de sélection en entonnoir¶
flowchart TD
A["Spécification projet\n(besoins fonctionnels et non-fonctionnels)"] --> B["Filtre 1 — Éliminatoires\nTemps réel dur ? Alimentation batterie ?\nOS Linux requis ?"]
B --> C["Filtre 2 — Connectivité\nWi-Fi / BLE / LoRa / Cellular / Ethernet"]
C --> D["Filtre 3 — Contraintes supply chain\nVolume, second source, LTB, certifications"]
D --> E["Filtre 4 — Coût total\nBOM + NRE + coût développement"]
E --> F["Matrice de décision pondérée\nScore sur critères priorisés par le projet"]
F --> G["Prototype de validation\nBenchmark sur les points critiques"]
G --> H{"Critères de GO\nvalidés ?"}
H -->|Oui| I["Plateforme sélectionnée\nGelée pour la production"]
H -->|Non| D
style I fill:#2d8a4e,color:#fff Ce qu'il faut retenir¶
- La matrice de décision pondérée doit être construite par l'équipe projet, pas copiée depuis un article de blog : les poids reflètent les priorités du projet, pas des vérités universelles.
- Les contraintes éliminatoires (temps réel dur → pas de Linux ; batterie longue durée → pas de Wi-Fi) filtrent la liste avant même la matrice.
- Le coût total n'est pas le BOM seul : le coût de développement (maturité SDK, courbe d'apprentissage) représente souvent 3 à 10× le coût matériel sur la durée du projet.
- Valider la plateforme sur un prototype ciblant les points de risque technique (latence, consommation, thermique) avant de geler l'architecture.
Chapitre suivant : Développement firmware — de l'environnement de développement au binaire déployé.