Was ist ESP8266?

In meiner Jugend war Basteln mit Elektronik ziemlich populär, zumindest in den Kreisen in denen ich mich aufgehalten habe. Elrad, Elektor MC u.a. waren die Zeitschriften, die in der Bibliothek des Gymnasiums oft gelesen wurde. Gebastelt wurde "analog (Radio) oder digital mit TTL-Chip (74xx Reihe) und Kleincomputern (ZX80, ZX81 u.a.). Je größer und teurer die Computer wurde, desto weniger hat man noch eigene Module angebaut. Erst mit dem Aufkommen der RaspberryPi und Co und Arduino Plattform war Basteln, DIY (Do it Yourself) und die Maker-Szene plötzlich wieder hipp. Aber auch das Internet muss in solche Basteleien integriert werden. Bei einem RasPi geht das per 100MBit direkt auf dem Board. Aber 40€+ oder der höhere Stromverbrauch ist nachteilig. Ein Arduino ist billiger und sparsamer aber haben erst mal kein LAN/WLAN. Also braucht es einen Adapter.

Mit dem ESP32 - ESP 8266 Nachfolger gibt es einen minimal teureren aber viel leistungsfähigeren Nachfolger.

Zuerst habe ich daher nach einer möglichst günstigen Option für WiFi in meinen Bastelprojekten gesucht. So ein Arduino Ethernet oder entsprechende Shields sind ja nicht gerade günstig und belegen zudem GPIO-Ports. Sehr schnell habe ich dann den Chip "ESP8266" als Option gefunden. Viele Beschreibungen zeigen, wie dieser als "Terminal" einfach an beliebige Systeme angebunden werden kann, solange diese eine serielle Schnittstelle haben. Aber nach einiger Betrachtung habe ich bald gesehen, dass dieser Baustein, den es für weniger als 5€ komplett aufgebaut gibt, noch viel mehr kann. Er ist seit Dezember 2013 in Produktion.

ESP8266 Minimodul

Der eigentliche ESP8266 Chip hat viel mehr Ein- und Ausgänge aber als Modul zur Anbindung per TCP/IP over WLAN tut es das kleinste Board. Die einfachste Funktion ist die Anbindung als Terminal über einen seriellen Port. Technisch sind dazu gerade mal vier Kabel erforderlich: +3,3v, GND, RxD und TxD. Aus der Menge der vielen Boards mit einem ESP8266 sind für diesen Zweck die Miniboards mit 8 Pins sehr gut geeignet. Es gibt natürlich auch viel größere Boards (Siehe ESP8266:Boards)

Bei diesen Boards sind natürlich nur ein Bruchteil der IO-Anschlüsse erreichbar aber sie sind für eine serielle Anbindung der WiFi-Funktion komplett ausreichend. Die Pin-Belegung zeigt den Blick von oben auf das Board. Angeschlossen wird:

  • GND und VCC sind Masse und 3,3V Versorgung
  • TxD und RxD sind die seriellen Datenleitungen
    Auch sind hier 3,3V einzuhalten.
  • CH_PD - Chip PowerDown
    Muss an VCC, damit der Chip "läuft". Wird der Pin auf GND gelegt, dann wird der Chip deaktiviert, z.B.: für Stromsparfunktionen. Man legt ihn also am besten über einen Widerstand oder direkt auf HIGH, auch wenn anscheinend es einen internen PullUp-Widerstand gibt.
  • RST führt einen Reset aus bei Kontakt zu GND
    Man legt ihn also am besten über einen Widerstand auf HIGH
  • GPIO0: Input/Output und FlashStart
    Wenn der Pin beim Einschalten auf GND liegt, wird der ESP8266 in den UpdateMode gesetzt, um eine neue Firmware zu flashen.
  • GPIO2
    freier genereller Port, der für Eingaben/Ausgaben frei nutzbar ist. der GPIO0 hat ja einige Sonderfunktionen. Leider ist dies nicht GPIO16, der für ein Aufwachen aus dem DeepSleep Mode nützlich wäre.
  • Sonstige Ports
    Der ESP8266 hat noch viel mehr Ports aber dieses kleine Modul leitet nur diese wenige Port nach extern aus. Für eine Nutzung der anderen Ports sind dann andere Boards verfügbar wie z.B. WeMOS IoT-Device, NodeMCU / LUA oder eines der anderen weiter unten beschriebenen Module.

