Ignorer et passer au contenu

Livraison offerte à partir de 50€ d'achats, livrée sous 48h !

Livraison à partir de seulement 2.50€ !

Contents Menu Expand Light mode Dark mode Auto light/dark mode

Contrôler les pins GPIO (Entrées/Sorties)

(Mis à jour le 10/10/2022)

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 natifs de l’ESP32. Il faut donc éviter d’utiliser A0, MOSI, SCK, SDA…

schéma des broches de l’ESP32 complet

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

    Câblage d’un bouton-poussoir en pull-up

    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 relâché), 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

    Câblage d’un bouton-poussoir en pull-down

    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 lâché, 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.

Utiliser les résistances pullup et pulldown interne de l’ESP32

  • Configuration du pin GPIO15 en entrée avec la résistance pullup interne :

    pinMode(15, INPUT_PULLUP);
    
  • Configuration du pin GPIO15 en entrée avec la résistance pulldown interne :

    pinMode(15, INPUT_PULLDOWN);
    

    Note

    Contrairement à l’Arduino, sur les ESP32 il y a des résistances pulldown internes en plus.

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 : Contrôler une LED avec un bouton

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.

Projet bouton-poussoir et led

Schéma électrique

On va utiliser les résistances pullup internes pour simplifier le schéma électrique

Schéma de câblage ESP32 led bouton-poussoir

Circuit électrique

Avertissement

Pensez à bien enfoncer le bouton-poussoir dans la breadboard

Câblage sur plaque de prototypage du bouton-poussoir et de la led

Circuit électrique

Code pour allumer la LED lorsque le bouton est pressé

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);
    }
}

Résultat final

Câblage sur plaque de prototypage du bouton-poussoir et de la led