Comment utiliser les broches et les voyants ESP8266-01

Mise à jour le 1er juillet 2018 - ajout d'une note sur la reprogrammation lorsque GPIO0 est utilisé comme sortie.

Mis à jour le 2 avril 2018 pour afficher les Leds ESP8266-01. Vous pouvez contrôler ces voyants à partir des broches auxquelles ils sont connectés.

introduction

ESP8266-01 est une puce compatible WiFi à très faible coût. Mais il a des E / S très limitées. À première vue, une fois que vous l'avez configuré pour la programmation, toutes les broches sont utilisées.

Cette instruction s'appuie sur l'utilisation des broches ESP8266 GPIO0 / GPIO2 / GPIO15 pour vous montrer comment obtenir quatre (4) entrées / sorties utilisables pour votre prochain projet ESP8266-01 et comment utiliser IC2 pour obtenir encore plus d'entrées.

Le code ici suppose que vous programmez le module en utilisant la configuration Arduino IDE comme décrit sur //github.com/esp8266/arduino sous Installation avec Boards Manager . Lorsque vous ouvrez le gestionnaire de cartes dans le menu Outils → Carte, sélectionnez Type Contribué et installez la plate-forme esp8266.

Ces instructions sont également disponibles sur www.pfod.com.au à ESP8266-01 Pin Magic

Étape 1: broches ESP8266-01

L'ESP8266-01 est le plus petit module ESP8266 et ne dispose que de 8 broches. Parmi ces VCC, GND, RST (reset) et CH_PD (chip select) ne sont pas des broches d'E / S mais sont nécessaires au fonctionnement du module. Cela laisse GPIO0, GPIO2, TX et RX disponibles comme broches d'E / S possibles, mais même ceux-ci ont des fonctions pré-assignées. Les GPIO0 et GPIO2 déterminent dans quel mode le module démarre et les broches TX / RX sont utilisées pour programmer le module et pour les E / S série, couramment utilisées pour le débogage. GPIO0 et GPIO2 doivent avoir des résistances de rappel connectées pour garantir le démarrage correct du module.

Étape 2: Conseils de programmation ESP8266 (échec espcomm)

Lors de la programmation de l'ESP8266 à l'aide de l'IDE Arduino (voir ESP8266-01 Shield Wifi), vous obtenez parfois (souvent) des messages d'erreur dans l'IDE Arduino comme: -
échec de l'esp_com open
erreur: échec de l'ouverture de COM33
erreur: espcomm_open a échoué
erreur: espcomm_upload_mem a échoué

Dans ce cas, suivez ces étapes pour le faire fonctionner: -

  1. Vérifiez que la carte ESP8266 est sélectionnée dans le menu Outils Arduino
  2. Vérifiez que vous avez sélectionné un port COM dans le menu Outils Arduino
  3. Éteignez et rallumez l'ESP8266 avec GPIO0 mis à la terre (application d'alimentation propre, voir ci-dessous)
  4. Si 3) ne le résout pas, débranchez le câble USB de l'ordinateur, attendez quelques secondes et rebranchez-le
  5. Si 4) ne le résout pas, débranchez le câble USB du PC, fermez Arduino IDE, ouvrez Arduino IDE, rebranchez le câble USB.

Lorsque vous mettez le ESP8266 sous tension, après la mise à la terre du GPIO0, assurez-vous qu'il est appliqué correctement. Ne bougez pas la connexion. La LED ESP8266 devrait simplement s'allumer et rester allumée sans aucun flash.

Étape 3: Meilleur tour - Utilisez I2C

La meilleure astuce pour obtenir des entrées supplémentaires dans l'ESP8266-01 est d'utiliser une interface I2C.

Un choix consiste à utiliser GPIO0 et GPIO2 comme bus I2C.

Les résistances de pull-up nécessaires pour que le module démarre correctement peuvent doubler car les résistances de pull-up du bus I2C et les autres composants esclaves du bus sont à collecteur ouvert et ne doivent donc pas tirer le bus vers le bas à la mise sous tension. Cependant, dans certains cas, les esclaves, en particulier ceux avec une batterie de secours, peuvent rester bloqués et maintenir le bus enfoncé. Dans ces cas, vous devrez isoler le bus jusqu'à ce que l'ESP8266 franchisse sa phase de démarrage.