Dabei muss man natürlich beachten, dass das Modul wirklich nur 3,3V verarbeitet. Die Versorgungspannung muss also entsprechend reduziert werden und die auch die Datenleitung vom Arduino und Co zum ESPS8266 sollte zumindest über einen Spannungsteiler (1k/2k Ohm) von 5V auf 3,3-Level gebracht werden. In die Gegenrichtung sendet das Modul zwar auch nur 3,3 Volt, aber dies wird von den meisten TTL-Schaltungen zuverlässig als "High" erkannt. Ein Versuch ist es zumindest wert, ehe Sie aufwändige Spannungswandler einsetzen. Sie können natürlich auch gleich alles in 3,3V-Technik aufbauen. So gibt es den Arduino Pro Mini 328 als 3,3V-Version.

So ein einfacher Spannungsteiler ist nicht für die Stromversorgung ausreichend. Das Modul braucht beim Senden bis zu 300mA, im Schlafmode aber teilweise nur 12µA. Eventuell müsste man doch mal einen SuperCAP mit ein paar Farad dazu schalten.

Es soll bald einen großen Bruder oder Nachfolger des beliebten ESP8266 geben. Preis ca. 3-5 US$
Espressif ESP32 https://espressif.com/en/products/hardware/esp32/overview
Von allem etwas mehr und zzgl. Bluetooth
http://www.heise.de/make/meldung/Grosser-Bruder-Der-Mikrocontroller-Espressif-ESP32-vorab-ausprobiert-3258216.html

ESP8266 - Innere Werte

Auch wenn der erste Eindruck de Minimoduls nicht viel erwarten lässt, haben die Entwickler jede Menge Dinge in das Board gepackt. Ein stark vereinfachter Vergleich zeigt, dass das Board deutlich mehr Speicher und MHz hat, als die bekannte Arduino-Plattform und WiFi schon an Bord hat. Der TCP-Stack ist angeblich komplett in Hardware abgebildet, so dass sich die eigene Software darum nicht mehr kümmern muss. Zudem sind auch SPI/I2C-Anschlüsse enthalten.

Achtung: Es gibt nicht den einen ESP8266, sondern eine ganze Familie mit unterschiedlichen Ausbaustufen.

System PIC 32 Arduino ESP8266 RasPi B

CPU

40-200 

8/16 MHz
ARM

80 MHz
ARM

700 MHz 
ARM

Flash-Speicher (kb)

16-2048

32k

512k-4MB

SD-Karte 

GPIO

bis 48 

14-54 

bis zu 18 

17/26 

RAM 

4-512k

1-8 

64k Instruction RAM
96k DataRam (81k frei)

512MB 

Mal abgesehen vom RasPi, der in einer ganz anderen Liga spielt (Performance aber auch Preis) sind die Unterschiede zwischen PIC, Atmel und ESP8266 nicht so fundamental. Sie sind alle kleine SoC's (System on a Chip) mit vielen Ein- und Ausgängen.

Achtung: Der ESP8266 braucht durch die höhere Taktrate und natürlich die WiFi -Funktion auf jeden Fall mehr Strom und er ist nicht 5V-tolerant. Aber es spricht nichts dagegen, mit 2 1,5V Batterien das Gerät beim Auftreten eines Event kurz aufzuwecken.

Im den Zuge ist es natürlich interessant, wie schnell das Modul nach dem "PowerUp" angemeldet ist und Daten senden kann. Reicht es z.B. für eine Türklingel mit Batteriebetrieb?

