From DefCon Projects
Jump to: navigation, search

Der ESP8266 ist ein kleiner Chip (QFN32) von der chinesischen Firma Espressif der es ermöglicht die Daten die er an seiner seriellen Schnittstelle empfängt über eine WLAN-Verbindung bereitzustellen. Dabei kann der Chip zum einem als Client als auch als Server fungieren. Der Chip ist vergleichsweise neu und bietet eine gute Grundlage für eigene Projekte die eine Integration in ein WLAN benötigen. Der ESP8266 ist aktuell auf drei "Breakout Boards" (ESP-01, ESP-02 und ESP-03) anzutreffen. Die Unterscheidungsmerkmale der Breakoutboards sind nachfolgend unter Varianten aufgeführt.

Hardware

Der ESP8266-Chip benötigt eine Versorgungsspannung von +3,3V. Die Eingänge sind nicht 5V tolerant und dürfen ausschließlich mit einer Spannung von +3,3V beaufschlagt werden. Der ESP8266 benötigt eine Spannungsversorgung von +3,3V die mindestens 300mA liefern kann, sollte es Probleme geben bei der Kommunikation sollte auf jedenfall zuerst die Spannungsversorgung überpüft werden.

Eckdaten

Nachfolgend einige Eckdaten die dem englischsprachigen Datenblatt des ESP8266 entnommen wurden.

  • 802.11 b/g/n protocol
  • Wi-Fi Direct (P2P), soft-AP
  • Integrated TCP/IP protocol stack
  • Integrated TR switch, balun, LNA, power amplifier and matching network
  • Integrated PLL, regulators, and power management units
  • +19.5dBm output power in 802.11b mode
  • Integrated temperature sensor
  • Supports antenna diversity
  • Power down leakage current of < 10uA
  • Integrated low power 32-bit CPU could be used as application processor
  • SDIO 2.0, SPI, UART
  • STBC, 1×1 MIMO, 2×1 MIMO
  • A-MPDU & A-MSDU aggregation & 0.4µs guard interval
  • Wake up and transmit packets in < 2ms
  • Standby power consumption of < 1.0mW (DTIM3)

Varianten

Der Chip ist bei allen Varianten der Breakout Boards der selbe, einzig die Anzahl der herausgeführten Signale, die Abmessungen und die Antenne unterscheiden sich zwischen den Varianten.

ESP-01

  • Antenne auf Platine integriert
  • 8 Pin Stiftleiste (UART, GPIO0, GPIO2, RST, PD)
  • Baudrate: 115200 (8N1)
  • LEDs: Rot = Power, Blau = Aktivität
  • Firmware Update möglich
  • Größe: 14,5 x 24,8mm

ESP-02

  • U-FL Anschluss für externe Antenne
  • 8 Pin Lötanschluss (UART, GPIO0, GPIO2, RST, PD)
  • Baudrate: 115200 (8N1)
  • LEDs: Rot = Power, Blau = Aktivität
  • Firmware Update möglich
  • Größe: 14,5 x 14,7mm

ESP-03

  • Integrierte Keramik Antenne auf der Platine
  • Antennensignal auf Pin (ANT)
  • 14 Pin Lötanschluss (UART, GPIO0, GPIO2, GPIO12-GPIO15, GPIO18, ANT, RST, PD)
  • Baudrate: 115200 (8N1)
  • LEDs: Rot = Power, Blau = Aktivität
  • Firmware Update möglich
  • Größe: 17,4 x 12,2mm

Pinbelegung

Pin-Nr. Name Bemerkung
1 GND Masse
2 TXD Daten senden (max. 3,3V)
3 GPIO2 Ein- / Ausgangspin
4 PD Abschalten (low = aktiv)
5 GPIO0 Ein- / Ausgangspin
6 RST Reset (low = aktiv)
7 RXD Daten empfangen (max. 3,3V)
8 VCC Versorgungsspannung 3,3V (max. 3,6V)

Software

Befehle

