ESP8266

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
ESP8266, Funkmodul

Das ESP8266 von dem Hersteller Espressif ist ein programmierbarer WLAN-SoC mit UART- und SPI-Schnittstelle. WLAN-Funkmodule mit ESP8266 sind ab 3€ verfügbar. Die UART-Schnitttstelle ermöglicht eine einfache Integration in Mikrocontrollerprojekte.

Spezifikation

Laut Hersteller [1]. :

  • 802.11 b/g/n
  • Wi-Fi Direct (P2P), soft-AP
  • Integrated TCP/IP protocol stack
  • Integrated TR switch, balun, LNA, power amplifier and matching network
  • Integrated PLLs, regulators, DCXO and power management units
  • +19.5dBm output power in 802.11b mode
  • Power down leakage current of <20µA (bei 2,5V, Flash-Chip nicht mit gerechnet)
  • Integrated low power 32-bit CPU could be used as application processor
  • SDIO 1.1/2.0, SPI, UART
  • STBC, 1×1 MIMO, 2×1 MIMO
  • A-MPDU & A-MSDU aggregation & 0.4ms guard interval
  • Wake up and transmit packets in < 2ms
  • Standby power consumption of < 1.0mW (DTIM3)
  • VCC: 2,5...3,6V (Achtung: Eingänge sind NICHT 5V TOLERANT!)

Weiterhin:

  • GPIOs, ADC

Datendurchsatz/Performanz

Beitrag im Forum mit Tests: TCP: bis zu 7 MBit/s
Beitrag Espressif-Forum: UART loopback: 4.5 Mbps
Beitrag Espressif-Forum: 300kbps senden und empfangen im TCP passhrough Modus
200-300k Byte/s Senden und Empfangen via TCP und UDP mit C Programm und SDK 1.5.4 (Bei stefanus zuhause)

Bei Verwendung der AT-Firmware (v1.1.0.0 aus SDK 1.5.4) mit einem seriell angeschlossenen Mikrocontroller dauert die Antwort auf ein kurzes Kommando (vom PC an den µC und zurück) typischerweise 100-200ms.

Power-/Sleep-Modes

Der Stromverbrauch des ESP8266 ist abhängig von vielen Faktoren, er lässt sich aber durch geschickte Programmierung durchaus deutlich senken.
So ist es nicht notwendig, dass das WIFI-Modem oder der Mikrocontroller ständig läuft, um z.B. eine WLAN-Türklingel zu realisieren. Im "Deep-Sleep" würde der ESP8266 dann nur wenige µA verbrauchen, bis er über einen Timer zurückgesetzt wird und die Meldung absetzt.
Stefanus hat 25µA gemessen: [1]

Detailierte Übersicht der verschieden Modi und deren Stromverbrauch von Espressif (nicht mehr aktuell!)

WLAN-Module mit ESP8266

Es existieren ca. 11 Varianten von chinesischen Herstellern. Beispielsweise mit PCB- oder Keramik-Antenne oder mit u.fl.

  • Die Firmware aus SDK 0.9.1 unterstützt bis zu vier gleichzeitige TCP- oder UDP-Verbindungen.
  • Die Firmware aus SDK 1.5.4 unterstützt bis zu fünf gleichzeitige TCP- oder UDP-Verbindungen.

Sie kann sich in vorhandene WLAN-Netze einbuchen, aber auch selbst Access-Point mit DHCP-Server sein. Der Access-Point ist zu Android kompatibel (mit 4.1.2 getestet).
Die Firmware enthält jedoch keinen Router. Mehrere Computer, die mit dem Modul als Access-Point verbunden sind, können keine Verbindung zueinander aufbauen. Das Feature nennt sich AP-Isolation.

  1. Produktbeschreibung: [[2]]

Pinbelegung einiger ESP8266-Module

ESP8266-01

Quelle [2].

ESP8266-07

Achtung, beim ESP8266-07-Modul sind einige mit vertauschten Beschriftungen von GPIO4 und GPIO5 unterwegs!!.


ESP8266-12E

Das ESP12E-Modul gehört vermutlich wegen der vielen Ports zu den beliebtesten Modulen.

Für dieses Modul gibt es auch ein spezielles Adapter-Projekt.