Es soll bald einen großen Bruder oder Nachfolger des beliebten ESP8266 geben. Preis ca. 3-5 US$
Espressif ESP32 https://espressif.com/en/products/hardware/esp32/overview
Von allem etwas mehr und zzgl. Bluetooth
http://www.heise.de/make/meldung/Grosser-Bruder-Der-Mikrocontroller-Espressif-ESP32-vorab-ausprobiert-3258216.html

Datenblatt
http://www.adafruit.com/datasheets/ESP8266_Specifications_English.pdf

WiFi-Adapter per AT-Befehl

Von Hause aus kommt der ESP8266 normalweise mit einer Firmware, die auf den seriellen Ports per AT-Befehle ansteuerbar ist um Verbindungen per WiFi aufzubauen. Über die gleichen AT-Befehle kann dann eine TCP-Connection aufgebaut werden, die transparent dann zum seriellen Anschluss umgesetzt wird. Insofern ist der ESP8266 eigentlich erst mal nur ein "Terminal-Server" um TCP/IP auf Seriell umzusetzen. Interessant wird der Chip durch die Möglichkeit die Firmware durch eigenen Code zu ersetzen. Das beschreibe ich aber auch den anderen Seiten.

Die Steuerung erfolgt dann per AT-Befehle mit der entsprechenden Baudrate abzusetzen sind. Je nach Firmware ist die Default-Baudrate mal 115200 oder 9600Baud, Hier ist ggfls. etwas zu experimentieren. Die häufigsten Befehle sind:

AT-Befehl Bedeutung

AT+RST

Reset des Moduls

AT+CWMODE?

Aktuelle Betriebsart auslesen, 1=Client, 2=AccessPoint, 3 = Beides

AT+CWSAP?

Ausgabe der aktuellen Konfiguration

AT+CWJAP?

Anzeige der aktuellen WiFi Verbindung

AT+CIFSR

Aktuelle IP-Adresse

AT+CWSAP=\"MSXFAQ\",\"kennwort\",1,3"

Module als Client am WLAN mit der SSID "MSXFAQ" und dem Password "kennword anmelden". Nutze den Kanal 1 und die angegebene Verschlüsselung
(0=open, 1=WEP, 2=WPA_PSK, 3=WPA2_PSK, 4=WPA_WPA2_PSK )

AT+CIPSTART

Initiiere ausgehende TCP/UDP Verbindung 

AT+CIPSEND

Sende Daten

AT+ CIPSERVER

Start Server-Betrieb zum Empfangen von Daten

+IPD

Empfange Daten, wenn vorher als Server gestartet

Da die komplette UDP/TCP-Kommunikation durch den Chip selbst erledigt wird, sind die Programme entsprechend kompakt und benötigen keinen größeren Speicherplatz, wie dies beim Arduino oft aufgrund der erforderlichen IP-Bibliotheken der Fall ist.

ESP8266 Tutorial AT Commands
https://www.youtube.com/watch?v=uznq8W9sOKQ

Firmware aktualisieren

 Auch diese Firmware gibt es immer mal wieder in aktueller Form. Wie jede Software gibt es auch hier Bugs zu beheben und Funktionen zu erweitern. für einen Flash-Downloader lässt sich das jeweilige BIN-File auf den ESP8266 herunter laden. Ich habe das mit meinen ESP8266 auch gemacht, um die aktuelle Version zu haben. Hier ein Screencapture der Windows-Software:


Hinweis: das Bild wurde "gestrafft".

Der Flasher kann am Ende den ESP8266 nicht mehr aus dem FlashMode zurückholen, so dass die Meldung am Ende in Ordnung geht. Wer die RESET-Leitung angeschlossen hat, kann sie nutzen oder einfach einmal durch eine Stromunterbrechung einen Reset erzeugen.

Die AT-Kommandos sind z.B.: hier dokumentiert:

