Contrôler les pins GPIO¶
Les fonctions à utiliser sont les mêmes qu’avec une Arduino.
On utilise donc la fonction pinMode()
pour configurer un pin en entrée ou en sortie numérique, la fonction digitalWrite()
pour imposer une tension de 0V ou 3.3V en sortie et la fonction digitalRead()
pour lire un niveau logique (soit 0V ou 3.3V) en entrée.
Note
Les numéros des pins sont ceux indiqués dans l’encart gris « GPIO » sur le pinout de la carte. Même s’il existe une correspondance entre le numéro des pins GPIO de l’ESP32 et ceux habituellement utilisés sur l’Arduino, il est préférable pour éviter de s’emmêler les pinceaux de ne pas les utiliser et d’utiliser exclusivement le numéro des pins natif de l’ESP32. Il faut donc éviter d’utiliser A0, MOSI, SCK, SDA …

Pinout de la carte uPesy ESP32 Wroom Devkit¶
Configuration des pins en entrée ou en sortie¶
Configuration du pin GPIO2 en sortie:
pinMode(2, OUTPUT);
Configuration du pin GPIO15 en entrée:
pinMode(15, INPUT);
Rappel sur les résistances pullup et pulldown :
Si l’on mesure une tension d’un pin qui n’est relié ni à la masse ni à une tension non nulle, alors la valeur mesurée est aléatoire. Cela est dû au bruit électrique généré par plusieurs facteurs (le fil se comporte notamment comme une antenne). L’exemple le plus concret est lorsque l’on utilise un bouton poussoir.
- Deux méthodes permettent d’éliminer le bruit et d’avoir des mesures fiables :
- Résistance Pullup:
Utilisation d’une résistance pullup avec un bouton poussoir¶
Ce circuit permet de n’avoir que 2 tensions possibles : 0V quand on appuie sur le bouton sinon +3.3V
Quand l’interrupteur est ouvert (bouton relaché), le +3.3V nourrit le pin de l’ESP32, la valeur mesurée du pin donnera HIGH (ou 1).
Lorsque l’interrupteur est fermé (bouton pressé), le +3.3V et le pin sont absorbés par la masse, la mesure du pin donnera LOW (ou 0).
- Résistance Pulldown:
Utilisation d’une résistance pulldown avec un bouton poussoir¶
Ce circuit permet de n’avoir que 2 tensions possibles : +3.3V quand on appuie sur le bouton sinon 0V
Si le bouton poussoir est pressé, le courant va du +3.3V au pin de l’ESP32. Il ne prendra pas le chemin de la masse car le courant circule toujours par le chemin le moins résistif. Le pin de l’ESP32 recevra du +3.3V et indiquera HIGH (ou 1).
Si le bouton poussoir est laché, le circuit est ouvert. Le très faible courant résiduel sera absorbé par la masse, le pin sera donc bien en LOW (ou 0).
Tous les pins GPIO (sauf les pins GPIO36, GPIO39, GPIO34, GPIO35) ont ces 2 circuits « en miniature », en interne dans l’ESP32.
Configuration du pin GPIO15 en entrée avec la résistance pullup interne :
pinMode(15, INPUT_PULLUP);
Note
Contrairement à l’Arduino, sur les ESP32 il y a des résistances pulldown internes en plus.
Configuration du pin GPIO15 en entrée avec la résistance pulldown interne :
pinMode(15, INPUT_PULLDOWN);
Imposer ou lire une tension¶
Pour imposer une tension de 3.3V en sortie du pin 2 de l’ESP32 :
pinMode(2, OUTPUT); //Il faut déclarer le pin en sortie digitalWrite(2, HIGH);Note
La tension en sortie des pins est de 3.3V (et non pas de 5V comme sur Arduino)
Pour lire une tension d’un niveau logique de 0V ou 3.3V en entrée du pin 15 de l’ESP32 :
pinMode(15, INPUT); //Il faut déclarer le pin en entrée digitalRead(15);
Mini Projet¶
Pour montrer comment utiliser les entrées / sorties numériques de l’ESP32, nous allons faire un projet très simple qui allume la led lorsque l’on appuie sur un bouton.

Descriptif du projet¶
Schéma électrique
On va utiliser les résistances pullup internes pour simplifier le schéma électrique

Circuit électrique¶

Essayez d’écrire le programme par vous-même !
Solution
const int buttonPin = 32;
const int ledPin = 23;
// Etat du bouton poussoir
int buttonState = 0;
void setup() {
Serial.begin(115200);
//Configuration du pin en entrée pullup
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
if (buttonState == LOW) {
// Allume la led
digitalWrite(ledPin, HIGH);
} else {
// Eteins la led
digitalWrite(ledPin, LOW);
}
}