Adapter-ESP12E.jpeg

Möglichkeiten der Nutzung und Programmierung

Benutzung einer Firmware

Verschiedene Projekte betreiben die Entwicklung einer Firmware. Man kann die Firmware "einfach nur" flashen und benutzen oder sich auch aktiv an der Entwicklung beteiligen. Es gibt unter anderem folgende Projekte:

  • AT-Befehle: Firmware, mit welcher das Modul über UART angesprochen wird.
  • Micropython: Firmware, die das Ablaufen von Python-Scripts ermöglicht (Tutorial)
  • NodeMCU: Firmware, die das Ablaufen von Lua-Scripts ermöglicht (Github)
  • smartJS: Firmware, die das Ausführen von Javascript erlaubt (Github)
  • Arduino core for ESP8266 WiFi chip: Programmierumgebung & Firmware, die das Ausführen von C-Programmen ermöglicht, im Stil der bekannten Arduino-Plattform. Github - ink. Anleitung
  • ESP8266 Basic: Firmware, die das Ausführen von Basic-Programmen und das Editieren über WLAN erlaubt [3]
  • Sming: Einfach zu nutzendes Framework, ähnlich wie Arduino, allerdings mit einem einfachen Makefile pro Projekt und mit Eclipse-Projekten.(Github)
  • ESP-Lisp (BETA): A small fast lisp interpeter for a ESP8266 (Github)
  • ESP8266Forth: Forth for the ESP8266 NodeMCU Amica (Github)
  • Forthright: Forth for ESP-8266 (Github)
  • Punyforth: FORTH inspired programming language for the ESP8266 (Github)
  • ESP-LINK: Wifi-Serial Bridge w/REST&MQTT(Github)
  • ESPEasy: turn the ESP module into an easy multifunction sensor device for Home Automation solutions like FHEM. Configuration of the ESP Easy is entirely web based ([4])
Erstellen (Kompilieren) einer Firmware

Für die Erstellung einer individuellen Firmware gibt es zwei Möglichkeiten:

  • Software Development Kit (SDK): Erstellen einer Firmware mit einer GCC-Toolchain
  • Arduino IDE: Erstellen einer Firmware mit einer Arduino-IDE

Projekte, die eine Firmware für das ESP8266 entwickeln (siehe vorheriger Abschnitt), benutzen eine dieser beiden Möglichkeiten.

Firmware flashen/updaten

Typischerweise wird eine kompilierte Firmware per UART-Bootloader des ESP8266-SoC auf einen Flash-Chip eines ESP8266-Moduls geladen. Von dort startet der ESP8266-SoC anschließend die Firmware.

Flash-Download-Tool vom Hersteller
Python-Tool zum Flashen (von Fredrik Ahlberg)
Extension zum Tool von Fredrik Ahlberg
Tool zum Flashen (von Christian Klippel)
Anleitung, extern
Anleitung, Forum

Der Hersteller veröffentlicht regelmäßig Firmwareupdates als Bestandteil des esp_iot_sdk. Die Firmware-Dateien befinden sich im Verzeichnis bin. Das Update wird beispielsweise für Firmware 0.9.5 folgendermaßen durchgeführt:

python esptool.py --baud 9600 --port com6 write_flash 0x00000 boot_v1.2.bin 0x01000 at/user1.512.new.bin 0x3e000 blank.bin 0x7e000 blank.bin

Abhängig von der Flashgröße muss man die Firmware ab Version 1.0.1 selbst compilieren. Siehe Diskussion hier und hier.

Nutzung ohne Firmware

Es ist wohl sogar möglich den ESP8266 als SDIO-WLAN-Modul an einem Raspberry Pi zu betreiben. Verwendet wird dabei der Linuxtreiber des ESP8089. Der ESP8266 bootet dann nicht die Firmware aus dem Flash sondern über SDIO.

https://hackaday.io/project/8678-rpi-wifi

AT-Befehle für eine Firmware auf Basis des SDK-Beispiels "AT"

Einstellen des Moduls als AP