Werden Befehle an das ESP8266 gesendet müssen diese zwingend mit einem <CR><LF> (\r\n) abgeschlossen werden um von dem ESP8266 erkannt zu werden.

Allgemeine Befehle

Befehle die Informationen über das ESP8266 bereitstellen und zum setzen von globalen Einstellungen.

Befehl Beschreibung Parameter Beispiel
AT Test-Befehl, gibt immer "OK" zurück wenn Verbindung besteht AT
AT+RST Führ Reset durch AT+RST
AT+GMR Gibt Firmware-Informationen aus AT+GMR
AT+CIOBAUD=<baud> Ändern der Baudrate <baud> = 9600,
19200,
38400,
57600,
74880,
115200,
230400,
460800,
921600
AT+CIOBAUD=9600
AT+CSYSWDTENABLE Watchdog starten AT+CSYSWDTENABLE
AT+CSYSWDTDISABLE Watchdog beenden AT+CSYSWDTDISABLE
AT+<x>? Gibt Wert aus auf dem <x> gesetzet ist AT+CIPMUX?
AT+<x>=<..> Setze <x> auf Wert <..> AT+CWMODE=3
AT+<x>=? Gibt Hilfe von <x> aus (Parameter, Wertebereich, ...) AT+CWJAP=?

Allgemeine Wifi Befehle

Befehle zum setzen von allgemeinen Einstellungen für Verbindungen des ESP8266.

Befehl Beschreibung Parameter Beispiel
AT+CWMODE=<mode> Setzt Wifi-Betriebsmodus 1 = Client
2 = AP
3 = Client + AP
AT+CWMODE=3
AT+CIPMUX=<mode> Einstellungen für mehrere Verbindungen 0 = Einzelverbindung
1 = mehrere Verbinungen
AT+CIPMUX=1
AT+CIPMODE=<mode> Einstellen des Datenmodus 0 = Transparent
1 = Datenmodus
AT+CIPMODE=1

Client Wifi Befehle

Befehle bei der das ESP8266 als Client fungiert und eine Verbindung mit einem bestehenden WLAN-Netzwerk eingeht.

Befehl Beschreibung Parameter Beispiel
AT+CWJAP="<ssid>","<pass>" Verbinden mit Wifi-Netzwerk (WLAN-Router) <ssid> = SSID
<pass> = Password
AT+CWJAP="POLLOS","HEISENBERG"
AT+CWLAP Ausgabe der zurzeit verfügbaren WLAN-Netzwerke AT+CWLAP
AT+CWQAP Trennt verbindung zum WLAN-Netzwerk AT+CWQAP
AT+CIFSR Ausgabe der eigenen IP-Adresse AT+CIFSR

AP Wifi Befehle

Einrichten eines eigenen WLAN-Netzwerk mit dem ESP8266, das ESP8266 fungiert dann als Server.

Befehl Beschreibung Parameter Beispiel
AT+CWSAP="<ssid>","<pass>"[,<chan>,<enc>] Einstellungen für das WLAN-Netzwerk <ssid> = SSID
<pass> = Password
<chan> = Kanal 1...14
<enc> = Verschlüsselung
(0 = Offen,
1 = WEP,
2 = WPA_PSK,
3 = WPA2_PSK,
4 = WPA_WPA2_PSK)
AT+CWSAP="POLLOS","HEISENBERG",1,3
AT+CWLAP Ausgabe der zurzeit verfügbaren WLAN-Netzwerke AT+CWLAP
AT+CWLIF Zeigt verbundene Client-PCs an AT+CWLIF

Client IP Befehle

Befehle mit denen ein Datenaustausch zwischen dem Client (ESP8266) und einem Server, der einen Datenendpunkt darstellt, über das TCP oder UDP Protokoll eingegangen werden kann.

