Verwendung der ESP8266-01-Stifte und -Leds

Aktualisiert am 1. Juli 2018 - Hinweis zur Neuprogrammierung hinzugefügt, wenn GPIO0 als Ausgabe verwendet wird.

Aktualisiert am 2. April 2018, um ESP8266-01 Leds anzuzeigen. Sie können diese LEDs über die Pins steuern, mit denen sie verbunden sind.

Einführung

ESP8266-01 ist ein sehr kostengünstiger WiFi-fähiger Chip. Aber es hat sehr begrenzte E / A. Auf den ersten Blick werden nach der Konfiguration für die Programmierung alle Pins verwendet.

Diese Anleitung baut auf der Verwendung von ESP8266 GPIO0 / GPIO2 / GPIO15-Pins auf, um Ihnen zu zeigen, wie Sie vier (4) verwendbare Ein- / Ausgänge für Ihr nächstes ESP8266-01-Projekt erhalten und wie Sie IC2 verwenden, um noch mehr Eingänge zu erhalten.

Der Code hier setzt voraus, dass Sie das Modul mit dem Arduino IDE-Setup programmieren, wie unter //github.com/esp8266/arduino unter Installieren mit Boards Manager beschrieben . Öffnen Sie beim Öffnen des Kartenmanagers im Menü Extras → Karte die Option Typ beigetragen und installieren Sie die esp8266-Plattform.

Diese Anweisungen finden Sie auch unter www.pfod.com.au unter ESP8266-01 Pin Magic

Schritt 1: ESP8266-01 Pins

Der ESP8266-01 ist das kleinste ESP8266-Modul und hat nur 8 Pins. Von diesen VCC sind GND, RST (Reset) und CH_PD (Chipauswahl) keine E / A-Pins, sondern werden für den Betrieb des Moduls benötigt. Dadurch stehen GPIO0, GPIO2, TX und RX als mögliche E / A-Pins zur Verfügung, aber auch diese haben vorab zugewiesene Funktionen. GPIO0 und GPIO2 bestimmen, in welchem ​​Modus das Modul gestartet wird, und die TX / RX-Pins werden zum Programmieren des Moduls und für serielle E / A verwendet, die üblicherweise zum Debuggen verwendet werden. Bei GPIO0 und GPIO2 müssen Pull-up-Widerstände angeschlossen sein, damit das Modul ordnungsgemäß startet.

Schritt 2: ESP8266-Programmiertipps (espcomm fehlgeschlagen)

Wenn Sie den ESP8266 mit der Arduino IDE programmieren (siehe ESP8266-01 Wifi Shield), erhalten Sie manchmal (häufig) Fehlermeldungen in der Arduino IDE wie: -
esp_com open fehlgeschlagen
Fehler: COM33 konnte nicht geöffnet werden
Fehler: espcomm_open fehlgeschlagen
Fehler: espcomm_upload_mem fehlgeschlagen

Führen Sie in diesem Fall die folgenden Schritte aus, damit es funktioniert: -

  1. Überprüfen Sie, ob im Menü Arduino Tools die ESP8266-Karte ausgewählt ist
  2. Überprüfen Sie, ob Sie im Menü Arduino Tools einen COM-Anschluss ausgewählt haben
  3. Schalten Sie den ESP8266 mit geerdetem GPIO0 aus und wieder ein (saubere Stromversorgung, siehe unten).
  4. Wenn 3) das Problem nicht behebt, ziehen Sie das USB-Kabel vom Computer ab, warten Sie einige Sekunden und schließen Sie es wieder an
  5. Wenn 4) das Problem nicht behebt, ziehen Sie das USB-Kabel vom PC ab, schließen Sie die Arduino IDE, öffnen Sie die Arduino IDE und stecken Sie das USB-Kabel wieder ein.

Wenn Sie den ESP8266 nach dem Erden von GPIO0 mit Strom versorgen, stellen Sie sicher, dass er sauber angelegt ist. Wackeln Sie nicht mit der Verbindung. Die LED des ESP8266 sollte einfach aufleuchten und ohne Blitze eingeschaltet bleiben.

Schritt 3: Bester Trick - Verwenden Sie I2C

Der beste Trick, um zusätzliche Eingaben in den ESP8266-01 zu erhalten, ist die Verwendung einer I2C-Schnittstelle.

Eine Möglichkeit besteht darin, GPIO0 und GPIO2 als I2C-Bus zu verwenden.

Die Pullup-Widerstände, die erforderlich sind, damit das Modul ordnungsgemäß startet, können doppelt so hoch sein wie die Pull-up-Widerstände des I2C-Busses und die anderen Slave-Komponenten am Bus sind offene Kollektoren und sollten den Bus daher beim Einschalten nicht herunterziehen. In einigen Fällen können jedoch Slaves, insbesondere solche mit Batterie-Backup, stecken bleiben und den Bus gedrückt halten. In diesen Fällen müssen Sie den Bus isolieren, bis der ESP8266 seine Startphase durchlaufen hat.

