ESP32 vs Raspberry Pi Pico W : c'est l'une des questions les plus fréquentes au lancement d'un projet IoT en Wi-Fi, et les deux cartes peuvent publier des données de capteurs sur un broker MQTT en quelques lignes de code. Cette comparaison se concentre sur ce qui compte vraiment pour des objets connectés : la pile sans fil, les environnements de programmation, les performances TLS, l'économie d'énergie et l'écosystème, et se termine par une recommandation claire pour chaque type de projet.
La réponse courte
Choisissez l'ESP32 lorsque l'appareil est avant tout un équipement réseau : il a besoin de TLS, de Bluetooth, d'un fonctionnement sur batterie avec deep sleep, ou de bibliothèques Arduino et ESP-IDF éprouvées. Choisissez le Pico W si vous appréciez l'excellente documentation de Raspberry Pi, les entrées-sorties programmables (PIO) du RP2040 ou une prise en main en douceur de MicroPython, et que l'appareil est surtout alimenté sur secteur. Les deux sont des clients MQTT parfaitement capables.
Le matériel en un coup d'œil
| ESP32 (classique, par ex. ESP32-WROOM-32) | Raspberry Pi Pico W | |
|---|---|---|
| CPU | Xtensa LX6 double cœur, jusqu'à 240 MHz | Arm Cortex-M0+ double cœur (RP2040), 133 MHz |
| SRAM | 520 Ko | 264 Ko |
| Flash | Généralement 4 Mo sur les modules | 2 Mo |
| Wi-Fi | 802.11 b/g/n, 2,4 GHz, intégré | 802.11n, 2,4 GHz, Infineon CYW43439 via SPI |
| Bluetooth | Classic et BLE | Via le CYW43439 : BLE en MicroPython, BLE et Classic dans le SDK C (ajoutés après le lancement) |
| Accélération cryptographique | Matériel AES, SHA, RSA/grands nombres | Aucune |
| E/S spécifiques | Détection tactile, DAC sur l'ESP32 classique, nombreux périphériques | Machines d'état PIO pour protocoles personnalisés |
| Basse consommation | Deep sleep avec mémoire RTC, réveil par timer et GPIO | Modes dormant et sleep, moins clés en main pour les appareils Wi-Fi |
| Choix de cartes | Des centaines de cartes chez de nombreux fabricants | Carte officielle plus cartes tierces compatibles |
La famille ESP32 compte de nombreux membres : le S3 ajoute des instructions vectorielles pour l'IA et l'USB, les C3 et C6 sont des puces RISC-V à bas coût, et le C6 ajoute le Wi-Fi 6 et Thread. Raspberry Pi a aussi lancé le Pico 2 W, basé sur le RP2350 avec des cœurs Cortex-M33 plus rapides, davantage de SRAM et des fonctions de sécurité. Si vous choisissez aujourd'hui, comparez aussi ces puces plus récentes ; la plupart des compromis ci-dessous restent valables.
Pile Wi-Fi et réseau
Sur l'ESP32, le Wi-Fi fait partie de la puce et la pile réseau (lwIP plus les pilotes d'Espressif) équipe un très grand nombre de produits commercialisés. Reconnexions, sockets multiples, TLS et fonctions comme le provisioning Wi-Fi sont des terrains bien balisés. Le composant ESP-MQTT d'Espressif prend en charge MQTT 3.1.1 et MQTT 5 nativement lorsque vous utilisez ESP-IDF.
Le Pico W relie sa radio CYW43439 par un bus de type SPI et exécute lwIP sur le RP2040. Il fonctionne de manière fiable pour les projets typiques de capteurs et de commande, et le SDK Raspberry Pi comme le portage MicroPython sont bien maintenus. Le pilote radio consomme cependant une partie des ressources du RP2040, et vous disposez de moins de bibliothèques réseau matures en C que sur l'ESP32.
Les deux cartes fonctionnent uniquement en 2,4 GHz : aucune ne rejoindra un réseau exclusivement 5 GHz.
Options de programmation
| Environnement | ESP32 | Pico W |
|---|---|---|
| Arduino | Core officiel d'Espressif, très vaste écosystème de bibliothèques (PubSubClient, AsyncMqttClient, ArduinoJson) | Core communautaire arduino-pico d'Earle Philhower ; PubSubClient fonctionne |
| MicroPython | Pris en charge, umqtt.simple disponible |
Pris en charge et documenté officiellement par Raspberry Pi |
| CircuitPython | Pris en charge sur de nombreuses cartes | Pris en charge |
| SDK natif | ESP-IDF avec FreeRTOS, client MQTT intégré | Pico SDK avec lwIP, client MQTT issu des applications lwIP |
Pour les débutants en MicroPython, la documentation du Pico W est un véritable atout : les guides de Raspberry Pi détaillent le flashage, le Wi-Fi et les premiers programmes avec très peu de surprises. Pour les utilisateurs d'Arduino, l'ESP32 dispose de l'écosystème de bibliothèques le plus riche. Si vous penchez pour MicroPython sur ESP32, le guide MicroPython umqtt ESP32 présente la configuration équivalente.
MQTT sur le Pico W avec MicroPython
Ce script connecte un Pico W à la zone de test publique de broker.connectmq.com et publie la valeur du capteur de température interne toutes les dix secondes. Le même code tourne sur un ESP32 sous MicroPython si vous retirez les lignes du capteur de température.
import time
import network
import machine
from umqtt.simple import MQTTClient # installation : import mip; mip.install("umqtt.simple")
SSID = "YOUR_WIFI"
PASSWORD = "YOUR_WIFI_PASSWORD"
BROKER = "broker.connectmq.com"
CLIENT_ID = b"picow-5b2e" # doit être non vide et unique
TOPIC = b"connectmq/demo/picow-5b2e/telemetry"
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
for _ in range(30):
if wlan.isconnected():
break
time.sleep(1)
if not wlan.isconnected():
machine.reset()
print("Wi-Fi OK:", wlan.ifconfig()[0])
sensor = machine.ADC(4) # capteur de température interne du RP2040
def read_temp_c():
volts = sensor.read_u16() * 3.3 / 65535
return 27 - (volts - 0.706) / 0.001721
client = MQTTClient(CLIENT_ID, BROKER, port=1883, keepalive=60)
client.set_last_will(b"connectmq/demo/picow-5b2e/status", b"offline", retain=True, qos=1)
client.connect()
client.publish(b"connectmq/demo/picow-5b2e/status", b"online", retain=True, qos=1)
while True:
try:
payload = '{"temp_c":%.2f,"rssi":%d}' % (read_temp_c(), wlan.status("rssi"))
client.publish(TOPIC, payload.encode())
print("sent", payload)
except OSError as e:
print("MQTT error, reconnecting:", e)
time.sleep(5)
client.connect()
time.sleep(10)
Vérifiez depuis n'importe quel ordinateur :
mosquitto_sub -h broker.connectmq.com -p 1883 -i picow-5b2e-viewer -t "connectmq/demo/picow-5b2e/#" -v
L'équivalent Arduino pour l'ESP32 avec PubSubClient est détaillé pas à pas dans le tutoriel IoT ESP32.
Performances TLS : là où les cartes diffèrent le plus
En production, MQTT doit passer par TLS sur le port 8883, et c'est là que l'écart matériel se voit. Une négociation TLS implique des opérations à clé publique (RSA ou courbes elliptiques) et la vérification de certificats, des calculs lourds pour un microcontrôleur.
- L'ESP32 exécute mbedTLS avec une accélération matérielle pour AES, SHA et l'arithmétique des grands nombres. Les négociations sont assez rapides pour qu'une reconnexion après une coupure Wi-Fi passe presque inaperçue, et il reste assez de RAM pour les tampons TLS à côté de votre application.
- Le Pico W effectue les mêmes opérations en logiciel sur des cœurs Cortex-M0+ à 133 MHz, dépourvus de certaines instructions qui accélèrent ces calculs. TLS fonctionne, mais les négociations sont nettement plus longues et la RAM plus juste avec 264 Ko à partager.
En pratique, cela compte surtout pour les appareils sur batterie qui se réveillent, se connectent, publient et se rendorment : chaque réveil paie une négociation complète, donc une négociation plus lente coûte directement de l'autonomie. Pour les appareils toujours allumés, une première connexion plus lente pose rarement problème.
Deux conseils valent pour les deux cartes : réglez l'horloge système (NTP) avant de vous connecter, car la validation des certificats a besoin de la date courante, et ne chargez que le certificat racine nécessaire (ISRG Root X1 pour les brokers utilisant Let's Encrypt) afin d'économiser la mémoire. Le guide ESP32 MQTT SSL détaille la partie ESP32.
Consommation et autonomie sur batterie
Le deep sleep de l'ESP32 est conçu précisément pour le schéma « réveil, mesure, publication, sommeil » : les cœurs principaux s'éteignent, le domaine RTC conserve un timer et quelques octets de mémoire, et la puce se réveille sur timer ou GPIO. Des capteurs sur batterie qui tiennent des mois avec un seul élément sont courants. Consultez ESP32 deep sleep avec MQTT pour un exemple complet.
Le Pico W peut entrer en modes sleep et dormant, mais la puce Wi-Fi doit être gérée séparément et l'outillage est moins clés en main. De nombreux projets Pico W sur batterie coupent plutôt complètement l'alimentation à l'aide d'une puce timer externe. Si votre appareil est alimenté sur secteur ou en USB, la différence disparaît en grande partie.
Check-list de décision
- Sur batterie et publication en TLS ? ESP32.
- Besoin du Bluetooth Classic ou d'une pile BLE mature ? L'ESP32 a un historique plus long.
- Apprendre MicroPython de zéro avec des tutoriels officiels ? Le Pico W est un choix très accueillant.
- Protocoles personnalisés à timing critique (rubans LED, formats série atypiques) ? Le PIO du Pico W est excellent.
- Gros besoins en bibliothèques Arduino ? ESP32.
- Envie du silicium le plus récent ? Comparez ESP32-S3/C6 et Pico 2 W avant de décider.
Vous venez plutôt de l'ESP8266 ? La comparaison ESP32 vs ESP8266 couvre cette migration.
Côté broker, c'est la même chose pour les deux
Quelle que soit la carte choisie, l'appareil n'est qu'un client MQTT. Le broker gère l'authentification, la diffusion vers les tableaux de bord et les backends, ainsi que l'état retenu. Vous pouvez donc mélanger des ESP32 et des Pico W sur les mêmes topics sans rien changer ailleurs. Commencez vos tests sur le serveur MQTT public gratuit, réservé aux tests, puis, à la mise en service, passez à un broker MQTT cloud privé et protégé par TLS pour que vos appareils aient leurs propres identifiants. ConnectMQ prend en charge MQTT 3.1.1 (utilisé par umqtt.simple et PubSubClient) et MQTT 5.
Démarrer avec ConnectMQ
Les deux cartes fonctionnent avec ConnectMQ, un broker MQTT managé, sans configuration particulière : TCP sur 1883, TLS sur 8883 avec un certificat Let's Encrypt, et un client MQTT dans le navigateur pour tester vos messages. Créez un broker Serverless gratuit sur app.connectmq.com sans carte bancaire et connectez votre ESP32 ou votre Pico W en quelques minutes.
Questions fréquentes
L'ESP32 ou le Pico W est-il le plus adapté aux débutants ?
Les deux sont accessibles aux débutants. Le Pico W bénéficie d'une documentation MicroPython officielle remarquable, tandis que l'ESP32 dispose d'un plus grand nombre de tutoriels et de bibliothèques Arduino.
Le Raspberry Pi Pico W peut-il utiliser MQTT sur TLS ?
Oui, via le module ssl de MicroPython ou le client sécurisé du core arduino-pico. Attendez-vous à des négociations plus lentes que sur l'ESP32, faute d'accélération cryptographique.
Quelle carte consomme le moins ?
Pour les appareils sur batterie qui dorment entre deux mesures, le deep sleep de l'ESP32 est plus simple à utiliser et très efficace. Pour les appareils toujours allumés, la différence pèse moins que le choix des capteurs et de l'intervalle de publication.
Puis-je mélanger des ESP32 et des Pico W dans un même système MQTT ?
Oui. MQTT est indépendant du matériel : les deux peuvent publier et s'abonner sur le même broker et les mêmes topics.



