Les broches à éviter ou à utiliser avec précaution
L’ESP32 a 34 GPIO, mais sur un DevKit, seuls deux tiers environ se comportent comme des broches ordinaires. Quatre groupes demandent de l’attention.
GPIO 6 à 11 : occupés par la flash
Ces six broches relient la puce à la flash SPI à l’intérieur du module. Les cartes DevKitC les sortent sous les noms CLK, SD0, SD1, SD2, SD3 et CMD, mais y toucher fait planter le programme ou empêche la carte de démarrer.
GPIO 0, 2, 5, 12 et 15 : broches de strapping
La puce lit ces broches au reset pour décider comment démarrer. Une fois le programme lancé, ce sont des GPIO normaux : ils conviennent bien comme sorties ou pour des boutons. Les problèmes viennent de tout ce qui impose le mauvais niveau à la mise sous tension, comme une résistance de pull-up, un module qui pilote la ligne ou un capteur qui la maintient.
| GPIO | Valeur au reset | Ce qu’il sélectionne | En pratique |
|---|---|---|---|
| 0 | Pull-up (HAUT) | Mode de démarrage : HAUT lance le programme, BAS passe en mode téléchargement | Rien ne doit le maintenir à l’état BAS à la mise sous tension |
| 2 | Pull-down (BAS) | Doit être BAS ou flottant pour le mode téléchargement | Pas de pull-up ; souvent la LED de la carte |
| 5 | Pull-up (HAUT) | Timing SDIO esclave, avec GPIO15 | Sans risque pour la plupart des usages |
| 12 | Pull-down (BAS) | Tension de la flash : BAS 3,3 V, HAUT 1,8 V | Jamais à l’état HAUT au reset |
| 15 | Pull-up (HAUT) | Log de démarrage sur UART0 : HAUT l’affiche, BAS le masque | Sans risque ; BAS masque seulement le log |
GPIO 34 à 39 : entrée seule
Ces broches n’ont ni étage de sortie, ni pull-up ou pull-down interne. Elles conviennent bien aux lectures analogiques et aux boutons avec une résistance externe. Elles ne peuvent pas piloter une LED, un relais ou une ligne de bus. Les GPIO 37 et 38 existent sur la puce, mais ne sont pas sortis sur les modules WROOM.
GPIO 1 et 3 : le port série USB
L’UART0 est relié à la puce USB-série et sert à la fois au téléversement et à Serial. Vous pouvez réutiliser ces broches dans un projet terminé, mais vous perdez le moniteur série et le téléversement peut échouer tant que quelque chose y est branché.
L’ADC2 ne fonctionne plus quand le Wi-Fi est activé
L’ESP32 a deux ADC. L’ADC1 est sur les GPIO 32 à 39, l’ADC2 sur les GPIO 0, 2, 4, 12 à 15 et 25 à 27. Le pilote Wi-Fi utilise l’ADC2 : dès que le Wi-Fi démarre, les lectures sur ces broches échouent ou renvoient n’importe quoi. Dans un projet connecté, placez toutes les entrées analogiques sur l’ADC1. Vous mesurez une batterie ? GPIO 34 ou 35 avec un pont diviseur résistif, c’est le choix habituel.
Même sur l’ADC1, les lectures ne sont pas linéaires près des extrémités de la plage. Avec une atténuation de 12 dB, Espressif recommande de rester à peu près entre 0,15 V et 2,45 V pour des résultats précis : dimensionnez le pont diviseur pour garder le signal dans cette fenêtre.
Tableau complet des GPIO de l’ESP32
| GPIO | État | ADC | Tactile | RTC | Notes |
|---|---|---|---|---|---|
| GPIO0 | Avec précaution | ADC2_CH1 | T1 | RTC_GPIO11 | strapping |
| GPIO1 (TX) | Avec précaution | — | — | — | série USB, UART0 TX |
| GPIO2 | Avec précaution | ADC2_CH2 | T2 | RTC_GPIO12 | strapping, LED sur certaines cartes |
| GPIO3 (RX) | Avec précaution | — | — | — | série USB, UART0 RX |
| GPIO4 | Libre | ADC2_CH0 | T0 | RTC_GPIO10 | — |
| GPIO5 | Avec précaution | — | — | — | strapping, VSPI SS |
| GPIO6 (CLK) | Ne pas utiliser | — | — | — | flash SPI |
| GPIO7 (SD0) | Ne pas utiliser | — | — | — | flash SPI |
| GPIO8 (SD1) | Ne pas utiliser | — | — | — | flash SPI |
| GPIO9 (SD2) | Ne pas utiliser | — | — | — | flash SPI |
| GPIO10 (SD3) | Ne pas utiliser | — | — | — | flash SPI |
| GPIO11 (CMD) | Ne pas utiliser | — | — | — | flash SPI |
| GPIO12 | Avec précaution | ADC2_CH5 | T5 | RTC_GPIO15 | strapping, HSPI MISO |
| GPIO13 | Libre | ADC2_CH4 | T4 | RTC_GPIO14 | HSPI MOSI |
| GPIO14 | Libre | ADC2_CH6 | T6 | RTC_GPIO16 | parfois actif au démarrage, HSPI SCK |
| GPIO15 | Avec précaution | ADC2_CH3 | T3 | RTC_GPIO13 | strapping, HSPI SS |
| GPIO16 | Libre | — | — | — | PSRAM sur WROVER, RX2/TX2 sur certaines cartes |
| GPIO17 | Libre | — | — | — | PSRAM sur WROVER, RX2/TX2 sur certaines cartes |
| GPIO18 | Libre | — | — | — | VSPI SCK |
| GPIO19 | Libre | — | — | — | VSPI MISO |
| GPIO21 | Libre | — | — | — | I2C SDA |
| GPIO22 | Libre | — | — | — | I2C SCL |
| GPIO23 | Libre | — | — | — | VSPI MOSI |
| GPIO25 | Libre | ADC2_CH8 | — | RTC_GPIO6 | — |
| GPIO26 | Libre | ADC2_CH9 | — | RTC_GPIO7 | — |
| GPIO27 | Libre | ADC2_CH7 | T7 | RTC_GPIO17 | — |
| GPIO32 | Libre | ADC1_CH4 | T9 | RTC_GPIO9 | quartz 32 kHz |
| GPIO33 | Libre | ADC1_CH5 | T8 | RTC_GPIO8 | quartz 32 kHz |
| GPIO34 | Entrée seule | ADC1_CH6 | — | RTC_GPIO4 | entrée seule |
| GPIO35 | Entrée seule | ADC1_CH7 | — | RTC_GPIO5 | entrée seule |
| GPIO36 (VP) | Entrée seule | ADC1_CH0 | — | RTC_GPIO0 | entrée seule |
| GPIO39 (VN) | Entrée seule | ADC1_CH3 | — | RTC_GPIO3 | entrée seule |
Les broches RTC peuvent réveiller la puce de la veille profonde (deep sleep) : ext0 pour une broche, ext1 pour un groupe. Les broches tactiles peuvent la réveiller par un simple toucher. Les rôles par défaut sont ceux d’Arduino-ESP32 : Wire sur 21/22, SPI (VSPI) sur 18/19/23/5. Les broches par défaut de Serial2 ont changé avec le core 3.x : indiquez-les explicitement.
Questions fréquentes
Quelles broches de l’ESP32 peut-on utiliser sans risque ?
Sur un DevKit, les GPIO sans restriction sont 4, 13, 14, 16 à 19, 21 à 23, 25 à 27, 32 et 33. Les GPIO 34 à 39 conviennent comme entrées. Les GPIO 0, 2, 5, 12 et 15 fonctionnent une fois le programme lancé, mais décident de la façon dont la puce démarre, et les GPIO 6 à 11 appartiennent à la flash. Sur les modules WROVER, les GPIO 16 et 17 sont pris par la PSRAM.
Peut-on utiliser les broches ADC2 avec le Wi-Fi ?
Non. Le pilote Wi-Fi utilise l’ADC2 : les lectures analogiques sur les GPIO 0, 2, 4, 12 à 15 et 25 à 27 échouent tant que le Wi-Fi est activé. Utilisez les broches de l’ADC1, les GPIO 32 à 39. L’ADC2 ne redevient utilisable qu’une fois le Wi-Fi arrêté.
Pourquoi mon ESP32 ne démarre-t-il plus depuis que j’ai branché quelque chose sur le GPIO12 ?
GPIO12 fixe la tension de la flash au reset. Si un pull-up ou un module branché le maintient à l’état HAUT, la puce alimente la flash en 1,8 V et les modules à flash 3,3 V ne démarrent pas. Déplacez le branchement sur une autre broche, ou gravez la tension de la flash dans les eFuses avec espefuse set-flash-voltage 3.3V. Cette dernière opération est définitive : on ne peut pas revenir en arrière.
Quelles broches peuvent réveiller l’ESP32 de la veille profonde (deep sleep) ?
Les GPIO RTC : 0, 2, 4, 12 à 15, 25 à 27 et 32 à 39. Utilisez ext0 pour réveiller la puce avec une seule broche et ext1 avec un groupe de broches. Les broches tactiles peuvent aussi réveiller la puce par un simple toucher.
Quelles sont les broches I2C et SPI par défaut de l’ESP32 ?
Dans Arduino-ESP32, Wire utilise le GPIO 21 pour SDA et le 22 pour SCL, et SPI utilise les broches VSPI : 18 SCK, 19 MISO, 23 MOSI et 5 SS. Grâce à la matrice GPIO, vous pouvez les déplacer sur presque n’importe quelle broche capable de fonctionner en sortie, en passant les broches à Wire.begin() ou SPI.begin().
Les broches de l’ESP32 tolèrent-elles le 5 V ?
Non. Les GPIO fonctionnent en 3,3 V et Espressif ne les garantit pas pour le 5 V. Branchez les signaux 5 V via un convertisseur de niveaux logiques ou un pont diviseur résistif.