Sie können dieses Problem vermeiden, indem Sie TX und RX für den I2C-Bus verwenden

Ein paar Dinge zu beachten:

  1. GPIO1 (TX) wird als Datenleitung verwendet, da beim Einschalten immer eine Debug-Ausgabe auf GPIO1 angezeigt wird. Es gibt keine Möglichkeit, diesen Ausgang zu unterdrücken, aber die Taktleitung (RX) wird hoch gehalten, sodass keine dieser Daten an die Slaves getaktet werden
  2. Bei der Programmierung des ESP8266 wird die RX-Leitung an den Ausgang des Programmiergeräts angeschlossen. Am Ende der Programmierung startet der ESP8266 neu und der 330-Schutzwiderstand verhindert, dass RX das Ausgangslaufwerk des Programmiergeräts kurzschließt.
  3. Die Widerstände der I2C-Serie bieten einen ähnlichen Schutz für TX, RX vor Kurzschlüssen am I2C-Bus

Der ESP8266 ist ein 3, 3-V-Gerät, verwenden Sie daher vorzugsweise 3, 3-V-I2C-Slaves. Viele, aber nicht alle I2C-Geräte sind heutzutage 3, 3 V. „Im Allgemeinen kann es in einem System, in dem ein Gerät eine höhere Spannung als ein anderes hat, möglich sein, die beiden Geräte über I2C zu verbinden, ohne dass zwischen ihnen eine Pegelverschiebungsschaltung liegt. Der Trick besteht darin, die Pull-up-Widerstände an die niedrigere der beiden Spannungen anzuschließen. “ (SparkFun I2C-Tutorial) Schließen Sie für eine Mischung aus 5-V- und 3, 3-V-Geräten die Pullup-Widerstände wie oben gezeigt an die 3, 3-V-Leitung an.

Die Verwendung von I2C ist eine hervorragende Möglichkeit, dem ESP8266-01 einen Mehrkanal-A / D-Wandler hinzuzufügen, der den einzelnen ADC-Eingang des zugrunde liegenden Moduls nicht freigibt. Zum Beispiel mit Adafruit 12bit I2C 4-Kanal-ADC oder für den Analogausgang SparkFuns I2C DAC Breakout - MCP4725-Karte. Viele andere Arten von Sensoren sind auch mit I2C-Bussen erhältlich.

Weitere Informationen zur Überwindung von I2C-Problemen finden Sie unter //www.i2c-bus.org/i2c-primer/common-problems .... Unter Reliable Startup for I2C Battery Backed RTC finden Sie auch eine kurze Methode zum Löschen des Busses

Schritt 4: Verwenden von GPIO0 / GPIO2 für OUTPUT und RX für INPUT

Während Debug-Nachrichten über die WiFi-Verbindung gesendet werden können, ist es häufig bequem, die TX-Verbindung zu verwenden. Das nächste Beispiel zeigt, wie GPIO0 und GPIO2 als Ausgänge und RX als Eingang verwendet werden.

Verwenden von
Serial.begin (115200, SERIAL_8N1, SERIAL_TX_ONLY);
Mit dieser Option können Sie RX als Allzweckeingabe (oder als andere Ausgabe) verwenden, während Sie weiterhin Debug-Meldungen an Serial schreiben. Wiederum schützt der 330-Ohm-Widerstand im RX-Kabel zum Flash-Programmierer vor einem Kurzschluss des Programmierertreibers. HINWEIS: S1 muss geöffnet sein, um den ESP8266 zu programmieren.

Auf den TX-Pin kann über die Skizze zugegriffen werden, da GPIO1 und RX GPIO3 ist

So programmieren Sie neu, wenn Sie GPIO0 als Ausgabe verwenden

Hinweis: GPIO0 muss geerdet sein, um in den Programmiermodus zu gelangen. Wenn Sie skizzieren, dass es hoch fährt, kann die Erdung Ihren ESP8266-Chip beschädigen. Der sichere Weg, den ESP8266 neu zu programmieren, wenn Ihr Code den GPIO0-Ausgang steuert, ist: -
a) Schalten Sie das Board aus
b) kurz GPIO0 bis gnd
c) Schalten Sie die Karte ein, die aufgrund des Kurzschlusses bei GPIO0 in den Programmiermodus wechselt
d) Entfernen Sie den Kurzschluss von GPIO0, damit Sie die Ausgabe nicht kurzschließen, wenn das Programm ausgeführt wird
e) Programmieren Sie die Karte neu
f) Schalten Sie die Karte bei Bedarf aus und wieder ein.

