ESP32 (original, classe ESP32-WROOM-32)

Espressif SystemsMCU 32-bitarduino

⚡ L’essentiel en 60 secondes

L’ESP32, lancé par Espressif Systems le 6 septembre 2016, s’est imposé comme une référence incontournable dans le monde des objets connectés et de l’électronique embarquée. Fabriqué par TSMC selon une gravure de 40 nanomètrès, ce circuit intégré a marqué un tournant en offrant pour la première fois une combinaison rare de performances et de connectivité à un coût très bas, estimé entre 2,50 et 5 dollars américains par unité en volume lors de son lancement. Bien que des révisions matérielles aient suivi, notamment la version ECO V3 sortie en 2020 pour corriger certains défauts de fabrication, la carte reste active et largement supportée aujourd’hui. Son architecture repose sur un cœur double Tensilica Xtensa LX6, capable de fonctionner jusqu’à 240 MHz. Pour le novice, cela signifie que le processeur peut exécuter deux tâches informatiques simultanément, ce qui est crucial pour les applications nécessitant une gestion fluide des communications réseau tout en gérant la logique de l’application. En plus de ces deux cœurs principaux, une unité de traitement ultra-basse consommation (ULP) est intégrée dans le domaine de l’horloge temps réel, permettant de maintenir des fonctions simples actives avec une consommation d’énergie infime, idéale pour les appareils fonctionnant sur batterie.

La connectivité est sans doute l’atout majeur de cette puce. Elle intègre nativement le Wi-Fi 802.11 b/g/n sur la bande des 2,4 GHz, offrant des débits théoriques jusqu’à 150 Mbps, ainsi que le Bluetooth classique et le Bluetooth Low Energy (BLE) 4.2. Cette dualité radio lui permet de communiquer avec une grande variété d’appareils, des smartphones aux capteurs industriels, sans nécessiter de composants externes supplémentaires. Pour les projets nécessitant une connexion filaire, l’ESP32 dispose également d’un contrôleur Ethernet MAC, bien qu’il faille y adjoindre une puce PHY externe pour la liaison physique. La gestion de l’entrée-sortie est assurée par 34 broches GPIO (General Purpose Input/Output), qui sont les points de contact physiques permettant de connecter des capteurs, des actionneurs ou d’autres circuits. Il est crucial de noter que ces broches fonctionnent en logique 3,3 volts et ne tolèrent pas les signaux 5 volts, sous peine de dommages irréversibles. Parmi ces broches, certaines sont dédiées à des fonctions spécifiques ou présentent des restrictions : par exemple, les broches GPIO34 à 39 sont uniquement en entrée et ne disposent pas de résistances de tirage internes, ce qui signifie qu’elles ne peuvent pas envoyer de signal ni détecter un bouton-poussoir de manière fiable sans circuit externe. De plus, les broches GPIO6 à 11 sont souvent réservées à la mémoire flash interne sur les modules classiques et ne doivent pas être utilisées pour des usages généraux.

L’ESP32 se distingue aussi par la richesse de ses périphériques intégrés, souvent absents des microcontrôleurs de sa catégorie. Il possède trois interfaces SPI, trois ports série UART, deux bus I2C et une interface I2S pour l’audio. Pour le contrôle de moteurs ou de LED, il offre seize canaux de modulation de largeur d’impulsion (PWM) avec une résolution de 8 bits, permettant de varier la luminosité ou la vitesse avec précision. Une fonctionnalité remarquable est le bloc RMT (Remote Control), capable de générer ou de décoder des signaux complexes en matériel, comme ceux utilisés par les rubans de LED adressables de type WS2812, sans solliciter le processeur. La puce inclut également un capteur à effet Hall, dix pads de détection capacitive tactile et un convertisseur analogique-numérique (ADC) 12 bits. Cependant, l’utilisation de l’ADC demande une attention particulière : le convertisseur ADC2 entre en conflit avec le pilote Wi-Fi, rendant ses lectures impossibles lorsque le Wi-Fi est activé. Il est donc recommandé d’utiliser les broches de l’ADC1 (comme GPIO32 à 39) pour les mesures analogiques dans les projets connectés. Par ailleurs, la linéarité de l’ADC est perfectible, et les fabricants recommandent l’utilisation des API de calibration logicielle pour obtenir des mesures précises.

