ESP32. Utiliser les entrées / sorties numériques du GPIO avec du code Arduino

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

L’ESP32 dispose de nombreuses broches qui peuvent être utilisées comme entrée ou sortie numérique. L’ESP32 dispose par ailleurs de résistances pull-up et pull-down qui permet de simplifier les circuits. La programmation est identique aux projets Arduino. Nous allons apprendre sur un exemple simple comment lire l’état d’une entrée numérique et piloter une sortie pour allumer une LED.

 

Evitez d’utiliser les broches réservées au processeur de l’ESP32 ou qui sont utilisées au moment du démarrage.

Installer le SDK ESP-IDF pour ESP32 sur IDE Arduino et PlatformIO

Si vous débutez avec les cartes de développement ESP32 vous devez d’abord installer le kit de développement ESP-IDF. Voici deux tutoriels pour débuter en fonction de votre éditeur de code

Suivez les instructions de ce tutoriel pour l’IDE Arduino

A LIRE AUSSI :
ESP32. Débuter avec ESP-IDF sur IDE Arduino, macOS, Windows, Linux

Et celui-ci pour PlatformIO (idéalement avec VSCode)

A LIRE AUSSI :
Débuter avec l'ESP32 et IDE PlatformIO. Programmation C++ d'objets connectés

Identifier les broches d’entrée / sortie numérique de l’ESP32

L’ESP32 dispose de nombreuses broches pouvant être utilisées comme entrée et / ou sortie numérique. Certaines broches sont réservées ou sont utilisées par le processeur par exemple pour accéder à la mémoire flash via le bus SPI (broches 6 à 11), port série pour téléverser le programme ou le debogage.

 

Repérage des broches (pinout) d'entrée / sortie numérique de l'ESP32

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 mais vous devez faire attention car ils peuvent avoir un comportement inattendu au démarrage.

Il est déconseillé – interdit – d’utiliser les broches encadrées en rouge. Généralement, elles sont réservées (et utilisées) par le processeur de l’ESP32. Vous risquez 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ébogage 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
6 Utilisé pour la mémoire flash SPI
7 Utilisé pour la mémoire flash SPI
8 Utilisé pour la mémoire flash SPI
9 Utilisé pour la mémoire flash SPI
10 Utilisé pour la mémoire flash SPI
11 Utilisé pour la mémoire flash SPI
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
35
36
39

Données collectées dans la documentation officielle.

Broche à éviter ou interdites

Certaines broches du GPIO passent automatiquement à l’état haut (HIGH) ou émettent des signaux PWM au démarrage ou lors de la réinitialisation. Vous pouvez d’obtenir des résultats inattendus dans vos programmes lorsque l’ESP32 se réinitialise ou démarre.

  • GPIO0
  • GPIO1
  • GPIO3
  • GPIO5
  • GPIO6 à GPIO11 connectés à la mémoire flash SPI. Utilisation interdite.
  • GPIO14
  • GPIO15

Comment lire une entrée numérique de l’ESP32 ?

Pour pouvoir lire sur une entrée numérique du GPIO, il faut tout d’abord configurer la broche comme une entrée à l’aide de la fonction pinMode() comme ceci

pinMode(broche, mode);

La méthode pinMode a deux arguments

  • Le numéro de la broche
  • Le mode

3 modes sont disponibles pour configurer la broche comme une entrée numérique

  • INPUT En fonction du périphérique d’entré utilisé, il faudra adapter le circuit. Par exemple, lorsqu’on utilise un bouton poussoir de type Momentary Switch, il faudra intégrer une résistance de tirage pull-up ou de rappel pull-down au circuit. Sans résistance de pull-up ou pull-down l’entrée de l’ESP32 est flottante. Le niveau logique est indéfini ce qui peut entraîner un fonctionnement erratique du programme. Par exemple ne pas détecter la pression sur un bouton ou au contraire détecter qu’il est enfoncé alors que ce n’est pas le cas.
  • INPUT_PULLUP On utilise la résistance de tirage (PULL UP) de l’ESP32
  • INPUT_PULLDOWN On utilise la résistance de rappel (PULL DOWN) de l’ESP32
Chaque résistance de pull-up ou pull-down a une valeur de 45 kΩ d’après le tableau DC Characteristics (3.3 V, 25 °C) de la documentation technique.

Pour lire une entrée numérique – comme un bouton – on utilise la fonction digitalRead(), qui prend comme argument le numéro de la broche du GPIO.

digitalRead(broche);

Utilisez le schéma et le tableau précédent pour choisir les broches du GPIO pour votre projet.

Comment piloter une sortie numérique de l’ESP32 ?

Pour pouvoir utiliser une broche du GPIO comme une sortie numérique, il faut tout d’abord configurer la broche à l’aide de la fonction pinMode() en indiquant le numéro de la broche et en passant l’argument OUTPUT pour le mode

pinMode(broche, OUTPUT);

La broche peut prendre 2 états

  • LOW la broche est à l’état bas, c’est à dire que la tension est nulle (0V).
  • HIGH la broche est à l’état haut, c’est à dire que la tension est de 3.3V