Vous pouvez éviter ce problème en utilisant TX et RX pour le bus I2C

Quelques points à noter:

  1. GPIO1 (TX) est utilisé comme ligne de données, car vous obtiendrez toujours une sortie de débogage sur GPIO1 à la mise sous tension. Il n'y a aucun moyen de supprimer cette sortie, mais la ligne d'horloge (RX) sera maintenue haute donc aucune de ces données ne sera synchronisée sur les esclaves
  2. Lors de la programmation de l'ESP8266, la ligne RX est connectée à la sortie du programmateur. À la fin de la programmation, l'ESP8266 redémarre et la résistance de protection 330 empêche le RX de court-circuiter le lecteur de sortie du programmateur.
  3. Les résistances de la série I2C offrent une protection similaire pour le TX, RX contre les courts-circuits sur le bus I2C

L'ESP8266 est un appareil de 3, 3 V. Utilisez de préférence des esclaves I2C de 3, 3 V. De nombreux appareils I2C, mais pas tous, sont à 3, 3 V de nos jours. «En général, dans un système où un appareil est à une tension plus élevée qu'un autre, il peut être possible de connecter les deux appareils via I2C sans aucun circuit de décalage de niveau entre eux. L'astuce consiste à connecter les résistances de rappel à la plus basse des deux tensions. » (Tutoriel SparkFun I2C) Pour un mélange d'appareils 5V et 3, 3V, connectez les résistances de pullup à la ligne 3, 3V, comme illustré ci-dessus.

L'utilisation d'I2C est un excellent moyen d'ajouter un convertisseur A / D multicanal à l'ESP8266-01 qui n'expose pas l'entrée ADC unique du module sous-jacent. Par exemple, en utilisant l'ADC Adafruit 12 bits I2C 4 canaux ou pour la sortie analogique de la carte I2C DAC Breakout de SparkFun - MCP4725. De nombreux autres types de capteurs sont également disponibles avec les bus I2C.

Voir //www.i2c-bus.org/i2c-primer/common-problems ... pour plus d'informations sur la résolution des problèmes I2C. Voir également Démarrage fiable pour RTC avec batterie I2C pour une méthode courte pour aider à nettoyer le bus

Étape 4: Utilisation de GPIO0 / GPIO2 pour OUTPUT et RX pour INPUT

Bien qu'il puisse envoyer des messages de débogage via la connexion WiFi, il est souvent pratique d'utiliser la connexion TX. L'exemple suivant montre comment utiliser GPIO0 et GPIO2 comme sorties et RX comme entrée.

En utilisant
Serial.begin (115200, SERIAL_8N1, SERIAL_TX_ONLY);
vous permet d'utiliser RX comme une entrée à usage général (ou une autre sortie), tout en écrivant des messages de débogage sur Serial. Encore une fois, la résistance de 330 ohms dans le fil RX du programmateur Flash protège contre le court-circuit du pilote du programmeur. REMARQUE: S1 devra être ouvert pour programmer l'ESP8266.

La broche TX est accessible à partir de l'esquisse en tant que GPIO1 et RX est GPIO3

Comment reprogrammer lors de l'utilisation de GPIO0 comme sortie

Remarque: GPIO0 doit être mis à la terre pour passer en mode de programmation. Si vous esquissez le conduit haut, la mise à la terre peut endommager votre puce ESP8266. Le moyen sûr de reprogrammer l'ESP8266 lorsque votre code pilote la sortie GPIO0 est de: -
a) Mettez la carte hors tension
b) GPIO0 court vers gnd
c) allumer la carte qui passe en mode programme en raison du court-circuit sur GPIO0
d) supprimer le court de GPIO0 afin de ne pas court-circuiter la sortie lorsque le programme s'exécute
e) reprogrammer le tableau
f) éteignez puis rallumez la carte si nécessaire.

Étape 5: Une autre astuce - Conduire un relais et lire un bouton-poussoir à l'aide de GPIO0 / GPIO2