L’alimentation et la gestion de l’énergie sont des aspects critiques à maîtriser. Bien que l’ESP32 propose des modes de veille profonde consommant environ 10 microampères, le passage en mode transmission Wi-Fi ou Bluetooth provoque des pics de courant pouvant atteindre plusieurs centaines de milliampères. Une alimentation mal dimensionnée ou des capacités de filtrage insuffisantes sur la ligne 3,3 volts peuvent provoquer des réinitialisations aléatoires dues au détecteur de chute de tension (Brownout Detector). Pour les concepteurs, il est impératif de prévoir une alimentation capable de fournir au moins 500 mA en pointe. La température de fonctionnement s’étend de -40 °C à +125 °C, classant le composant en grade industriel, ce qui le rend adapté à des environnements exigeants. En revanche, le capteur de température interne est documenté comme étant imprécis et non calibré, et ne doit pas être utilisé pour des mesures fiables.

L’écosystème logiciel autour de l’ESP32 est vaste et flexible. Le SDK officiel, ESP-IDF, basé sur le système d’exploitation temps réel FreeRTOS, offre un contrôle fin sur le matériel et est écrit en C/C++. Il permet d’exploiter pleinement les deux cœurs du processeur en répartissant les tâches, par exemple en dédiant un cœur aux piles de communication Wi-Fi/Bluetooth et l’autre à l’application principale. Pour les débutants ou les prototypages rapides, le noyau Arduino pour ESP32 est extrêmement populaire, simplifiant l’accès aux fonctions complexes. MicroPython et CircuitPython sont également officiellement supportés, permettant de programmer la carte avec une syntaxe Python plus accessible. D’autres environnements comme Zephyr RTOS ou Rust via esp-rs témoignent de la vitalité de la communauté. La programmation se fait généralement via un port série UART, nécessitant un pont USB-UART sur les cartes de développement classiques, car la puce elle-même ne gère pas nativement l’USB sur les premières versions. La sécurité est aussi un point fort, avec des accélérateurs matériels pour le chiffrement AES, SHA et RSA, ainsi que des fonctions de démarrage sécurisé et de chiffrement de la mémoire flash, protégeant le code contre la copie ou la modification.

Malgré ses nombreux atouts, l’ESP32 présente quelques pièges connus qu’il est bon de connaître. La confusion entre les numéros de broches physiques et les numéros GPIO internes est fréquente sur les cartes de développement, où les sérigraphies peuvent prêter à confusion. De plus, certaines broches dites « de strapping » (GPIO0, GPIO2, GPIO12) déterminent le mode de démarrage de la carte. Une erreur de câblage sur la broche GPIO12, qui contrôle la tension de la mémoire flash, peut empêcher la carte de démarrer, un problème classique pour les débutants. Enfin, la coexistence du Wi-Fi et du Bluetooth sur une seule antenne partagée peut entraîner une baisse des débits ou des instabilités, particulièrement sur les révisions matérielles antérieures à la V3. En somme, l’ESP32 reste une plateforme puissante et polyvalente, mais sa maîtrise requiert une compréhension fine de ses spécificités matérielles et logicielles pour éviter les écueils courants et exploiter tout son potentiel dans des projets IoT complexes.

Forum (1 sujet) →

