ESP8266 WiFi Module

2016/09/09 18:52
1/13
ESP8266 WiFi Module
ESP8266 WiFi Module
Die ESP8266 Module von Espressif bieten eine sehr günstige Möglichkeit, Mikrokontroller Projekte mit
Internet Verbindung zu erweitern.
Die gute Reichweite, einfache Konfiguration und vor allem der niedrige Preis machen diese Module
sehr attraktiv für IoT Projekte aller Art.
Dadurch dass die Module erst seit sehr kurzem auf dem Markt sind, besteht noch sehr wenig
Dokumentation, diese Seite soll bekannte Informationen zusammenführen.
Anschlussbelegung / Pinout ESP8266
ESP8266 ESP-01
Label
VCC
GND
TXD
RXD
Signal
3.3V (max 3.6V) Versorgungsspannung
Ground
Transmit Data (3.3V Pegel)
Receive Data (3.3V Pegel!)
Boxtec Playground - http://playground.boxtec.ch/
Last update: 2016/09/09 16:56
wireless:esp8266 http://playground.boxtec.ch/doku.php/wireless/esp8266
CH_PD Chip Power down: (LOW = Power down aktiv)
GPIO0 General Purpose I/O 0
GPIO2 General Purpose I/O 2
RST
Reset (LOW = Reset aktiv)
ESP8266 ESP-02
Label
Signal
VCC
3.3V (max 3.6V) Versorgungsspannung
GND
Ground
UTXD
Transmit Data (3.3V Pegel)
URXD
Receive Data (3.3V Pegel!)
GPI014 (CH_PD) Chip Power down: (LOW = Power down aktiv)
GPIO0
General Purpose I/O 0
GPIO2
General Purpose I/O 2
RST
Reset (LOW = Reset aktiv)
← ACHTUNG: Atkualisiertes Anschlussdiagramm!
ESP8266 ESP-03
http://playground.boxtec.ch/
Printed on 2016/09/09 18:52
2016/09/09 18:52
3/13
ESP8266 WiFi Module
Label
Signal
VCC
3.3V (max 3.6V) Versorgungsspannung
GND
Ground
UTXD
Transmit Data (3.3V Pegel)
URXD
Receive Data (3.3V Pegel!)
CH_PD
Chip Power down: (LOW = Power down aktiv)
GPIO0
General Purpose I/O 0
GPIO2
General Purpose I/O 2
GPIO12 General Purpose I/O 12
GPIO13 General Purpose I/O 13
GPIO14 General Purpose I/O 14
GPIO15 General Purpose I/O 15
GPIO16 General Purpose I/O 16 (RESET)
WIFI_ANT WiFi Antenna
NC
Not connected
Standardbeschaltung des ESP-03 Moduls: VCC: 3.3V; GND: GND; CH_PD: 3.3V, GPIO15: GND;
und gegbenfalls UTXD/URXD mit RX/TX des Host Microcontrollers.
RESET: GPIO16 kann als RESET verwendet werden, nachdem auf dem ESP-03 Modul die im Bild
markierte Lotbrücke geschlossen wurde.
Boxtec Playground - http://playground.boxtec.ch/
Last update: 2016/09/09 16:56
wireless:esp8266 http://playground.boxtec.ch/doku.php/wireless/esp8266
Hinweis: Alle Eingänge des ESP8266 sind nicht 5V tolerant und dürfen ausschliesslich mit 3.3V
betrieben werden.
AT Kommandos
●
●
●
●
●
Baudrate: normal 115200, Für Arduino 9600, alte Modelle 57600
Der AT Teil des Kommandos kann gross oder klein geschrieben werden, der nachfolgende Befehl
muss jedoch immer gross geschrieben werden
Achte darauf, dass vor, nach und innerhalb des Befehls keine Leerzeichen (Space) vorkommen
AT-Kommandos müssen mit CR (\r\n) terminiert werden
Settings zur WLAN Verbindung werden automatisch dauerhaft gespeichert und nach Reset wieder
wirksam
Allgemeine AT Kommandos
AT Kommando
Beschreibung
Parameter Beispiel
AT
Test Kommando, gibt immer “OK” zurück
AT
Reset des Moduls, gibt Bootmeldungen des Moduls gefolgt von
AT+RST
AT+RST
ready zurück
AT+GMR
Abfrage der Firmware Version
AT+GMR
WiFi AT Kommandos
AT Kommando
Parameter
1=Station
AT+CWMODE=<mode> Setzen des WiFi Betriebsmodus1) 2=Access Point
3=Beides
AT+CWMODE?
Abfrage WiFi Betriebsmodus
Abfrage möglicher
AT+CWMODE=?
Einstellungen für WiFi
Betriebsmodus
http://playground.boxtec.ch/
Beschreibung
Beispiel
AT+CWMODE=1
AT+CWMODE?
AT+CWMODE=?
Printed on 2016/09/09 18:52
2016/09/09 18:52
5/13
AT+CIPMUX=<mode>
ESP8266 WiFi Module
Verwenden mehrerer
Verbindungen
AT+CIPMODE=<mode> Einstellen des Datenmodus
AT+CIPMODE?
0=Einzelverbindung
1=Mehrere
Verbindungen
0=transparent
1=Daten
Ausgabe des eingestellten
Datenmodus
AT+CIPMUX=1
AT+CIPMODE=1
AT+CIPMODE?
WiFi Kommandos (Station / Client)
AT Kommando
Beschreibung
Parameter
Beispiel
ssid: “SSID”
Verbinden mit WiFi
AT+CWJAP=<ssid>,<pass>
pass:
AT+CWJAP=“makerday”,”M4k3rd4y”
Netzwerk
“Passwort”
Ausgabe des
aktuell
AT+CWJAP?
AT+CWJAP?
verbundenen WiFi
Netzwerks
Ausgabe der
AT+CWLAP
AT+CWLAP
verfügbaren APs2)
Trennt die
AT+CWQAP
Verbindung mit
AT+CWQAP
einem Access Point
Ausgabe der
AT+CIFSR
AT+CIFSR
eigenen IP Adresse
WiFi Kommandos (Access Point)
AT Kommando
Beschreibung
Setzen der
Access Point
Parameter3)
Im Access-Point
Modus hat das
Modul die
AT+CWSAP=<ssid>,<pass>[,<chan>,<enc>] IP-Adresse
192.168.4.1. Es
weist DHCP
Clients Adressen
ab
192.168.4.100
zu.
Ausgabe der
aktuellen
AT+CWSAP?
Einstellungen für
den AP
Listet
AT+CWLIF
angeschlossenen
Stations IPs4)
Parameter
Beispiel
ssid: “SSID”
pass: “Passwort”
chan: “Kanal”
enc: “Encryption”
(0=Offen
AT+CWSAP=“makerday”,”M4k3rd4y”,5,3
1=WEP
2=WPA_PSK
3=WPA2_PSK
4=WPA_WPA2_PSK)
AT+CWSAP?
AT+CWLIF
WiFi Kommandos (IP Client)
AT Kommando
Boxtec Playground - http://playground.boxtec.ch/
Beschreibung Parameter
Beispiel
Last update: 2016/09/09 16:56
AT+CIPSTATUS
wireless:esp8266 http://playground.boxtec.ch/doku.php/wireless/esp8266
Ausgabe Status
der IP
Verbindung(en)
AT+CIPSTATUS
type: “TCP”
oder “UDP”
Erstellen einer
address:
IP Verbindung
AT+CIPSTART=<type>,<address>,<port>
“IP-Adresse” AT+CIPSTART=“TCP”,”192.168.3.10”,3000
mit
port:
AT+CIPMUX=0
TCP/UDP
Port
Senden von
Daten über
len:
AT+CIPSEND=4
AT+CIPSEND=<len>
einzelne
Datenlänge >9901
Verbindung5)
Schliessen
einer einzelnen
AT+CIPCLOSE
AT+CIPCLOSE
TCP oder UDP
Verbindung
id: 0-4
type: “TCP”
Erstellen einer oder “UDP”
IP Verbindung address:
AT+CIPSTART=<id>,<type>,<address>,<port>
AT+CIPSTART=“TCP”,”192.168.3.10”,3000
mit
“IP-Adresse”
AT+CIPMUX=1 port:
TCP/UDP
Port
Senden von
id: 0-4
Daten über
AT+CIPSEND=1,4
AT+CIPSEND=<id>,<len>
len:
merhere
>9901
Datenlänge
Verbindungen6)
Schliessen
einer von
AT+CIPCLOSE=<id>
mehreren TCP id: 0-4
AT+CIPCLOSE=1
oder UDP
Verbindung
WiFi Kommandos (IP Server)
AT Kommando
Beschreibung
AT+CIPSERVER=1[,<port>] Startet den TCP Server
AT+CIPSERVER=0
Beendet den TCP Server
Setzt Timeout für TCP
AT+CIPSTO=<timeout>
Server
Gibt Timeout für TCP
AT+CIPSTO?
Server aus
Parameter
port: Port
Beispiel
AT+CIPSERVER=1,8001
AT+CIPSERVER=0
timeout=0-28800s AT+CIPSTO=180
AT+CIPSTO?
Wird ein IP Server gestartet, kann dieser max 5 gleichzeitige Verbindungen bearbeiten. Weitere
Verbindungen können erstellt werden, werden jedoch erst bedient wenn andere geschlossen werden
oder durch Timeout beendet werden.
Alte Versionen (vermutlich bis 00150910) konnten auch UDP Verbindungen annehmen. Der IP Server
in der aktuellen Firmware 0.40 und 0.50 unterstützt nur noch TCP.
Auf dem Modul werden eingehende Daten direkt mit dem Prefix +IPD ausgegeben:
+IPD,1,6:201.9
OK
http://playground.boxtec.ch/
Printed on 2016/09/09 18:52
2016/09/09 18:52
7/13
ESP8266 WiFi Module
+IPD,0,6:ON
OK
Die Ausgabe ist wie folgt aufgeteilt:
+IPD,<id>,<len>,<data>
Dabei ist id die ID der Verbindung (0-5), len die Länge des erhaltenen Datenpakets und data enthält
die vom Client erhaltenen Daten. In obigem Beispiel sendet als zuerst die Verbindung 1 den Wert
201.9 und dann die Verbindung 0 den String ON
Hinweis: Der IP-Server kann nur im Modus AT+CIPMUX=1 eingeschaltet werden.
Beispiel Code
/*
Kontaktiert eine emoncms Instanz unter IP DSTIP
Port DSTPORT und virtueller Hostname HOST und sendet
die interne Spannung und Temperatur des ATmega328 zur
Aufzeichnung alle 15s
*/
#define
#define
#define
#define
#define
#define
#define
#define
#define
SSID "DEINE-SSID"
WIFIPASS "Dein.WIFI-Passwort"
DSTIP "192.168.10.120"
DSTPORT 80
CH_PD_PIN A0
HOST "emon.mydomain.ch"
APIKEY "abcdef1234567890abcdef1234567890"
USER_AGENT "User-Agent: Mozilla/0.1 (esp8266; wifi-hack)"
LED_PIN 13
void setup() {
digitalWrite(A0, HIGH);
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
pinMode(CH_PD_PIN, OUTPUT);
digitalWrite(CH_PD_PIN, HIGH);
espInit();
}
void loop() {
sendIotData();
delay(15000);
}
Boxtec Playground - http://playground.boxtec.ch/
Last update: 2016/09/09 16:56
wireless:esp8266 http://playground.boxtec.ch/doku.php/wireless/esp8266
void espInit() {
Serial.println("AT+RST");
delay(1000);
if(Serial.find("ready")) {
blinkOk();
}
else {
blinkAlert();
}
Serial.println("AT+CWMODE=1");
delay(500);
Serial.println("AT+CIPMUX=0");
delay(500);
// Join WiFi Network
Serial.print("AT+CWJAP=\"");
Serial.print(SSID);
Serial.print("\",\"");
Serial.print(WIFIPASS);
Serial.println("\"");
delay(3500);
if(Serial.find("OK")) {
blinkOk();
}
else {
blinkAlert();
}
}
void sendIotData(){
char tpl[] = "GET /input/post.json?json={espvcc:%s,esptemp:%s}&apikey=%s
HTTP/1.1\r\nHost: %s\r\n%s\r\n\r\n";
char temp[6];
char vcc[8];
double _vcc = readVcc()/1000.0;
double _temp = getTemp();
dtostrf(_temp, 2, 1, temp);
dtostrf(_vcc, 1, 2, vcc);
char databuf[256] = "";
sprintf(databuf, tpl, vcc, temp, APIKEY, HOST, USER_AGENT);
int ix = 1;
for (ix=0; ix<256; ix++) {
if ( databuf[ix] == 0 ) {
break;
}
}
Serial.print("AT+CIPSTART=\"TCP\",\"");
Serial.print(DSTIP);
Serial.print("\",");
Serial.println(DSTPORT);
delay(500);
Serial.print("AT+CIPSEND=");
http://playground.boxtec.ch/
Printed on 2016/09/09 18:52
2016/09/09 18:52
9/13
ESP8266 WiFi Module
Serial.println(ix);
delay(100);
Serial.println(databuf);
delay(500);
}
void blinkAlert() {
for (int c=0; c<3; c++) {
digitalWrite(LED_PIN, HIGH);
delay(80);
digitalWrite(LED_PIN, LOW);
delay(80);
}
}
void blinkOk() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
}
long readVcc() {
long result;
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2);
ADCSRA |= _BV(ADSC);
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result;
return result;
}
double getTemp(void)
{
unsigned int wADC;
double t;
ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));
ADCSRA |= _BV(ADEN);
delay(20);
ADCSRA |= _BV(ADSC);
while (bit_is_set(ADCSRA,ADSC));
wADC = ADCW;
// The offset of 324.31 could be wrong. It is just an indication.
t = (wADC - 324.31 ) / 1.22;
// The returned temperature is in degrees Celcius.
return (t);
}
Boxtec Playground - http://playground.boxtec.ch/
Last update: 2016/09/09 16:56
wireless:esp8266 http://playground.boxtec.ch/doku.php/wireless/esp8266
Firmware Update
Ein Image für den Update auf Firmware 0.91 kann hier heruntergeladen werden:
●
Firmware ESP8266 v0.91 Firmware ESP8266 v0.91
Dieses Image benötigst Du unabhängig davon ob Du den Update mit Windows oder Linux durchführen
willst.
Firmware Update mit Linux
Diese Anleitung gilt nur für die AT Firmware auf alten Modulen mit 512KB Flash. Das aktuelle SDK (ab
1.5.0) erfordert Module mit mindestens 1024MB Flash.
Utility: esptool
1. Verbinde das Modul mit einem USB zu seriell Adapter wie dem Foca Board und achte darauf, dass
das Foca Board auf 3.3V eingestellt ist. Prüfe ob die Verbindung funktioniert in dem Du die aktuelle
Firmware abfragst:AT+GMR 00150900
2. Verbinde den Pin GPIO00 mit GND
3. Reset des Moduls (RST kurz auf GND)
4. Flashen des ersten Images7): ./esptool.py write_flash 0x000000 eagle.app.v6.flash.bin
5. Reset des Moduls (RST kurz auf GND)
6. Flashen des zweiten Images8): ./esptool.py write_flash 0x40000 eagle.app.v6.irom0text.bin
7. GPIO00 von GND trennen
8. Reset des Moduls (RST kurz auf GND)
9. Firmware Version prüfenAT+GMR 00160901
Firmware Update mit Windows (nicht getestet)
Utility: XTCOM-UTIL
Mit XTCOM-UTIL können die beiden Firmware Images nacheinander auf das Modul geladen werden,
dabei muss auch GPIO00 mit GND verbunden werden um das Modul in den Update Modus zu bringen.
Stromverbrauch / Latenz
http://playground.boxtec.ch/
Printed on 2016/09/09 18:52
2016/09/09 18:52
11/13
ESP8266 WiFi Module
Stromverbrauch
Durchschnittliche Stromaufnahme bei kurzer Distanz zum AP: 30mA, bei größerer Distanz bis zu
200mA
Durchschnittliche Stromaufnahme im AP Modus: 80mA
Kurzzeitig kann die Stromaufnahme bis zu 500mA betragen!
Netzwerk Latenz
Ein Ping dauert meist 30-130ms.
Die Übertragung von Daten dauert meist 100-200ms, unabhängig von der Paketgröße.
Ein Datenpaket kann maximal 1024 Bytes Nutzdaten enthalten.
ESP8266 mit Arduino IDE programmieren
Seit einiger Zeit können alle ESP8266 Module auch direkt aus der Arduino IDE programmiert werden,
ein externer Mikrokontroller ist dann nicht mehr nötig. Mit 512kB - 1MB Flash bieten die Module mehr
als genug Platz für anspruchsvolle Steuerungen.
Um die Module direkt aus der Arduino IDE ab 1.6 zu programmieren muss in den Einstellungen
folgende Boards Manager URL hinzugefügt werden:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Um das Modul in den Bootloader Modus zu versetzen muss GPIO00 auf GND gezogen werden während
Boxtec Playground - http://playground.boxtec.ch/
Last update: 2016/09/09 16:56
wireless:esp8266 http://playground.boxtec.ch/doku.php/wireless/esp8266
ein Reset ausgeführt wird (RESET Pin auf GND). In diesem Zustand angekommen, kann ein Sketch
ganz normal via Upload Button aus der Arduino IDE hochgeladen werden.
Fehlersuche
●
●
●
●
Hast Du CH_PD auf 3.3V gezogen wenn Du versuchst mit dem Modul zu kommunizieren ?
RX/TX vertauscht ?
Hast Du sichergestellt, dass Du ausschliesslich mit 3.3V Pegel mit dem Modul kommunizierst ?
Wenn Einstellungen nicht übernommen werden: AT+RST ausgeführt um die Einstellungen zu
aktivieren ?
Links
●
●
●
●
●
●
●
●
●
●
ESP8266 User Forum
ESP8266 User Wiki
ESP8266 Datasheet
ESP8266 core for Arduino | ESP8266 core for Arduino
github: esptool
OneDrive SDK Mirror
Github ESP8266
Lua based firmware for wifi-soc esp8266
Hackaday: How to directly program the ESP8266 WiFi module
ESP8266 wifi configurator in Arduino lang.. uses eeprom for configs, boots to AP mode if no working
config found
Referenzen
●
●
●
●
●
●
Electrodragon: Wi07c
Nurdspace: ESP8266
Produkteseite Espressif
Datenblatt ESP7266 (Chinesisch)
AT Kommandos ESP7266 (Chinesisch)
Mikrokontroller.net Forum
, 3) Wird erst nach einem Reset mit AT+RST aktiv
2)
Zurzeit resultiert dies leider in einem zuverlässigen Reset
4)
nur in CWMODE 2 und 3 verfügbar
5)
, 6) Die Daten folgen erst nach dem CIPSEND Befehl, nicht auf einer Zeile
7)
, 8) Der Fehler Exception: Failed to leave Flash mode kann ignoriert werden, das Update funktioniert
trotzdem
1)
http://playground.boxtec.ch/
Printed on 2016/09/09 18:52
2016/09/09 18:52
13/13
From:
http://playground.boxtec.ch/ - Boxtec Playground
Permanent link:
http://playground.boxtec.ch/doku.php/wireless/esp8266
Last update: 2016/09/09 16:56
Boxtec Playground - http://playground.boxtec.ch/
ESP8266 WiFi Module