Da wir nicht wissen, in welchem Modus sich das Modul gerade befindet, fragen wir diesen mit dem Befehl AT+CWMODE? ab. Das Modul antwortet mit

   AT+CWMODE?<\r><\r><\n>+CWMODE:1<\r><\n>
   <\r><\n>
   OK<\r><\n>

In diesem Fall ist das Modul aktuell im Modus 1 (Station) eingestellt. Also ändern wir den Modus auf 2 (AP) mit dem Befehl AT+CWMODE=2. Nach diesem Befehl ist ein Reset des Moduls erforderlich, damit die Änderung sichtbar wird. Mit dem Befehl AT+RST führen wir diesen durch. Das Modul startet neu und die Stromaufnahme steigt auf ca 80 mA. Das Modul ist jetzt als WLAN-AP im Wireless-LAN sichtbar.

Jetzt müssen wir noch einstellen, dass wir mehrere Verbindungen gleichzeitig haben wollen, sowie den TCP-Server starten und einstellen. Mit dem Befehl AT+CIPMUX=1 sagen wir dem Modul, dass wir mehrere Verbindungen haben wollen. Und mit dem Befehl AT+CIPSERVER=1,2526 starten wir den TCP-Server und lassen ihn auf Port 2526 laufen. Sobald sich ein Client verbindet, sendet das Modul 'Link' + LF + CR. Beim Trennen einer Verbindung vom Client kommt 'Unlink' + LF + CR.

Ab hier können wir uns über einen TCP-Socket auf Port 2526 mit dem Modul verbinden und Daten austauschen. Empfangene Daten werden folgendermaßen angezeigt. Gesendet wurde "Hallo Leute" + LF + CR.

    <\r><\n>
    +IPD,0,11:Hallo Leute<\r><\n>
    OK<\r><\n>

+IPD kommt immer, 0 ist die erste Verbindung. Wenn 2 Geräte gleichzeitig eine Verbindung aufgebaut haben, steht dort eine 1. 11 Zeichen wurden empfangen, dann kommen die Daten.

Zum Senden von Daten vom Modul zum Client geht man folgenderweise vor. Erstmal sagen wir dem Modul, wieviele Daten wir an welche Verbindung schicken wollen. Mit dem Befehl AT+CIPSEND=0,5 z. B. sagen wir dem Modul wir möchten 5 Bytes an Verbindung 0 senden. Nach diesem Befehl werden die nächsten 5 Zeichen direkt an die Verbindung weitergereicht. Sollte keine aktive Verbindung bestehen, sendet das Modul

    AT+CIPSEND=0,5<\r><\r><\n>link is not<\r><\n>

ansonsten kommt

    <\r><\n> >

und man kann Daten senden. Nach dem Absenden der Daten 'Leute' + LF + CR sendet das Modul

   Leute<\r><\r><\n>busy<\r><\n>
   <\r><\n>
   busy<\r><\n>
   <\r><\n>
   SEND OK<\r><\n>

Einstellen des Moduls als Station

Software Development Kit (SDK)

Mit dem SDK können eigene Applikationen programmiert und die im SDK vorhandenen Beispiele "AT" und "IoT" verändert werden. Das SDK wird vom Hersteller zur Verfügung gestellt (Stand 25.10.2014). Passend zum SDK existiert eine virtuelle Maschine mit eingerichtetem gcc zum Kompilieren. Insbesondere der nun verfügbare gcc basiert auf einer Community-Entwicklung.

SDK0.9.2 + virtuelle Linuxmaschine mit eingerichtetem gcc

Alternativlink für die virtuelle Maschine + Anleitung/HOWTO für das Setup sowie für das Kompilieren

Weiterhin gibt es eine Community Version GitHub die jedoch seit zwei Jahren nicht weiterentwickelt wird.

Anmerkung

Mit dem SDK wird der Mikrocontroller programmiert, der sich direkt auf dem ESP8266-SoC-Chip befindet. Dies ist nicht zu verwechseln mit Programmieranleitungen zur UART-Ansteuerung des ESP8266-SoC (meist mit AT-Firmware) mit einem anderen Mikrocontroller.

Checkliste bei Problemen mit dem Modul/Compiler/SDK

Bitte berücksichtige bei der Frage nach Hilfestellung zu Deinem Problem die folgende Checkliste.