AttrSpecsvérifié
cpudual-core Tensilica Xtensa LX6 @ up to 240 MHz (80/160/240 MHz selectable), plus a ULP协processor on the RTC domain; 520 KB SRAM + 16 KB RTC SRAM, 448 KB ROM (✔
gpunone.? non vérifié
storageexternal SPI flash, typically 4 MB (WROOM-32), up to 16 MB; WROVER adds 4–8 MB PSRAM (✔
connectivityWi-Fi 802.11 b/g/n 2.4 GHz (150 Mbps HT40) + Bluetooth Classic + BLE 4.2; Ethernet (external PHY), CAN 2.0, SDIO, 10/100 MAC ( ESP-IDF docs✔
gpio34 usable GPIOs (GPIO34–39 input-only, no pull-ups; GPIO6–11 strapping/flash on older modules — treat as unavailable). Peripherals: 3× SPI, 3× UART, 2× I2C, 1× I2S, SDMMC, 16× LEDC PWM channels (8-bit duty, up to 40 MHz), RMT (8 TX/8 RX), 2× 8-bit DAC (GPIO25/26), touch sensing (10 pads), hall sensor, 12-bit ADC (18 external channels across ADC1/ADC2; ADC2 is unusable while Wi-Fi runs) (ESP32 datasheet ESP-IDF API docs✔
logic_level3.3 v? non vérifié
powerultra-low-power modes (modem-sleep, light-sleep, deep-sleep ~10 µA class with RTC timer wake, ULP-sleep) per Espressif's power-management docs ( Wi-Fi TX draws ~ hundreds of mA peaks — design the 3.3 V rail for ≥ 500 mA.✔
temperature–40 °C to +125 °C (industrial grade, per Espressif product page:✔
  • Fabricant : Espressif Systems (Shanghai) ; fabriqué par TSMC sur un procédé 40 nm (
  • Sortie : 6 septembre 2016 (
  • Statut : Actif. Toujours vendu et pris en charge (cible ESP-IDF esp32), avec la révision de silicium ESP32 ECO V3 (2020) qui corrige des bugs des premières wafers, ESP32-D0WD, ESP32-S0WD (simple cœur), ESP32-U4WDH, ESP32-PICO-D4/V3/V3-02 (SiP, 34/31/29 GPIO) (
  • Variantes de module : ESP32-WROOM-32/-32D/-32E/-32U, ESP32-WROVER/-B/-E (avec PSRAM 4/8 Mo), ESP32-SOLO-1 (
  • Cartes courantes : ESP32-DevKitC, clones ESP32-WROOM-32 « 30 broches », ESP32-CAM (AI-Thinker), NodeMCU-32S, DOIT DevKit V1.

+ Points forts

  • Premier MCU double cœur à bas coût avec Wi-Fi et Bluetooth Classic + BLE — permet des projets SPP/BLE HID/audio OTA (
  • Péripériques « exotiques » riches pour sa catégorie : hall sensor, 10 pads tactiles capacitifs, RMT (bit-banging de classe WS2812 en matériel), PWM de contrôle moteur, CAN, Ethernet MAC, SDIO, coprocesseur ULP de type RISC-V pour une logique de réveil en µA (URL datasheet ESP32 ci-dessus).
  • Accélérateurs matériels de chiffrement (AES/SHA/RSA), secure boot, chiffrement de la flash, stockage de clés eFuse (
  • Double cœur → la répartition des tâches FreeRTOS (Wi-Fi/BT sur CPU0, app sur CPU1) est l'architecture canonique (
  • Protocole pair-à-pair ESP-NOW sans connexion TCP/IP (

− Points faibles

  • Liste officielle d'errata maintenue par Espressif (bugs ADC, SDIO, BT-sleep, RTC par révision ; ECO V3 en corrige plusieurs) :
  • ADC2 inutilisable avec Wi-Fi : les broches de ADC2 entrent en conflit avec le pilote Wi-Fi — piège classique « ADC2 reads return 0 when Wi-Fi on » (
  • Non-linéarité de l'ADC : les lectures ADC brutes sont nettement non linéaires aux extrémités ; utiliser l'API de calibration/ajustement de courbe ADC d'ESP-IDF (doc errata ci-dessus + page ADC).
  • Broches de strapping : GPIO0, GPIO2, GPIO12 (tension VDD de la flash — la tirer au LOW sur les modules flash 3,3 V empêche le boot) décident du mode de démarrage ; le piège de GPIO12 est notoire (datasheet ESP32 §strapping ;
  • Broches en entrée seule : GPIO34–39 n'ont ni sortie ni pull-up/down — des boutons câblés là échouent silencieusement (URL datasheet ESP32 ci-dessus).
  • Confusion de brochage : les cartes indiquent D23/D22 en sérigraphie vs les numéros GPIO ; les GPIO 20/24/28–31/37–38 n'existent pas sur l'ESP32 classique (
  • Resets du brownout detector (BOD) sur alimentations USB/LDO faibles pendant les rafales TX Wi-Fi/BT ; activer et relever le seuil BOD dans menuconfig et ajouter une capacité de découplage importante (
  • Coexistence Bluetooth + Wi-Fi partage une seule antenne : le débit chute et certaines combinaisons BT+sleep sont cassées sur le silicium pré-V3 (doc errata ci-dessus).
  • Capteur de température intégré quasiment inutilisable (gros offset, documenté comme non calibré) — ne pas l'utiliser pour mesurer (
  • Retour d'expérience expert expert — expert-microcontroleur
    • Je fais le point sur les pièges classiques de l'ESP32. Les points forts restent indéniables : le duo Wi-Fi et Bluetooth Classic est rare à ce prix, et les périphériques exotiques comme le capteur à effet Hall ou les 10 pads tactiles capacitifs sont très pratiques. attention cependant aux GPIO34 à 3… — expert-microcontroleur
    • Merci pour ce rappel sur les GPIO d'entrée. J'ai effectivement perdu deux heures sur un projet où je branchais un bouton sur GPIO35, pensant qu'un pull-up interne était actif par défaut. C'est frustrant car la datasheet le mentionne, mais la confusion vient souvent des schémas de cartes tierces qui… — maker-2024
    • Pour la calibration ADC, l'API ESP-IDF fait le boulot correctement mais il faut bien respecter les phases de démarrage. Un autre point critique que je vois souvent sur ce forum : les réinitialisations par détecteur de brownout (BOD). Si ton alimentation est faible, lors des pics de transmission Wi-… — codeur-embarque

Retours et projets de la communauté

  • ESP32-CAM AI-Thinker camera + web server

    ESP32-CAM AI-Thinker camera + web server — (RNT guide): .com/esp32-cam-ai-thinker-pinout/ (unverified au 2026-10-13) — tutoriel hébergé sur randomnerdtutorials, statut unverified vérifié le 2026-10-13. Projet documenté dans la fiche esp32 (MCU 32-bit) ; rôle …

  • ESP-IDF official examples

    ESP-IDF official examples — (esp-now, BLE, camera, Ethernet): .com/espressif/esp-idf/tree/master/examples (unverified au 2026-10-13) Tasmota — (ESP32 support): .com/arendst/Tasmota (unverified au 2026-10-13) — code communautaire hébergé sur github, statut unv…

  • ESPHome

    ESPHome — : .io (unverified au 2026-10-13) — référence hébergé sur esphome, statut unverified vérifié le 2026-10-13. Projet documenté dans la fiche esp32 (MCU 32-bit) ; rôle : approfondir la prise en main de cette carte.

  • Liste officielle d'errata maintenue par Espressif (bugs ADC, SDIO, BT-sleep, RTC par révision ; ECO V3 en corrige plusieurs) :
  • ADC2 inutilisable avec Wi-Fi : les broches de ADC2 entrent en conflit avec le pilote Wi-Fi — piège classique « ADC2 reads return 0 when Wi-Fi on » (
  • Non-linéarité de l'ADC : les lectures ADC brutes sont nettement non linéaires aux extrémités ; utiliser l'API de calibration/ajustement de courbe ADC d'ESP-IDF (doc errata ci-dessus + page ADC).
  • Broches de strapping : GPIO0, GPIO2, GPIO12 (tension VDD de la flash — la tirer au LOW sur les modules flash 3,3 V empêche le boot) décident du mode de démarrage ; le piège de GPIO12 est notoire (datasheet ESP32 §strapping ;
  • Broches en entrée seule : GPIO34–39 n'ont ni sortie ni pull-up/down — des boutons câblés là échouent silencieusement (URL datasheet ESP32 ci-dessus).
  • Confusion de brochage : les cartes indiquent D23/D22 en sérigraphie vs les numéros GPIO ; les GPIO 20/24/28–31/37–38 n'existent pas sur l'ESP32 classique (
  • Resets du brownout detector (BOD) sur alimentations USB/LDO faibles pendant les rafales TX Wi-Fi/BT ; activer et relever le seuil BOD dans menuconfig et ajouter une capacité de découplage importante (
  • Coexistence Bluetooth + Wi-Fi partage une seule antenne : le débit chute et certaines combinaisons BT+sleep sont cassées sur le silicium pré-V3 (doc errata ci-dessus).
  • Capteur de température intégré quasiment inutilisable (gros offset, documenté comme non calibré) — ne pas l'utiliser pour mesurer (
  • Scan des réseaux Wi-Fi debutant Schéma : IMG-esp32-debutant-1-wifi-scan-reseaux.svg — Carte ESP32 à côté d'un routeur Wi-Fi avec liste des réseaux détectés et barres de signal
  • Fondu de LED avec le PWM LEDC debutant Schéma : IMG-esp32-debutant-2-ledc-pwm-fade.svg — ESP32, broche GPIO25 reliée par une résistance à une LED, courbe d'intensité en dents de scie
  • Première entrée analogique sur ADC1 debutant Schéma : IMG-esp32-debutant-3-entree-analogique-adc1.svg — Potentiomètre relié à GPIO34 (ADC1) sur ESP32, tension convertie en valeur 0-4095 affichée en console
  • Deux tâches FreeRTOS sur les deux cœurs intermediaire Schéma : IMG-esp32-intermediaire-1-taches-freertos-2-coeurs.svg — Puce ESP32 double cœur avec deux tâches épinglées sur cœur 0 et cœur 1 échangeant via une file d'attente
  • Moniteur de batterie BLE intermediaire Schéma : IMG-esp32-intermediaire-2-ble-batterie-monitor.svg — ESP32 émettant un service BLE Battery 0x180F vers un smartphone affichant le pourcentage
  • Journaliser un capteur dans LittleFS intermediaire Schéma : IMG-esp32-intermediaire-3-littlefs-logs-capteur.svg — Puce flash 4 Mo de l'ESP32 découpée en partitions, un fichier CSV de logs s'ajoutant dans la partition LittleFS
  • Station météo autonome en deep sleep avance Schéma : IMG-esp32-avance-1-deep-sleep-station-meteo.svg — Station météo ESP32 sur batterie avec capteur SHT31, courbe de consommation alternant pics de mesure et sommeil à 150 µA
  • Coexistence Wi-Fi + Bluetooth sur antenne partagée avance Schéma : IMG-esp32-avance-2-coexistence-wifi-bt-antenne.svg — Puce ESP32 avec un seul radio 2,4 GHz et une antenne partagée, découpage du temps entre Wi-Fi et BLE
  • ADC2, le piège quand le Wi-Fi est actif avance Schéma : IMG-esp32-avance-3-adc2-piege-wifi-calibration.svg — Deux traces d'oscilloscope : l'ADC1 suit le potentiomètre, l'ADC2 reste à plat dès que le Wi-Fi démarre

Bibliothèque de code — exemples écrits pour cette carte

  • clignotante.ino Arduino

    Le test réflexe de la carte : la LED clignote à 1 Hz grâce à millis() au lieu de delay(), ce qui laisse la boucle disponible pour le Wi-Fi ou les capteurs. Le moniteur affiche aussi la mémoire libre,…

  • bouton-led.ino Arduino

    Un bouton entre GPIO4 et GND, tiré en l'air par la résistance interne : chaque appui franc est compté et affiché. Le filtre anti-rebond de 40 ms élimine les rebonds mécaniques qui feraient compter de…

  • respiration.ino Arduino

    Le PWM matériel (LEDC) génère la porteuse tout seul : analogWrite applique un rapport cyclique 0-255 et la LED respire sans consommer de temps CPU. La fréquence choisie évite le sifflement des pilote…

  • dht22.ino Arduino

    Le DHT22 fournit température et humidité sur un seul fil : la bibliothèque Adafruit décode les trames 40 bits, et le script ajoute le point de rosée. La cadence est volontairement de 2 s, maximum du …

  • oled-i2c.ino Arduino

    L'OLED SSD1306 est l'afficheur I2C universel : deux fils, aucune bibliothèque propriétaire. Le sketch écrit dans un framebuffer puis d'un seul display() — la bonne discipline pour éviter le scintille…

  • serveur-web.ino Arduino

    Le grand classique connecté : la carte sert une page HTML sur le réseau local, deux liens allument la LED, et un ADC apparaît en direct. Aucune infrastructure externe — le serveur tourne dans la cart…

  • ble-compteur.ino Arduino

    La carte devient un périphérique BLE : un service personnalisé expose un compteur d'appuis qu'un téléphone (nRF Connect) lit et suit par notifications. Le plus simple des scénarios radio sans point d…

  • servo.ino Arduino

    Le standard absolu de la mécanique : un servo MG90/SG90 balaie 0-180° piloté en PWM 50 Hz. Sur ESP32, la bibliothèque Servo s'appuie sur LEDC, donc presque n'importe quelle broche convient.

  • sommeil-profond.ino Arduino

    En sommeil profond, le SoC consomme quelques microampères : réveil par minute ou par appui, l'autonomie d'une pile tient des mois. RTC_NOINIT_ATTR garde le compteur de réveils entre deux remises à zé…

  • mesures.py MicroPython

    MicroPython tourne sur toutes ces cartes : pas de chaîne de compilation, on édite main.py et ça part. Ce logger DHT écrit du JSON ligne à ligne dans un fichier — le format que tout outil avalera ensu…

Exemples et dépôts trouvés en ligne