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 |
80 MHz |
700 MHz |
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 |
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
- ESP8266
http://espressif.com/en/products/esp8266/
https://en.wikipedia.org/wiki/ESP8266 - PIC
http://www.mikrocontroller.net/articles/PIC - PIC Übersicht
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=211&mid=10&lang=en&pageId=74 - Übersicht von Arduino Boards
https://en.wikipedia.org/wiki/List_of_Arduino_boards_and_compatible_systems -
RasPi
https://de.wikipedia.org/wiki/Raspberry_Pi -
Mikrocontroller ESP8266 für
Automationsaufgaben im IoT
http://www.raspberry-pi-geek.de/Magazin/2016/02/Mikrocontroller-ESP8266-fuer-Automationsaufgaben-im-IoT
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 |
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.
- ExpressIF: Hersteller des
8266
http://espressif.com/ - Tutorial für Beginners
http://bbs.espressif.com/viewtopic.php?f=67&t=821 - Bulletin Board des
Hersteller ExpressIFf
http://bbs.espressif.com/index.php - Liste aller veröffentlichen
Dokumente
http://bbs.espressif.com/viewtopic.php?f=67&t=225 - Programming Guides
http://bbs.espressif.com/viewtopic.php?f=67&t=823
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.
- ESP8266: Reflash Dance!
http://www.xess.com/blog/esp8266-reflash/ - Flash ESP8266 Wi-Fi Module
Firmware
http://dominicm.com/flash-esp8266-wi-fi-module-firmware/ -
ESP8266 Firmware Update and recovery
https://primalcortex.wordpress.com/2014/12/23/esp8266-firmware-update-and-recovery/
Die AT-Kommandos sind z.B.: hier dokumentiert:
- Room 15
https://room-15.GitHub.io/blog/2015/03/26/esp8266-at-command-reference/ - pridopia
http://www.pridopia.co.uk/pi-doc/ESP8266ATCommandsSet.pdf
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.
- Flashing the NodeMCU
firmware on the ESP8266
(Windows) - Guide
http://www.whatimade.today/loading-the-NodeMCU-firmware-on-the-esp8266-windows-guide/ - Flash Firmware
https://learn.adafruit.com/building-and-running-micropython-on-the-esp8266/flash-firmware - How to directly program an inexpensive
ESP8266 WiFi Module
http://hackaday.com/2015/03/18/how-to-directly-program-an-inexpensive-esp8266-wifi-module/ - [Latest Release] ESP8266 SDK
http://bbs.espressif.com/viewtopic.php?f=46&t=850
Das "Non-OS SDK" enthält auch die aktuellste Firmware - Flash ESP8266 Wi-Fi Module
Firmware
http://dominicm.com/flash-esp8266-wi-fi-module-firmware/ - Updating the firmware of the
ESP8266
https://hackaday.io/project/3250-cypress-psoc-4-esp8266-ws2812-rgb-xmas-lights/log/10830-updating-the-firmware-of-the-esp8266 - Esp8266 firmware Update
http://www.instructables.com/id/Intro-Esp-8266-firmware-update/ - ESP8266
http://www.electrodragon.com/w/ESP8266 - ESP8266 Memory Map
http://esp8266-re.foogod.com/wiki/Memory_Map#bootrom - Integrated Development
Environment (IDE) für ESP8266
developers
http://esp8266.ru/esplorer/
https://GitHub.com/4refr0nt/ESPlorer - Update the Firmware in Your
ESP8266 Wi-Fi Module
http://www.allaboutcircuits.com/projects/update-the-firmware-in-your-esp8266-wi-fi-module/
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.
- ESP8266 Using GPIO0/GPIO2/GPIO15 Pins
https://www.instructables.com/id/ESP8266-Using-GPIO0-GPIO2-as-inputs/
https://www.forward.com.au/pfod/ESP8266/GPIOpins/index.html - ESP8266 und ESP8285 Module Anleitung
http://stefanfrings.de/esp8266/
Sehr gute Ausführungen zum ESP8266 und den Besonderheiten.
Andere ähnliche Module
Der ESP8266 ist nicht der einzige Chip mit WiFi und ein paar GPIO-Ports.
- RN171
http://www.microchip.com/wwwproducts/en/RN171
https://www.youtube.com/watch?v=58lUnd2oZoM - Particle Photon (ca 20 US$)
https://www.hackster.io/particle/products/photon
https://www.particle.io/prototype
ARM Cortex M3 basierend mit WiFi on Board und USB Anschluss. Es gibt sogar Boards mit GSM. - Weitere werden zu gegebener Zeit addiert
Weitere Links
- Esp8266 WIFI Community
https://www.facebook.com/esp8266wifi - ESP8266 Memory Usage
http://tech.scargill.net/esp8266-memory-usage/ - ESP8266 WiFi module
http://tomeko.net/other/ESP8266/ - Programming ESP8266 with GCC
http://tomeko.net/other/ESP8266/native.php - ESP8266 Web Server Tutorial
http://randomnerdtutorials.com/esp8266-web-server/ - Getting Started with ESP8266
http://www.esp8266.com/wiki/doku.php?id=getting-started-with-the-esp8266 - ESP8266 Is Alive!
http://www.xess.com/blog/esp8266-is-alive/ - Espressif/ESP8266_RTOS_SDK
https://GitHub.com/espressif/ESP8266_RTOS_SDK - BBS Forum von ExpressIF
http://bbs.espressif.com/index.php - Annex WI-FI RDS is a
powerful scripts interpreter for
the popular ESP8266 WI-FI module.
https://sites.google.com/site/annexwifi/home - 32-Bit-Microcontroller
ESP8266 selbst programmieren
https://www.heise.de/ratgeber/32-Bit-Microcontroller-ESP8266-selbst-programmieren-4883608.html