Befehl Beschreibung Parameter Beispiel
AT+CIPSTATUS Ausgabe der Verbundenen IP (TCP/UDP, Id, Port) AT+CIPSTATUS
AT+CIPSTART="<type>","<address>",<port> Aufbauen einer Einzelverbindung
(AT+CIPMUX=0)
<type> = TCP oder UDP
<address> = IP-Adresse
<port> = Port
AT+CIPSTART=“TCP”,”192.168.0.1”,666
AT+CIPSEND=<len> Senden von Daten bei Einzelverbindung <len> = Länge der Daten (byte) AT+CIPSEND=5
>Hallo
AT+CIPCLOSE Schließen einer bestehenden TCP/UDP-Verbindung AT+CIPCLOSE
AT+CIPSTART="<type>","<address>",<port> Aufbauen von mehreren Verbindungen
(AT+CIPMUX=1)
<type> = TCP oder UDP
<address> = IP-Adresse
<port> = Port
AT+CIPSTART=“TCP”,”192.168.0.1”,666
AT+CIPSEND=<id>,<len> Senden von Daten bei mehreren Verbindungen <id> = 0...4
<len> = Länge der Daten (byte)
AT+CIPSEND=0,5
>Hallo
AT+CIPCLOSE=<id> Schließen einer definierten bestehenden TCP/UDP-Verbindung AT+CIPCLOSE=0

Server IP Befehle

ESP8266 agiert als Server und empfingt Daten auf einem definierten Port.

Befehl Beschreibung Parameter Beispiel
AT+CIPSERVER=1[,<port>] Startet einen TCP-Server <port> = TCP-Port AT+CIPSERVER=1,666
AT+CIPSERVER=0 Beendet den TCP-Server AT+CIPSERVER=0
AT+CIPSTO=<timeout> Setzt Timeout für TCP-Server Verbindungen <timeout> = 0...28800s AT+CWLIF

Daten empfangen

Werden Daten über eine bestehende Verbindung mit dem ESP8266 empfangen, gibt es diese über die serielle Schnittstelle aus.

Befehl Beschreibung Inhalt Beispiel
+IPD,<len>: Empfange Daten bei Einzelverbindung (AT+CIPMUX=0) <len> = Länge des empfangenen Datenpakets
= Empfangene Daten als ASCII
+IPD,2:ON
+IPD,<id>,<len>: Empfange Daten bei mehreren Verbindungen (AT+CIPMUX=1) <id> = ID der Verbindung 0..4
<len> = Länge des empfangenen Datenpakets
= Empfangene Daten als ASCII
+IPD,0,5:HALLO

Firmware

Den Quellcode der Firmware des ESP8266(SDK) erhält man von dem Hersteller Esprssif, nachdem man eine Geheimhaltungserklärung unterschreiben hat.

Update

Um das ESP8266 auf eine neue Firmware zu updaten muss wie folgt vorgegangen werden:

  1. Zunächst prüfen ob eine serielle Verbindung mit dem ESP8266 funktioniert (Application Mode), dazu ESP8266 mit Spannung versorgen und die Pins mit folgenden Pegeln belegen
    RST an VCC (+3,3V)
    PD an VCC (+3,3V)
    GPIO0 an VCC (+3,3V)
    GPIO2 an VCC (+3,3V)
  2. Per serieller Verbindung "AT<CR><LF>" an das ESP8266 senden, dieses muss mit einem "OK<CR><LF>" antworten. Sollte das nicht funktionieren die Verbindung überprüfen (RXD und TXD müssen gekreuzt werden!! Baudrate: 115200 (alte Firmware: 57600) 8N1)
  3. Aktuelle Versionsstände der auf dem ESP8266 befindlichen Firmware können über den Befehl "AT+GMR<CR><LF>" ermittelt werden. Das ESP8266 anwortet dann z.B. wie folgt: "00160901<CR><LF>". Dabei geben die ersten vier Zahlen den Verionsstand des SDK wieder (00.16) und die letzen vier Zahlen den Stand der AT-Befehle (0.9.0.1).
  4. Zum flashen einer neuen Firmware den ESP8266 in den Flash Mode versetzen, durch setzen der Pegel auf:
    RST an VCC (+3,3V)
    PD an VCC (+3,3V)
    GPIO0 an GND (0V)
    GPIO2 an VCC (+3,3V)
  5. Die neue Firmware kann mit dem Tool XTCOM UTIL[1] auf das ESP8266 geladen werden. Dazu das Programm "XTCOM_UTIL.exe" starten, über Tools-->Config Device den COM-Port und die Baudrate (115200) auswählen und auf Connect klicken.
  6. Über API Test-->Flash Image Download das betreffende File auswählen (flash.bin bzw. rom.bin) und Adresse (flash.bin = 0x0000, rom.bin = 0x4000) an die das File geschreiben werden soll. Bei der aktuelllen AT Firmware (ver. 0.9.2.2[2]) muss nur an die Adresse 0x0000 geschrieben werden! Die Baudrate liegt bei der aktuellen Version standardmäßig auf 9600. Dann auf "Download" klicken.