Sie finden im Internet durchaus noch andere Anleitungen, da es mit NodeMCU eine sehr interessante alternative Firmware gibt, die statt der originalen Firmware eingesetzt werden kann. Natürlich können Sie auch komplett ihre eigene Firmware schreiben.

5$ Arduino WiFi Module!? ESP8266 mini Tutorial/Review
https://www.youtube.com/watch?v=9QZkCQSHnko

Cheap and Easy WiFi (IoT) Tutorial Part 1 - ESP8266 Setup/Intro
https://www.youtube.com/watch?v=qU76yWHeQuw

GPIO0, GPIO2 und andere

Der ESP8266 hat einige digitale Ein/Ausgänge aber nicht alles sind frei nutzbar. Einige Pins werden von Board-Entwicklern gerne genutzt, um Speicher und Flash anzubinden. Andere erfüllen beim Einschalten eine besondere Funktion oder dienen als serielle Schnittstellen. Die Pins werden intern durch den ESP8266 bei Nutzung als Ausgang auch niederohmig auf High oder Low geschaltet. man sollte also genau wissen, wie man die Pins beschaltet, damit der ESP8266 nicht durchbrennt oder der Energiebedarf zu hoch ist.

GPIO Bedeutung

0

Muss beim Einschalten auf HIGH liegen. Wenn dieser Pin auf Low beim Einschalten liegt, dann startet der ESP8266 in einen Programmiermode. Siehe auch Pin 2 und 15.

Der PIN kann schon als Ausgang oder Eingang genutzt werden, solange er eben zuverlässig auf HIGH beim Einschalten ist. Oft ist auch ein Taster im Modul verbaut, um diesen Pin auf "Low" zu ziehen. Damit eignet er sich im Betrieb auch als Eingang. Beim Ausgang muss man aufpassen, dass der Taster dann keinen Schaden anrichtet.

1

TxD0- Serieller Ausgang. Kann als Schaltausgang genutzt werden. Allerdings können Sie dann z.B. nicht mehr per serieller Schnittstelle Debug-Ausgaben senden und beim Programmieren können die Daten missverstanden werden. Auf Boards mit USB-Anschluss ist das meist ein USB/Seriell-Wandler angeschlossen, so dass der Port auch belegt ist

2

Muss beim Einschalten auf HIGH liegen. Wenn dieser Pin auf Low beim Einschalten liegt, dann startet der ESP8266 in einen Programmiermode. Siehe auch Pin 0 und 15

Der PIN kann schon als Ausgang oder Eingang genutzt werden, solange er eben zuverlässig auf HIGH beim Einschalten ist.

3

RxD0- Serieller Eingang. Jede Beschaltung muss temporär abgeklemmt werden, wenn Sie den Chip programmieren wollen. Auf Boards mit USB-Anschluss ist das meist ein USB/Seriell-Wandler angeschlossen, so dass der Port auch belegt ist

4

SDA - häufig für I2C-Anbindungen genutzt aber ansonsten nutzbar

5

SCL - häufig für I2C-Anbindungen genutzt

6-8

Diese Pins werden zur Anbindung des internen Flash-Speicher genutzt. Es macht eigentlich keinen Sinn diese Pins nach aussen zu führen.

9-10

Angeblich nicht einfach nutzbar ohne Hardwareanpassungen

11

 

12-14

in der Regel nutzbar

15

Sollte über einen Widerstand auf GND liegen und steuert den Programmiermode. Siehe auch Pin 0 und 2

16

Häufig mit einer LED beschaltet. kann als Ausgang verwendet werden. Ist zugleich Time-Ausgang nud wird oft mit RESET verbunden, um den ESP aus dem "Deep Sleep" zu wecken.

Schade ist, dass die ESP01-Module mit den 8 Pins natürlich nur wenige Ports nach außen führen, die auch alle quasi "belegt" sind.

Andere ähnliche Module

Der ESP8266 ist nicht der einzige Chip mit WiFi und ein paar GPIO-Ports.

Weitere Links