Voici une autre façon de configurer les broches. Remarque: Cette astuce ne fonctionne que si vous avez un module relais avec une entrée isolée (N1 et N1-com). En raison de cette limitation et de la complexité du code de prise en charge, l'exemple précédent, utilisant RX comme entrée, est préférable.

L'utilisation de broches ESP8266 GPIO0 / GPIO2 / GPIO15 a déjà expliqué comment utiliser GPIO0 / GPIO2 ensemble pour obtenir une entrée supplémentaire. Ici, cet exemple sera étendu pour utiliser GPIO0 comme sortie de pilote de relais et GPIO0 / GPIO2 comme entrée.

Voici le schéma au format pdf.

Ici, GPIO0 est utilisé comme sortie pour piloter le relais et GPIO0 / GPIO2 est utilisé comme entrée pour lire le bouton poussoir momentané qui est utilisé comme une commande manuelle pour activer et désactiver le relais, en plus de la télécommande via le WiFi lien. Le bouton poussoir momentané est également utilisé pour activer le mode de configuration s'il est enfoncé lorsque l'alimentation est appliquée.

L'astuce consiste à faire tout cela tout en maintenant GPIO0 et GPIO2 à un niveau élevé lors de l'initialisation du module ESP8266.

Les résistances de rappel, R1 et R3, fournissent le niveau élevé nécessaire pour ces deux broches, mais vous devez vous assurer que tout circuit supplémentaire attaché aux GPIO0 et GPIO2 ne peut pas tirer les broches vers le bas. Le relais optiquement isolé est connecté entre + 3, 3 V et GPIO0. Cela maintient GPIO0 élevé au démarrage mais permet à GPIO0 de devenir une sortie, après le démarrage, et de mettre à la terre l'entrée du relais pour faire fonctionner le relais. Peu importe si le bouton-poussoir momentané est actionné pendant l'initialisation du module, car cela connecte simplement GPIO0 à GPIO2 et connectez les deux à leurs résistances de rappel.

Détection du mode de configuration

En utilisant l'ESP8266 comme point d'accès temporaire, vous pouvez le configurer via une page Web comme décrit ici. Une partie de ce processus consiste à utiliser un bouton-poussoir ou un lien de court-circuit lors de la mise sous tension pour indiquer au logiciel que vous souhaitez entrer en mode de configuration.

Une fois le module ESP8266 initialisé, il exécute le code setup () . Dans ce code, pour détecter si le bouton-poussoir momentané est enfoncé, vous n'avez pas besoin de réduire GPIO0 pour fournir un bouton-poussoir GND, puis de vérifier l'entrée GPIO2 pour voir si elle est faible. Un effet secondaire de cette vérification est que le relais sera toujours actionné lorsque l'unité est mise en mode de configuration. Une fois que vous voyez le relais fonctionner, vous pouvez relâcher le bouton-poussoir, car son entrée aura été détectée d'ici là. Voici un exemple de code pour le faire dans le setup ()

 boolean configMode = false; // pas en mode config normalement vide setup () {pinMode (0, OUTPUT); digitalWrite (0, LOW); // réduire la sortie GPIO0 // vérifier l'entrée GPIO2 pour voir si le bouton-poussoir est enfoncé pour la connecter à GPIO0 configMode = (digitalRead (2) == LOW); if (configMode) {// démarrez AP et préparez-vous à servir la page Web de config // laissez le relais activé pour indiquer en mode config // ......} else {// usage normal // faites GPIO0 HIGH pour l'éteindre le relais digitalWrite (0, HIGH); // .....} // reste de setup ()} 

Détection du bouton-poussoir de dérogation manuelle

La section précédente a couvert la détection de la pression du bouton-poussoir à la mise sous tension pour activer le mode de configuration. Nous voulons également utiliser ce bouton-poussoir comme une commande manuelle pour allumer et éteindre le relais en plus de pouvoir contrôler le relais via la liaison WiFi.

Le contrôle WiFi du relais n'est pas abordé ici, mais peut facilement être effectué à l'aide de pfodApp. Voir OLIMEX Menu Generator pour savoir comment générer du code Arduino avec pfodDesigner pour les modules ESP8266.