La fonction digitalWrite() permet de passer la broche à l’état haut (HIGH) ou bas (LOW) pour une broche du GPIO.

digitalWrite(broche, ETAT);

Remarque sur la consommation de courant par le GPIO

Le GPIO de l’ESP32 est pas conçu pour envoyer des signaux logiques. Le GPIO pourra délivrer suffisamment de puissance pour alimenter quelques LED à des fins de démonstration.

Par contre, le GPIO ne pourra pas être utilisé pour alimenter un moteur par exemple.

D’après la section Absolute Maximum Ratings de la documentation technique, la puissance totale utilisée par le GPIO ne doit pas dépasser 1200 mA.

Chaque sortie peut délivrer un courant de 40mA au maximum.

Exemple pour allumer une LED

Voici un exemple de code Arduino qui illustre le fonctionnement des entrées / sorties numériques de l’ESP32.

La LED s’allume dès qu’on presse sur le bouton poussoir et s’éteint dès qu’on relâche ce dernier.

Piloter une LED avec un ESP32 à l'aide d'un simple bouton sur une entrée numérique

Circuit

Le bouton poussoir est connecté au 4. La LED est connectée à la sortie 32.

Vous pouvez tester le fonctionnement du programme en l’absence de résistance de tirage (PULL_UP). Vous pouvez tester en utilisant la résistance de tirage (PULL_UP) interne de l’ESP32 ou ajouter une résistance au circuit (10 kΩ par exemple).

esp32 gpio io entree sortie numetrique led bouton

La LED doit être protégée par une résistance dont la valeur dépend de la tension et l’intensité de sortie de la broche (3,3V – 40mA) et de la tension d’alimentation maximale de la LED.

Voir d’autres assortiments

Vous pouvez utiliser ce calculateur pour déterminer la valeur de la résistance nécessaire pour votre circuit.

Calculateur de résistance série pour une ou plusieurs LED
Tension d'alimentation en Volt
Tension directe en Volt
Courant en mA
Résistance calculée en Ω
Puissance estimée en W

Ce calculateur permet de déterminer la résistance requise pour piloter une ou plusieurs LED connectées en série à partir d'une source de tension à un niveau de courant spécifié.

Remarque. Il est préférable d'alimenter le circuit avec une puissance nominale comprise entre 2 et 10 fois la valeur calculée afin d'éviter la surchauffe
calculateur resistance serie led resistor calculator
Couleur Longueur d'onde (nm) Tension (V) pour LED ⌀3mm Tension(V) pour LED ⌀5mm
Rouge 625-630  1,9-2,1 2,1-2,2
Bleu 460-470 3,0-3,2 3,2-3,4
Vert 520-525 2,0-2,2 2,0-2,2
Jaune 585-595 2,0-2,2 3,0-3,2
Blanc 460-470 3,0-3,2 1,9-2,1

Téléverser le code Arduino du projet

Créer un nouveau croquis sur l’IDE Arduino ou un nouveau projet PlatformIO.

Sur l’IDE Arduino vous pouvez retirer la première ligne #include <Arduino.h>.

#include <Arduino.h>

const int PIN_BUTTON = 4;   
const int PIN_LED =  32;    

// variable permettant de stocker l etat du bouton
int button_state = 0;

void setup() {
  Serial.begin(115200);  
  
  // Initialise l entre du bouton comme un entree avec resistance PULL_DOWN
  pinMode(PIN_BUTTON, INPUT_PULLDOWN);
  
  // Configure la sortie pour la LED
  pinMode(PIN_LED, OUTPUT);
}

void loop() {
  // Lit la valeur du bouton
  button_state = digitalRead(PIN_BUTTON);
  Serial.println(PIN_BUTTON);
  
  // si le bouton est appuye, passe l etat de la sortie a HIGH, sinon LOW
  if (button_state == HIGH) {
    // Allume la LED
    digitalWrite(PIN_LED, HIGH);
  } else {
    // Eteint la LED
    digitalWrite(PIN_LED, LOW);
  }
}

Configuration PlatformIO pour une LoLin D32

Voici un exemple de fichier de configuration platformio.ini pour une carte de développement LoLin D32 Pro

[env:lolin_d32_pro]
platform = espressif32
board = lolin_d32_pro
framework = arduino
monitor_speed = 115200

Mises à jour

29/09/2020 Publication de l’article

English Version

Avez-vous aimé cet article ?
[Total: 3 Moyenne: 4.7]
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

quel modèle esp8266 choisir
Quel modèle d'ESP8266EX choisir en 2020 ?
guide choix esp32 development board
Quel ESP32 choisir en 2020 ?

Vous rencontrez un problème avec ce sujet ?

Peut-être que quelqu’un a déjà trouvé la solution, visitez le forum avant de poser votre question

2 Commentaires
  1. Un site EXCELLENT !! Bravo pour la qualité pédagogique et informative de vos articles, tutos , conseils , etc.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Domotique et objets connectés à faire soi-même
Vous avez aimé ce tutoriel

Ne manquez plus les prochains projets

Recevez chaque semaine le récapitulatif des tutoriels et projets.

Vous pouvez vous désabonner à tout moment.