L’ESP32 est un micro-contrôleur qui dispose de la connectivité WiFi et Blu2etooth (BLE, BT4.0 et Bluetooth Smart) ainsi que d’un GPIO. Les broches sont multi-fonction, c’est à dire qu’il est possible de définir son utilisation par programmation. I/O, PWM, RTC, I2C, SPI, ADC, DAC. Vous avez certainement remarqué que les cartes de développement disposent d’un nombre plus limité de broches. Certaines broches sont réservées (accès à la mémoire flash, programmation …). Chaque fabricant de carte de développement choisi les broches qu’il expose.
L’ESP32 est disponible en 46 versions actuellement. La tendance devrait encore s’accentuer à l’avenir comme l’a annoncé Espressif sur ce billet de blog annonçant le lancement de l’ESP32-C3. On finit clairement par s’y perdre ! Heureusement Espressif à mis en ligne un moteur de recherche pour les concepteurs d’objets connectés et les Makers qui conçoivent leurs propres PCB.
Cet article récapitule les broches que l’on pourra utiliser – indépendamment du fabricant de votre carte de développement ESP32 – pour accéder au différentes fonctions proposées par l’ESP32. Port I2C, I2S, UART (port série), Touch (touche capacitive)…
Accès rapide aux thèmes :
Sommaire
- 1 Comment interpréter le numéro des broches sur votre carte de développement ?
- 2 Broches d’entrée / sortie numériques de l’ESP32
- 3 Broches compatibles avec les interruptions
- 4 Broches du sous-système temps réel (RTC) et capacitives (Touch)
- 5 Broche EN (Enable)
- 6 Bus I2C
- 7 Bus SPI
- 8 Convertisseur Analogique-Numérique (ADC) 12-bits (18 canaux)
- 9 Convertisseur Numérique-Analogique (DAC)
- 10 Interface infrarouge
- 11 Mises à jour
Comment interpréter le numéro des broches sur votre carte de développement ?
Vous avez certainement remarqué que le nombre de broche du connecteur d’extension GPIO varie d’un fabricant à l’autre. Tout d’abord, certaines broches sont réservées pour l’accès à la mémoire flash via le bus SPI. Ensuite, chaque fabricant choisi les broches qu’il laisse à disposition (expose) de l’utilisateur (développeur) en fonction de sa propre conception et des équipements intégrés à la carte de développement (écran OLED, capteur, caméra, lecteur de carte micro SD…).
la majorité des fabricants de cartes de développement ESP32 grand public utilisent principalement deux versions :
- L’ESP32-D0WDQ6-V3 est un package QFN-48 de 6×6 mm.
- L’ESP32-D0WD est équivalent à l’ESP32-D0WDQ6, mais a une taille de puce plus petite de 5×5 mm, ce qui réduit l’encombrement pour la conception.
Quelque soit le boitier, il faudra ajouter de la mémoire flash externe supplémentaire sur laquelle sera stockée le programme (développé avec l’IDE Arduino) et éventuellement d’autres données (interface HTML, fichiers audio, images, fichiers de configuration…). Comme nous allons le voir plus tard dans l’article, certaines broches de l’ESP32 sont réservées pour communiquer avec la mémoire Flash.
Source : documentation technique Espressif
Comme vous pouvez le constater, il ne faut pas trop s’inquiéter. Espressif s’est assuré de la compatibilité des broches quelque soit le boitier et quelque soit la génération. La différence se trouve surtout au niveau de la quantité de mémoire flash ou PSRAM (extension mémoire du processeur de l’ESP32) associées.
ESP32-PICO-D4
L’ESP42-PICO-D4 est une version qui combine sur une même puce un SoC ESP32, un oscillateur à cristal, des condensateurs de filtrage, ainsi que 4Mo de mémoire flash dans un seul boîtier QFN 7×7 mm. Avec son très faible encombrement, il est particulièrement bien adapté aux applications mobiles (montres connectées, bracelet et tracker d’activité…).
ESP32-WROVER
Cette génération lancée en 2018 est toujours disponible au catalogue d’Espressif. Vous risquez de la trouver sur de nombreuses cartes de développement d’entrée de gamme.
Repérage des broches
Depuis la version 4 du kit de développement officiel d’Espressif, les broches sont numérotées sous la forme GPIO27 ou tout simplement par le chiffre correspondant sur la carte, ici 27.
La broche du GPIO ne correspondant pas à la broche sur le processeur de l’ESP32 qui est située sous un capot métallique. Par exemple la broche 27 du GPIO est connectée à la broche 16 du SoC 🙄
Cela n’a aucune importance au niveau de la programmation. On ne fait jamais référence à la broche sur le processeur mais cela peut porter à confusion…surtout avec les générations et les versions qui se succèdent.
Si vous possédez une carte d’ancienne génération (ou que le fabricant n’a pas encore écoulé tous ces stocks), les broches du GPIO sont précédées de la mention IO, par exemple IO27.
C’est encore plus simple qu’avec le SDK pour ESP8266 car il suffit d’indiquer le numéro de la broche dans le code Arduino. Par exemple :
pinMode(27, OUTPUT);
Avant de détailler plus précisément les fonctions de chaque broche, voici le repérage de la dernière génération (DevKitC v4)
Broches d’entrée / sortie numériques de l’ESP32
La majorité des broches de l’ESP32 peuvent être utilisées comme entrée ou sortie numérique. Certaines broches sont réservées ou sont utilisées par le processeur. Par exemple les broches 6 à 11 sont réservées pour l’accès à la mémoire flash via le bus SPI, les broches du port série pour téléverser le programme ou le déboggage.
Les broches encadrées en vert peuvent être utilisées aussi bien en entrée ou en sortie numérique.
Les broches encadrées en orange peuvent être utilisées mais attention au comportement inattendu au démarrage (voir les explications dans le tableau).
Il est déconseillé – pour ne pas dire interdit – d’utiliser les broches encadrées en rouge. Généralement, ces broches sont réservées (et utilisées) par le processeur de l’ESP32. Vous risquez donc de rencontrer de grave problèmes en utilisant ces broches dans vos projets.
Broche du GPIO | Entrée numérique (Input) | Sortie numérique (Output) | Remarque |
0 | PULL UP | ✓ | Envoi un signal PWM au démarrage. |
1 | TX | ✓ | Sortie de déboggage au démarrage |
2 | ✓ | ✓ | Connecté à la LED embarquée |
3 | ✓ | RX | Prend l’état HIGH au démarrage |
4 | ✓ | ✓ | |
5 | ✓ | ✓ | Envoi un signal PWM au démarrage |
12 | ✓ | ✓ | Echec de démarrage si en mode PULLUP |
13 | ✓ | ✓ | |
14 | ✓ | ✓ | Envoi un signal PWM au démarrage |
15 | ✓ | ✓ | Envoi un signal PWM au démarrage |
16 | ✓ | ✓ | |
17 | ✓ | ✓ | |
18 | ✓ | ✓ | |
19 | ✓ | ✓ | |
21 | ✓ | ✓ | |
22 | ✓ | ✓ | |
23 | ✓ | ✓ | |
25 | ✓ | ✓ | |
26 | ✓ | ✓ | |
27 | ✓ | ✓ | |
32 | ✓ | ✓ | |
33 | ✓ | ✓ | |
34 | ✓ | x | |
35 | ✓ | x | |
36 | ✓ | x | |
39 | ✓ | x |
Les broches 37 et 38 ne sont pas disponibles sur la plupart des cartes de développement ESP32. Les broches 34, 35, 36, 37, 38, et 39 ne peuvent être utilisées qu’en entrée numérique.
Données collectées depuis la documentation officielle.
Suivez ce tutoriel plus détaillée pour apprendre comment utiliser les entrées et les sorties numériques de l’ESP32.
Sorties PWM
L’ESP32 dispose de 16 canaux indépendants qui peuvent être configurés pour générer des signaux PWM avec différentes propriétés. Toutes les broches encadrées en vert dans le tableau précédent peuvent être utilisées comme broche PWM.
Broche à éviter (interdites) dans vos projets
Certaines broches du GPIO passent automatiquement à l’état haut (HIGH) ou émettent des signaux PWM lors du démarrage ou lors de la réinitialisation. Vous pouvez obtenir des résultats inattendus dans vos programmes lorsque l’ESP32 se réinitialise ou démarre.
Broche (GPIO) | Particularité, précaution à prendre |
0 | Envoi un signal PWM au démarrage.
La broche 0 est utilisée comme broche d’amorçage et doit être basse pour entrer en mode de téléchargement UART. Assurez-vous qu’il n’est pas tiré vers le bas par un périphérique lors du démarrage ou le firmware ne démarrera pas! |
1 | Sortie de déboggage au démarrage |
2 | La broche 2 est utilisée comme broche d’amorçage et doit être faible pour entrer en mode de téléchargement UART. Assurez-vous qu’il n’est pas tiré vers le haut par un périphérique lors du démarrage ou vous ne pourrez pas flasher un firmware sur le module! |
3 | Prend l’état HIGH au démarrage |
5 | Envoi un signal PWM au démarrage |
6 | Utilisé pour la mémoire flash SPI |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | Echec de démarrage si en mode PULL-UP
La broche 12 est utilisée comme broche d’amorçage pour sélectionner la tension de sortie d’un régulateur interne qui alimente la puce flash (VDD_SDIO). Cette broche a une résistance pull-down interne. Si elle n’est pas connectée, elle affichera un niveau bas lors de la réinitialisation (sélection du fonctionnement par défaut de 3.3 V). Assurez-vous qu’il n’est pas tiré vers le haut par un périphérique pendant le démarrage ou l’ESP32 pourrait ne pas démarrer. |
14 | Envoi un signal PWM au démarrage |
15 | Envoi un signal PWM au démarrage
La broche 15 peut être utilisée pour arrêter la sortie de déboggage pendant la phase de démarrage. S’il est tiré vers le bas avec une résistance (pull-down), il n’y aura aucune sortie sur le port série pendant le processus de démarrage. Cela peut être utile dans les applications alimentées par batterie où vous ne souhaitez pas du tout utiliser le port série pour réduire la consommation d’énergie. |
Remarque concernant l’ESP32-PICO-D4
Les broches 16 et 17 sont réservées pour l’écriture de la mémoire flash interne.
Remarque concernant l’ESP32-WROVER
Les broches 16 et 17 sont réservées pour accéder à la mémoire PSRAM
Consommation du GPIO en mode OUTPUT (sortie numérique)
Le GPIO de l’ESP32 est conçu pour envoyer des signaux logiques. Le GPIO pourra délivrer suffisamment de puissance pour alimenter quelques LED, par contre, le GPIO de l’ESP32 ne pourra pas être utilisé pour alimenter un équipement qui nécessite plus d’énergie tel qu’un moteur.
Chaque sortie peut délivrer un courant de 40mA au maximum.
Par ailleurs, la puissance totale utilisée par l’ensemble des équipements connectés au GPIO ne doit pas dépasser 1200mA d’après la section Absolute Maximum Ratings de la documentation technique officielle.
Broches compatibles avec les interruptions
Une interruption est un processus qui est déclenché de manière asynchrone par un évènement extérieur. Les interruptions permettent de détecter un évènement en temps réel tout en laissant le processeur du micro-contrôleur faire d’autres tâches.
Les interruptions fonctionnent uniquement avec les entrées numériques. Les entrées numériques pouvant déclencher une interruption sont entourée d’un cercle sur le schéma ci-dessous.
N’utilisez pas les broches colorées en orange ou en rouge. Votre programme pourrait avoir un comportement inattendu en utilisant celles-ci.
Attention. Certaines broches passent à l’état haut (HIGH) ou émettent des signaux PWM au démarrage ou lors de la réinitialisation (déjà mentionné précédemment). D’autres sont utilisées par le système pour accéder à la mémoire flash ou téléverser le programme. Il ne faut pas les utiliser dans vos projets.
Suivez ce tutoriel qui explique en détail comment utiliser les interruptions de l’ESP32.
Broches du sous-système temps réel (RTC) et capacitives (Touch)
Le processeur de l’ESP32 dispose d’un sous-système à très basse consommation temps réel appelé RTC qui reste actif même lorsque celui-ci est en veille.
Pour mémoire, l’ESP32 dispose de plusieurs modes de veille. En fonction du mode activé, les différents sous-systèmes sont désactivé pour réduire la consommation et / ou économiser la batterie.
Active Mode |
||||||
GPIO | WiFi | Bluetooth | CPU | ULP | RTC | Consommation* |
95 ~ 240 mA |
Modem Sleep | ||||||
20 ~ 68 mA |
Light Sleep | ||||||
0,8 mA | ||||||
Core en pause |
Deep Sleep | ||||||
10 ~ 150 μA | ||||||
RTC uniquement |
Hibernation | ||||||
1 μA | ||||||
RTC uniquement | x1 |
Pour en savoir plus sur la mise en veille de l’ESP32, lisez cet article détaillé
L’ESP32 dispose donc de
- 18 broches marquées RTC numérotées et 0 à 17.
- 10 broches pour écrans tactiles (Touch screen) numérotées de 0 à 9.
Le repérage des broches à évolué entre les versions des SoC ESP32. Le tableau suivant récapitule les broches RTC et Touch des cartes de développement Espressif ESP32-DevKitC v4 (2020) et ESP32-DevKitC v2 (obsolète).
Libellé broche RTC | Broche capacitive (Touch Pad) | Repère de la broche sur une carte ESP32 DevKitC version 4 (2020) | Repère de la broche sur une carte ESP32-DevKitC V2 (obsolète) | ||
Repère carte | Broche CPU (49 broches) | Repère carte | Broche CPU (39 broches) | ||
RTC_GPIO0 | VP | 5 | VP | 4 | |
RTC_GPIO1 | Non exposée | 37 | Non exposée | – | |
RTC_GPIO2 | Non exposée | 7 | Non exposée | – | |
RTC_GPIO3 | VN | 8 | VN | 5 | |
RTC_GPIO4 | 34 | 10 | IO34 | 6 | |
RTC_GPIO5 | 35 | 11 | IO35 | 7 | |
RTC_GPIO6 | 25 | 14 | IO25 | 10 | |
RTC_GPIO7 | 26 | 15 | IO26 | 11 | |
RTC_GPIO8 | Touch8 | 33 | 13 | IO33 | 9 |
RTC_GPIO9 | Touch9 | 32 | 12 | IO32 | 8 |
RTC_GPIO10 | Touch0 | 4 | 4 | IO4 | 26 |
RTC_GPIO11 | Touch1 | 0 | 0 | IO0 | 25 |
RTC_GPIO12 | Touch2 | 2 | 2 | IO2 | 24 |
RTC_GPIO13 | Touch3 | 15 | 15 | IO15 | 23 |
RTC_GPIO14 | Touch4 | 13 | 13 | IO13 | 16 |
RTC_GPIO15 | Touch5 | 12 | 12 | IO12 | 14 |
RTC_GPIO16 | Touch6 | 14 | 17 | IO14 | 16 |
RTC_GPIO17 | Touch7 | 27 | 16 | IO27 | 12 |
Voici le repérage de broches du kit de ESP32 DevKitC version 4 (2020).
Le numéro encerclé correspond à la broche du processeur.
Le numéro indiqué sur la carte de développement correspond au GPIO, c’est ce numéro qu’il faut utiliser dans le code Arduino du projet.
Source : repérage des broches (pinout) RTC et capacitives (Touch) du kit officiel ESP32 DevkitC v4 d’après la documentation officielle Espressif.
Lisez cet article pour en savoir plus sur les broches RTC ou tactiles.
Broche EN (Enable)
La broche EN (ENable) permet d’activer le régulateur 3.3V. Par défaut, le régulateur est activé. Pour désactiver le régulateur, il faut mettre à la terre (GND) de tension Il est tiré vers le haut, alors connectez-vous à la terre pour désactiver le régulateur 3.3V. Cela signifie que vous pouvez utiliser cette broche connectée à un bouton poussoir pour redémarrer votre ESP32, par exemple.
Bus I2C
L’ESP32 dispose de 2 bus I2C indépendants. Chaque bus pourra jouer le rôle d’équipement principal (pilote le bus) ou d’équipement secondaire.
GPIO | Bus I2C n°1 | Bus I2C n°2 |
SDA | 21 | Défini par l’utilisateur |
SCL | 22 | Défini par l’utilisateur |
Il est toutefois possible d’utiliser n’importe quelle broche numérique si les broches par défaut (21 et 22) ne sont pas exposées sur la carte de développement. Pour cela, il suffit d’indiquer les broches SDA et SCL à utiliser au moment de l’initialisation du bus comme ceci
Wire.begin(BROCHE_SDA, BROCHE_SCL);
Les interfaces I²C prennent en charge les modes suivants :
- Mode standard (100 Kbit/s)
- Mode rapide (400 Kbit / s)
- Jusqu’à 5 MHz en fonction de la puissance du circuit
- Mode d’adressage 7 bits / 10 bits
- Mode d’adressage double
Bus SPI
L’ESP32 dispose de 3 bus SPI. SPI, HSPI (H pour Hardware) et VSPI (V pour Virtuel).
Par défaut, les bus HSPI et VSPI sont connectés aux broches suivantes
HSPI | VSPI | |
CLK | GPIO14 | GPIO18 |
MISO | GPIO12 | GPIO19 |
MOSI | GPIO13 | GPIO23 |
SS | GPIO15 | GPIO5 |
Comme pour le bus I2C, il est possible de choisir manuellement n’importe quelle broche que l’on souhaite utiliser pour communiquer avec un équipement SPI (écran OLED, écran LCD, capteur, lecteur de carte micro SD…) en passant en paramètre les broches durant l’initialisation du bus.
SPI.begin(CLK, MISO, MOSI, SS);
Convertisseur Analogique-Numérique (ADC) 12-bits (18 canaux)
L’ESP32 est équipé d’un convertisseur Analogique / Numérique 12 bits (ou ADC en anglais qui signifie Analog to Digital Converter) disposant de 18 canaux indépendants sur les broches listées dans le tableau ci-dessous.
Le processeur ULP de l’ESP32 est également conçu pour accéder au convertisseur ADC même lorsque le processeur est veille. Cela permet de réduire fortement la consommation d’énergie. La CPU peut être réveillée par un réglage de seuil et / ou via d’autres déclencheurs.
GPIO | Canal ADC |
0 | ADC2_CH1 |
2 | ADC2_CH2 |
4 | ADC2_CH0 |
12 | ADC2_CH5 |
13 | ADC2_CH4 |
14 | ADC2_CH6 |
15 | ADC2_CH3 |
25 | ADC2_CH8 |
26 | ADC2_CH9 |
27 | ADC2_CH7 |
32 | ADC1_CH4 |
33 | ADC1_CH5 |
34 | ADC1_CH6 |
35 | ADC1_CH7 |
36 | ADC1_CH0 |
37 | ADC1_CH1 |
38 | ADC1_CH2 |
39 | ADC1_CH3 |
Connaître le canal n’est pas très important, par contre il faut toujours avoir en tête que la tension sur la broche ne doit jamais dépasser 3V3. Au delà de cette tension, vous avez de grande chance de détériorer casser la carte de développement ESP32. Il y a une discussion sur GitHub à ce sujet.
L’échantillonnage étant réalisé sur 12-bits, la valeur renvoyée sera comprise entre 0 (0V) et 4095 (3V3).
Il est possible d’ajuster la résolution de 9 à 12-bits (voir le paragraphe suivant) ce qui donnera
- 9-bits : valeur comprise entre 0 et 511
- 10-bits : valeur comprise entre 0 et 1023
- 11-bits : valeur comprise entre 0 et 2047
- 12-bits : valeur comprise entre 0 et 4095
La méthode analogRead() est disponible sur la librairie ESP32-Arduino, il suffit de passer comme paramètre la broche sur laquelle on souhaite récupérer la valeur analogique.
Par exemple pour lire la valeur d’un potentiomètre connecté sur la broche 35
val = analogRead(35);
Serial.print("Angle actuel :");
Serial.println(val);
Fonctions avancées du convertisseur ADC
Il existe d’autres fonctions plus avancées qui permettent de régler finement les paramètres d’acquisition de données.
Fonction | Description |
analogReadResolution(resolution) |
Définir les bits d’échantillonnage et la résolution. Il peut s’agir d’une valeur comprise entre 9 (0 – 511) et 12 bits (0 – 4095). La résolution par défaut est 12 bits.
9-bits(0-511), 10-bits(0-1023), 11-bits(0-2047) et 12-bits(0-4095) |
analogSetWidth(width) |
Définir les bits d’échantillonnage et la résolution. Il peut s’agir d’une valeur comprise entre 9 (0 – 511) et 12 bits (0 – 4095). La résolution par défaut est 12 bits.
9-bits(0-511), 10-bits(0-1023), 11-bits(0-2047) et 12-bits(0-4095) |
analogSetCycles(cycles) |
Définir le nombre de cycles par échantillon. La valeur par défaut est 8. Plage allant de 1 à 255 |
analogSetSamples(samples) |
Définir le nombre d’échantillons dans la plage. La valeur par défaut est 1 échantillon. Il a pour effet d’augmenter la sensibilité. |
analogSetClockDiv(attenuation) |
réglez le séparateur de l’horloge ADC. La valeur par défaut est 1. Plage allant de 1 à 255 |
analogSetAttenuation(attenuation) |
Définir l’atténuation d’entrée pour toutes les broches ADC. La valeur par défaut est ADC_11db . Valeurs acceptées:
|
analogSetPinAttenuation(pin, attenuation) |
Définir l’atténuation d’entrée pour la broche spécifiée. La valeur par défaut est ADC_11db . Les valeurs d’atténuation sont les mêmes que celles de la fonction précédente. |
adcAttachPin(pin) |
Attacher une broche au ADC (efface également tout autre mode analogique qui pourrait être activé). Renvoie un résultat VRAI ou FAUX. |
adcStart(pin) ,adcBusy(pin) etresultadcEnd(pin) |
Démarrer une ADC sur le bus de la broche attachée. Vérifiez si la conversion sur le bus ADC de la broche est en cours d’exécution (renvoie VRAI ou FAUX). Obtenez le résultat de la conversion: retourne un entier de 16 bits. |
Convertisseur Numérique-Analogique (DAC)
L’ESP32 est équipé d’un convertisseur Numérique-Analogique (ou Digital to Analogic Converter en anglais) offrant deux canaux sur 8 bits. Ils sont accessibles sur les broches 25 et 26.
GPIO | Canal ADC |
25 | DAC1 |
26 | DAC2 |
Interface infrarouge
L’interface infrarouge prend en charge huit canaux de transmission et de réception à distance par infrarouge. En programmant la forme d’onde d’impulsion, il prend en charge divers protocoles infrarouges. Huit canaux partagent un bloc de mémoire de 512 x 32 bits pour stocker la forme d’onde d’émission ou de réception.
Mises à jour
11/01/2021 Publication de l’article
English version
Merci pour votre lecture.
Avez-vous aimé cet article ?