Cette section traitera de la façon de détecter quand le bouton-poussoir est enfoncé, indiquant que l'utilisateur veut basculer le relais, c'est-à-dire qu'il est éteint s'il est allumé ou s'il est allumé s'il est éteint. Le schéma est le même que ci-dessus, toutes les astuces sont dans le code. Il y a deux cas à considérer: -

  1. Le relais est désactivé et l'utilisateur souhaite l'activer à l'aide du bouton-poussoir,
  2. Le relais est activé et l'utilisateur souhaite le désactiver à l'aide du bouton-poussoir.

Le relais est désactivé et l'utilisateur souhaite l'activer à l'aide du bouton-poussoir.

Dans ce cas, la sortie de GPIO0 est ÉLEVÉE. En fait, GPIO0 peut être une entrée dans ce cas, car la résistance de rappel R1 garantira que le relais ne s'allume pas. Voilà l'astuce. Dans ce cas, faites de GPIO0 une entrée et réduisez la sortie GPIO2, puis lorsque l'utilisateur appuie sur le bouton poussoir, deux choses se produisent: - a) le relais s'allume en raison de la masse fournie par GPIO2 via le bouton poussoir et b) le L'entrée GPIO0 sera faible. Le code vérifie l'état de l'entrée GPIO0 et lorsqu'il passe à l'état BAS, le code sait que l'utilisation a appuyé sur le bouton-poussoir et souhaite que le relais soit activé. Le code fait ensuite de GPIO0 une sortie LOW pour garder le relais activé lorsque le bouton-poussoir est relâché.

Le relais est activé et l'utilisateur souhaite le désactiver à l'aide du bouton-poussoir.

Dans ce cas, à la suite du cas ci-dessus, GPIO0 est une sortie LOW qui maintient le relais sur ON. Maintenant, dans ce cas, faites GPIO2 une entrée (tiré vers le haut par R3), puis lorsque l'utilisateur appuie sur le bouton-poussoir, l'entrée GPIO2 est tirée LOW par la sortie LOW sur GPIO0. Lorsque l'utilisation relâche le bouton-poussoir, le code détecte la transition BASSE à ÉLEVÉE, puis fait de GPIO0 une entrée, ce qui libère le relais en raison de la résistance de rappel, R1, et fait de GPIO2 une sortie BASSE à configurer pour le cas i) ci-dessus.

Encore une astuce. Pour le cas ii), nous avons besoin de GPIO2 comme entrée qui détecte une transition BASSE à ÉLEVÉE pour désactiver le relais. Mais si nous effectuons GPIO2 et entrons à la fin du cas i), nous obtiendrons une transition BASSE à ÉLEVÉE lorsque l'utilisateur relâche le bouton-poussoir qu'il vient d'appuyer pour activer le relais. Pour éviter de désactiver à nouveau le relais immédiatement, la première transition BASSE à ÉLEVÉE après avoir tourné le relais sera ignorée car il suffit que l'utilisateur relâche le bouton-poussoir sur lequel il a appuyé pour activer le relais.

Exemple de code de boucle () pour le dépassement manuel du relais

Dans ce code, j'ignore le rebond du commutateur pour plus de simplicité. Les entrées doivent être éliminées dans toute application réelle.

L'exemple de code est ici, ESP8266_01pinMagic_1.ino

Encore une fois, cela laisse les broches TX / RX disponibles pour le débogage série ou l'utilisation comme d'autres E / S

Conclusion

Cette page montre comment tirer le meilleur parti des broches limitées disponibles sur l'ESP8266-01. L'utilisation de GPIO0 / GPIO2 comme bus I2C donne la plus grande extension, mais si votre projet n'utilise pas I2C, vous pouvez toujours piloter un relais et détecter une entrée de bouton-poussoir à l'aide de GPIO0 / GPIO2. Dans les deux cas, TX / RX sont également disponibles pour le débogage série ou si vous envoyez des instructions d'impression de débogage via la liaison WiFi, ces broches sont également disponibles pour les E / S générales.

Articles Connexes