budo's Web
Hier findet ihr einiges zu meinen Hobbies

ESP8266

Die ESP8266 sind eine Familie von WLAN boards, die es für wenige Euros bei ebay zu kaufen gibt. Eine Besonderheit der ESP8266 boards ist, dass sie einen integrierten Prozessor enthalten, der mit unterschiedlicher Firmware bestückt werden kann. Ausgeliefert werden die ESPs mit einer Firmware, die man per serieller Schnittstelle mit AT Kommandos ansteuern kann. Hier fungiert der ESP aber als reines WLAN Interface. Ich programmiere den ESP in der Arduino 1.6.X Umgebung. Für den Betrieb und die Programmierung der ESPs sind aber ein paar Besonderheiten zu berücksichtigen, auf die ich hier eingehen möchte.

Hardware

Ich benutze aus der ESP8266 Familie die ESP12E, die geschirmt und lizenziert sind und ein paar GPIO Pins mehr haben, als z.B. der ESP1. Den ESP12E kann man separat verwenden oder auf eine Adapterplatte setzen, die das unterschiedliche Rastermaß ausgleicht (2mm beim ESP, 2.54mm bei bread boards oder Lochrasterkarten). Es gibt aber auch fertige Komplett-Boards, bei denen ein Serial-USB-Konverter schon enthalten ist.

met

pa

ESP12E auf Lochrasterkarte montiert

ESP12E mit Adapterplatte auf bread board

Zur Programmierung des ESP8266 gibt es auf Arduino ESP8266 3 Vorschläge. Eine automatische Programmierung auf Knopfdruck erfordert für den ESP8266 eine Zusatzbeschaltung mit 2 Transistoren und die Verwendung eines USB-Seriell-Konverters (3.3V !!!) mit RTS-Signal, z.B. mit FT232RL Chip. Die Beschaltung hierzu ist dem nodeMCU DevKit entnommen.

Der ESP8266 benötigt auch noch ein paar Widerstände und einen Stützkondensator (ca. 220µF). Pullup Widerstände (alle 10k) sind an den Pins REST(RESET), CH_PD, GPIO0 und GPIO2 erforderlich und ein pulldown Widerstand (10k) an GPIO15. Der RESET benötigt noch einen Kondensator gegen Masse, ich verwende hier 2.2nF.

Betreibt man den ESP8266 zum Stromsparen im Deep Sleep Mode ist eine zusätzliche Verbindung von GPIO16(AWAKE) und RESET erforderlich. Diese Verbindung sollte man über einen 470 Ohm Widerstand vornehmen, da ansonsten der ESP8266 sich nach einem Einschalten der Stromversorgung ggf. nicht Programmieren lässt.

Software

Deep Sleep Mode: Der Deep Sleep Mode wird z.B. durch die Funktion ESP.deepSleep(2000000, WAKE_RF_DEFAULT) ausgelöst (hier nach 2 Sekunden). Das Erwachen aus dem Deep Sleep erfolgt beim ESP immer über einen Reset, erzeugt über GPIO16 oder manuell über den Reset Pin.

Reset: Der Reset wird beim ESP12E über die interne blaue LED (an GPIO2) mit einem kurzen Aufblitzen signalisiert. Zusätzlich sind auf manchen mehrfach belegten GPIO Signalen für etwa 265ms Impulse, die für angeschlossene Hardware (z.B. LEDs) störend sein können. Beim ESP12E sind die GPIO 4 und 5 "sauber".

Watchdog: Beim ESP läuft im Hintergrund ein Watchdog, der beim Überschreiben einer definierten Zeit zum Tragen kommt. Der Watchdog wird im Loop() zurückgesetzt. D.h., ein langwieriges Setup() ohne zusätzliche Watchdog Rücksetz-Kommandos, oder ein Loop() der quasi gestoppt wird (z.B. über ein while(true)) lösen den Watchdog aus.

Versorgungsspannung messen: Der für die Messung der internen Versorgungsspannung mit ESP.getVCC() erforderliche Aufruf ADC_MOSE(ADC_VCC); am Anfang des Programms funktioniert nicht (in Aduino 1.6.7). Hierfür muss:

    extern "C" {
        ADC_MODE(ADC_VCC);
    }

am Programmanfang eingegeben werden.

Möglichkeiten

Mit den ESP8266 lassen sich diverse Funktionen zur Fernsteuerung, Datenübertragung, usw. umsetzen. Im Internet findet man hierzu fast unendlich viele Beispiele. Obiges Bild "ESP12E auf Lochrasterkarte montiert" stellt z.B. eine Netzwerküberwachung dar, die mir optisch signalisiert, ob mein Netzwerkdrucker eingeschaltet ist oder nicht. Softwaretechnisch ist dies durch eine einfache Client Anfrage beim Server (dem Netzwerkdrucker) umgesetzt. Die Schaltung wird mit 2x Baby Batterien im Deep Sleep Mode betrieben. Die Schaltung läuft nun schon seit mehr als 6 Monaten mit dem ersten Satz Batterien.


Nach Oben