Schritt 5: Ein weiterer Trick - Ansteuern eines Relais und Lesen eines Druckknopfs mit GPIO0 / GPIO2

Hier ist eine andere Möglichkeit, die Pins zu konfigurieren. Hinweis: Dieser Trick funktioniert nur, wenn Sie ein Relaismodul mit einem isolierten Eingang (N1 und N1-com) haben. Aufgrund dieser Einschränkung und der Komplexität des unterstützenden Codes ist das vorherige Beispiel mit RX als Eingabe vorzuziehen.

Die Verwendung von ESP8266 GPIO0 / GPIO2 / GPIO15-Pins hat bereits erläutert, wie GPIO0 / GPIO2 zusammen verwendet werden, um einen zusätzlichen Eingang zu erhalten. Hier wird dieses Beispiel erweitert, um GPIO0 als Relaistreiberausgang und GPIO0 / GPIO2 als Eingang zu verwenden.

Hier ist der Schaltplan als PDF.

Hier wird GPIO0 als Ausgang zum Ansteuern des Relais und GPIO0 / GPIO2 als Eingang zum Lesen des momentanen Druckknopfs verwendet, der als manuelle Übersteuerung zum Ein- und Ausschalten des Relais zusätzlich zur Fernbedienung über WLAN verwendet wird Verbindung. Der kurzzeitige Druckknopf wird auch verwendet, um den Konfigurationsmodus zu aktivieren, wenn er beim Einschalten gedrückt wird.

Der Trick dabei ist, dies alles zu tun, während GPIO0 und GPIO2 bei der Initialisierung des ESP8266-Moduls hoch bleiben.

Die Pull-up-Widerstände R1 und R3 liefern das erforderliche High für diese beiden Pins. Sie müssen jedoch sicherstellen, dass zusätzliche Schaltkreise, die an GPIO0 und GPIO2 angeschlossen sind, die Pins nicht nach unten ziehen können. Das optisch isolierte Relais ist zwischen +3, 3 V und GPIO0 angeschlossen. Dies hält GPIO0 beim Start hoch, ermöglicht es jedoch, GPIO0 nach dem Start als Ausgang zu verwenden und den Relaiseingang zu erden, um das Relais zu betreiben. Es spielt keine Rolle, ob der momentane Druckknopf während der Initialisierung des Moduls betätigt wird, da dies nur GPIO0 mit GPIO2 verbindet und beide mit ihren Pullup-Widerständen verbindet.

Konfigurationsmodus erkennen

Wenn Sie den ESP8266 als temporären Zugriffspunkt verwenden, können Sie ihn wie hier beschrieben über eine Webseite konfigurieren. Ein Teil dieses Vorgangs besteht darin, beim Einschalten einen Druckknopf oder eine Kurzschlussverbindung zu verwenden, um der Software anzuzeigen, dass Sie in den Konfigurationsmodus wechseln möchten.

Nach der Initialisierung des ESP8266-Moduls wird der setup () - Code ausgeführt. Um festzustellen, ob der momentane Druckknopf gedrückt wird, müssen Sie in diesem Code GPIO0 nicht auf niedrig stellen, um einen GND-Druckknopf zu liefern, und dann den GPIO2-Eingang überprüfen, um festzustellen, ob er niedrig ist. Ein Nebeneffekt dieser Prüfung ist, dass das Relais immer betätigt wird, wenn das Gerät in den Konfigurationsmodus versetzt wird. Sobald Sie sehen, dass das Relais funktioniert, können Sie den Druckknopf loslassen, da sein Eingang bis dahin erkannt wurde. Hier ist ein Beispielcode, um dies im Setup zu tun ()

 boolean configMode = false; // nicht im Konfigurationsmodus normalerweise void setup () {pinMode (0, OUTPUT); digitalWrite (0, LOW); // GPIO0-Ausgang niedrig machen // GPIO2-Eingang überprüfen, um festzustellen, ob der Druckknopf gedrückt wurde, um ihn mit GPIO0 zu verbinden configMode = (digitalRead (2) == LOW); if (configMode) {// AP starten und bereit sein, die Konfigurationswebseite zu bedienen // Relais eingeschaltet lassen, um im Konfigurationsmodus anzuzeigen // ......} else {// normale Verwendung // GPIO0 HIGH zum Ausschalten bringen das Relais digitalWrite (0, HIGH); // .....} // Rest von setup ()} 

Erkennen des manuellen Override-Druckknopfs

Der vorherige Abschnitt befasste sich mit der Erkennung, wann der Druckknopf beim Einschalten gedrückt wurde, um den Konfigurationsmodus zu aktivieren. Wir möchten diesen Druckknopf auch als manuelle Übersteuerung zum Ein- und Ausschalten des Relais verwenden und das Relais über die WiFi-Verbindung steuern können.

