Où sommes nous ?

Retour

Les broches (PINs)

Certaines broches de l'ESP8266 ont des rôles réservés, cette page contient des astuces les concernant.

IO0, IO2 et IO15 sont utilisées lors du boot

Ces broches sont lues au démarrage comme un nombre binaire (sur 3 bits) pour déterminer le mode de boot. J'avouerai humblement ne pas avoir (encore ?) cherché les autres modes, mais pour démarrer depuis la flash "interne", elles prennent les niveaux suivants :

Une fois le boot effectué, il est possible de les utiliser en sorties : une résistance de tirage entre 2kΩ et 10kΩ doit les tirer vers le niveau de boot désiré. Une fois dans notre programme, ils peuvent être librement utilisés en mode sortie en tenant compte que leur niveau par défaut sera celui du boot : HAUT pour IO0 et IO2, BAS pour IO15.

Ca ne marche pas

C'est une erreur classique (et pas uniquement chez les débutants) d'oublier ces IOs. Voici la checklist à suivre si le composant ne semble pas répondre :

Câblage minimum

Grâce aux résistances internes de pull-up, il est possible de réduire ces connexions à leur strict minimum :

GPIO0 et GPIO2 peuvent donc rester flottants.

Certaines cartes comme la fameuse NodeMCU en-capsule les automatismes de programmation : vous n'avez donc pas à câbler vous-même ces IOs. Par contre, vous devez vous préoccuper si vous souhaitez les réutiliser.

Reset

Si nous utilisons le DeepSleep, les broches XPD_DCDC/GPIO16 et RST doivent être reliées.
Si on a le besoin d'un reset externe et pour éviter de devoir ajouter des composants extérieurs afin de câbler un "OU inversé", nous pouvons utiliser CH_PD (aussi appelé CHip_ENable). Comme son nom l'indique, il permet de désactiver l'ESP en le plaçant en mode économie comme avec le sommeil profond dès qu'il présente un niveau bas.

Je suis de plus tombé sur cette page qui explique qu'en certaines circonstances, l'ESP peut s'auto-détruire s'il est alimenté par une tension trop basse. Ma solution est alors de rajouter 1 ou 2 diodes pour créer une chute de tension sur cette broche et ainsi s'assurer que l'ESP n'est actif QUE lorsque la tension est suffisante.

Dans mon cas, une seule résistance a été suiffisante : utilisez une alimentation variable pour tester individuellement chaque ESP8266 en cas de doute.

Résistances de tirage

Les GPIOs 0 à 15 disposent d'une résistance de "Pull Up" débrayable entre ... 30KΩ and 100KΩ (dixit Espressif lui-même). Elle est activée par le mode INPUT_PULLUP de pinMode().

Le GPIO 16 a quant à lui une résistance de "Pull Down" activée par le mode INPUT_PULLDOWN_16.

Console série

Serial utilise l'UART0 connecté aux broches GPIO1 (TX) et GPIO3 (RX) et peut (si configuré pour) utiliser comme contrôle de flux les broches GPIO15 (RTS) et 13 (CTS).

Après un appel à Serial.swap(), les GPIO15 et GPIO13 deviennent respectivement TX et RX (mais je ne sais pas si GPIO1 et GPIO3 permettent alors au contrôle des flux ...).

Serial1 utilise UART1 avec GPIO2 comme TX. Il ne peut recevoir de données, car son RX est utilisé pour contrôler la Flash. A noter que cet Uart envoie des données de traces lors du boot.

Enfin, si Serial1 n'est pas utilisé, TX de Serial peut être re-dirigé vers GPIO2 par les fonctions Serial.set_tx(2) ou Serial.begin(baud, config, mode, 2).

Avec certains modèles, la LED bleue est connectée au même GPIO que l'UART : dans ce cas-là, on doit choisir entre l'utilisation de l'UART ou utiliser la LED librement ... à moins d'utiliser une redirection ci-dessus.


Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2018
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso.
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution.
Visites durant les 7 derniers jours Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.