Bei einer neueren Firmware (SDK:00.17 AT:0.9.0.1) gibt es die Möglichkeit ein Update über das Internet durchzuführen. Dazu muss wie folgt vorgegangen werden:

  1. Setzen des ESP8266 in den Client oder Client+AP Mode
    AT+CWMODE=3<CR><LF>
  2. Durchführen eines Neustart
    AT+RST<CR><LF>
  3. Verbindung zu einem bestehenden WLAN-Netzwerk aufbauen um eine Verbindung mit dem INternet zu ermöglichen
    AT+CWJAP="ssid","yourpasswd"<CR><LF>
  4. Überprüfen ob das ESP8266 erfolgreich eine IP-Adresse von dem WLAN-Router beziehen konnte (DHCP)
    AT+CIFSR<CR><LF>
  5. Updateprozess beginnen
    AT+CIUPDATE<CR><LF>

ESP8266 gibt bei erfolgreichen Update die folgenden Meldungen aus:

+CIPUPDATE:1 found server
+CIPUPDATE:2 connect server
+CIPUPDATE:3 got edition
+CIPUPDATE:4 start start
OK

Sollte es zu einem Fehler kommen wird der Updateprozess beendet und ERROR ausgegeben.

Ein-/Ausgabe

Reset

AT+RST<\r><\r><\n>
<\r><\n>
OK<\r><\n>
<\r><\n>
 ets Jan  8 2013,rst cause:4, boot mode:(3,0)<\r><\n>
<\r><\n>
wdt reset<\r><\n>
load 0x40100000, len 24444, room 16 <\r><\n>
tail 12<\r><\n>
chksum 0xe0<\r><\n>
ho 0 tail 12 room 4<\r><\n>
load 0x3ffe8000, len 3168, room 12 <\r><\n>
tail 4<\r><\n>
chksum 0x93<\r><\n>
load 0x3ffe8c60, len 4956, room 4 <\r><\n>
tail 8<\r><\n>
chksum 0xbd<\r><\n>
csum 0xbd<\r><\n>
<\r><\n>
ready<\r><\n>

Fehlersuche

Kommunikation mit ESP8266 geht nicht
PD auf +3,3V (PowerDown inaktiv)
RXD und TXD kreuzen (TXD --> RXD, RXD --> TXD)
ESP8266 mit Spannung +3,3V versorgen

ESP8266 startet Bootloader und bricht dann mit "fatal exception" ab
Versorgungsspannung nicht ausreichend
Spannungsquelle liefert nicht genug Strom?
Versrgungsspannung unsauber

Einstellungen werden durch ESP8266 nicht übernommen
Wenn Einstellungen nicht übernommen werden AT+RST ausgeführen um die Einstellungen zu aktivieren

Quellen

File:ESP8266 Specifications English.pdf
ESP8266-Wiki auf mikrocontroller.net
Thread zum ESP8266 auf mikrocontroller.net
ESP8266 WiFi Module (boxtec.ch)
ESP8266 ESP-01 (boxtec.ch)
ESP8266 ESP-02 (boxtec.ch)
ESP8266 ESP-03 (boxtec.ch)
Overhauling The ESP8266’s Flash Memory Handling

Einzelnachweise

<references>

Cookies help us deliver our services. By using our services, you agree to our use of cookies.