Die WiFi-Steuerung des Relais wird hier nicht behandelt, kann aber problemlos mit pfodApp durchgeführt werden. Informationen zum Generieren von Arduino-Code mit pfodDesigner für ESP8266-Module finden Sie unter OLIMEX Menu Generator.

In diesem Abschnitt erfahren Sie, wie Sie erkennen, wann der Druckknopf gedrückt wird, und anzeigen, dass der Benutzer das Relais umschalten möchte, dh es ausschalten, wenn es eingeschaltet ist, oder einschalten, wenn es ausgeschaltet ist. Das Schema ist das gleiche wie oben, alle Tricks sind im Code enthalten. Es sind zwei Fälle zu berücksichtigen:

  1. Das Relais ist ausgeschaltet und der Benutzer möchte es mit dem Druckknopf einschalten.
  2. Das Relais ist eingeschaltet und der Benutzer möchte es mit dem Druckknopf ausschalten.

Das Relais ist AUS und der Benutzer möchte es mit dem Druckknopf einschalten.

In diesem Fall ist der Ausgang von GPIO0 HIGH. Tatsächlich kann GPIO0 in diesem Fall ein Eingang sein, da der Pull-up-Widerstand R1 sicherstellt, dass das Relais nicht eingeschaltet wird. Das ist der Trick. In diesem Fall machen Sie GPIO0 zu einem Eingang und GPIO2-Ausgang zu NIEDRIG. Wenn der Benutzer den Druckknopf drückt, passieren zwei Dinge: - a) Das Relais schaltet sich aufgrund der von GPIO2 über den Druckknopf bereitgestellten Masse ein und b) die Der Eingang GPIO0 wird niedrig. Der Code überprüft den Status des Eingangs GPIO0 und wenn er auf LOW geht, weiß der Code, dass die Verwendung den Druckknopf gedrückt hat und das Relais eingeschaltet sein soll. Der Code macht GPIO0 dann zu einem LOW-Ausgang, um das Relais eingeschaltet zu halten, wenn der Druckknopf losgelassen wird.

Das Relais ist eingeschaltet und der Benutzer möchte es mit dem Druckknopf ausschalten.

In diesem Fall ist GPIO0 nach dem obigen Fall ein Ausgang LOW, der das Relais eingeschaltet hält. Machen Sie in diesem Fall GPIO2 zu einem Eingang (von R3 hochgezogen), und wenn der Benutzer den Druckknopf drückt, wird der Eingang GPIO2 vom LOW-Ausgang von GPIO0 auf LOW gezogen. Wenn die Verwendung den Druckknopf loslässt, erkennt der Code den Übergang von LOW nach HIGH und macht dann GPIO0 zu einem Eingang, der das Relais aufgrund des Pull-up-Widerstands R1 freigibt und GPIO2 zu einem LOW-Ausgang macht, der für den obigen Fall i) eingerichtet werden soll.

Noch ein Trick. Für Fall ii) benötigen wir GPIO2 als Eingang, der einen Übergang von LOW nach HIGH erkennt, um das Relais auszuschalten. Wenn wir jedoch GPIO2 machen und am Ende von Fall i) eingeben, erhalten wir einen Übergang von LOW zu HIGH, wenn der Benutzer den Druckknopf loslässt, den er gerade gedrückt hat, um das Relais einzuschalten. Um zu vermeiden, dass das Relais sofort wieder ausgeschaltet wird, wird der erste Übergang von LOW nach HIGH nach dem Einschalten des Relais ignoriert, da nur der Benutzer den Druckknopf loslässt, den er zum Einschalten des Relais gedrückt hat.

Beispielschleife () Code für manuelle Übersteuerung des Relais

In diesem Code ignoriere ich der Einfachheit halber das Entprellen von Schaltern. Die Eingaben sollten in jeder realen Anwendung entprellt werden.

Der Beispielcode ist hier, ESP8266_01pinMagic_1.ino

Dadurch bleiben die TX / RX-Pins wieder für das serielle Debuggen oder die Verwendung als andere E / A verfügbar

Fazit

Diese Seite zeigt, wie Sie die begrenzten Pins des ESP8266-01 optimal nutzen können. Die Verwendung von GPIO0 / GPIO2 als I2C-Bus bietet die größte Erweiterung. Wenn Ihr Projekt jedoch kein I2C verwendet, können Sie dennoch ein Relais ansteuern und einen Druckknopf-Eingang mit GPIO0 / GPIO2 erkennen. In beiden Fällen sind TX / RX auch für das serielle Debugging verfügbar, oder wenn Sie Debug-Druckanweisungen über die WiFi-Verbindung senden, sind diese Pins auch für allgemeine E / A verfügbar.

Ähnlicher Artikel