Bei Problemen mit der AT-Firmware/UART-Ansteuerung mit Mikrocontroller

  1. Was nutzt Du für die Stromversorgung?
    (Ganz knapp benennen, so dass Rückschlüsse auf Spannung und Stromstärke möglich sind)
  2. Welche Firmware-Version verwendest Du und von woher hast Du sie?
  3. Welchen Mikrocontroller verwendest Du?
  4. Welche Baudrate verwendest Du?
  5. "Sieht" das Modul den AP, "sieht" der PC das Modul?
  6. Funktioniert ein Connect?
  7. Welche AT-Befehlssequenz verwendest Du und was antwortet das Modul?

Bei Problemen mit dem SDK/Compiler

  1. Benutzt Du die neuste, offizielle VM?
    (Diese ist ausgelegt für das neueste SDK)
  2. Benutzt Du das neueste, offizielle SDK? Welche Version benutzt Du?
    (Es werden regelmäßig Bugfixes und Erweiterungen eingepflegt)
  3. Kannst Du die SDK-Beispiele (IoT,AT) entsprechend der offiziellen Anleitung kompilieren, flashen und läuft es?


Links

ESP8266-Eintrag auf en.wikipedia.org
ESP8266-Community-Forum
ESP8266 Github mit Wiki und Source-Code-Beispielen
Hackaday-Posts zu ESP8266
ESP8266-Seite des Herstellers
ESP8266-Forum des Herstellers
ESP8266 und NodeMCU - Tutorial mit Farbdisplay und Temperatursensor

Beiträge im mikrocontroller.net-Forum

Sammelbestellungen im mikrocontroller.net-Forum

Universelle I2C-Steuerung mittels WLAN-TCP/IP und Webinterface mit ESP8266
Viele Projekte und Informationen zum ESP8266
Projekt I/O-Schnittstellenmodul mit WLAN (Stefan Frings)
Dokumentation zum ESP8266 mit Arduino Code-Beispielen (Stefan Frings)

Dokumente

Kolban’s book on the ESP8266 Sehr empfehlenswert!
Anleitung/HOWTO für das Setup der virtuellen Maschine (SDK) sowie für das Kompilieren
Übersetztes Datenblatt
AT Instructions Set (English) und Anleitung zum Betrieb an einem Arduino (inkl. Code)
Beschreibung der AT-Kommandos mit Beispielen
Espressif AT Instruction Set(Chinese)
ESP8266 Specifications(Chinese)
NodeMCU-Documentation
Building an IoT Node for less than 15$ (Paper, Kindle via Amazon)

Daten

SDK0.9.2 + virtuelle Linux-Maschine mit eingerichtetem gcc
Alternativlink für die virtuelle Maschine
Dateien (Xplorer+SDK+PDF+etc.)
Config-Tool

Bezugsquellen

Offizieller Espressif-Vertriebskanal (Sample Purchase)
aliexpress.com ~ 2€
banggood.com ~ 3.50€
Ebay ab 3€ inkl. Versand, Einzelstückpreis: ESP-01/02/03/04/05
(Suchbegriff: ESP8266, Option Artikelstandort: "Weltweit")
(10 Stück ab 27 EUR inkl. Versand; Suchbegriff: 10pcs ESP8266)
ab 3.20€ inkl. Versand, Einzelstückpreis: ESP-07/08/09/11
electrodragon.com ~ 3.50€ (zzgl. Versand)
IT-WNS.de (ESP-01/02/03/06/07/12E) je 3.99€ (zzgl. Versand)
seeedstudio.com ~ 5.50€
In-Circuit.de ESP-ADC-DIL-Modul mit ESP8266EX 9.90€ Einzelpreis
watterott.com ab ~ 4€ (zzgl. Versand)
www.ramser-elektro.at ESP12F mit 16mBit Flash ~ 4.90€ (ab 35€ Versandkostenfrei)
www.pollin.de ESP8266 Wi-Fi Modul ~3,95€ (Versandkosten innerhalb Deutschlands 4,95 €)

Anderes

Einzelnachweise

  1. Herstellerseite - unter Details Abgerufen am 26. August 2014.
  2. Seller Information Abgerufen am 26. August 2014.

--von axhieb