ESP32 et Arduino

ESP32 vs Raspberry Pi Pico W pour l'IoT : Wi-Fi, MicroPython, Arduino et TLS comparés

Une comparaison pratique de l'ESP32 et du Raspberry Pi Pico W pour les projets connectés : matériel, Wi-Fi et Bluetooth, options de programmation, performances TLS, modes basse consommation et code MQTT sur les deux cartes.

Cartes ESP32 et Raspberry Pi Pico W côte à côte, publiant toutes deux des données de capteurs vers un broker MQTT
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

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

  1. Sur batterie et publication en TLS ? ESP32.
  2. Besoin du Bluetooth Classic ou d'une pile BLE mature ? L'ESP32 a un historique plus long.
  3. Apprendre MicroPython de zéro avec des tutoriels officiels ? Le Pico W est un choix très accueillant.
  4. Protocoles personnalisés à timing critique (rubans LED, formats série atypiques) ? Le PIO du Pico W est excellent.
  5. Gros besoins en bibliothèques Arduino ? ESP32.
  6. 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.

Articles liés

Exemple MQTT ESP-IDF : construire un client esp-mqtt à partir de zéro

Construisez un projet ESP-IDF à partir d'un dossier vide avec le composant esp-mqtt : configuration du Wi-Fi en mode station, gestionnaire d'événements MQTT, publication et abonnement, propriétés MQTT 5 et TLS avec le bundle de certificats.

9 min de lecture

Horodatage NTP ESP32 MQTT : ajouter une heure précise à chaque message

Synchronisez l'horloge de l'ESP32 avec NTP, formatez des horodatages ISO 8601 et epoch en millisecondes, et joignez-les aux payloads MQTT pour que les mesures conservent leur véritable heure de capture même lorsqu'elles sont publiées en retard.

8 min de lecture

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.