Table of ContentsESP8266 WiFi ModuleDie 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 ESP8266ESP8266 ESP-01
ESP8266 ESP-02
← ACHTUNG: Atkualisiertes Anschlussdiagramm! ESP8266 ESP-03
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. Hinweis: Alle Eingänge des ESP8266 sind nicht 5V tolerant und dürfen ausschliesslich mit 3.3V betrieben werden. AT Kommandos
Allgemeine AT Kommandos
WiFi AT Kommandos
WiFi Kommandos (Station / Client)
WiFi Kommandos (Access Point)
WiFi Kommandos (IP Client)
WiFi Kommandos (IP Server)
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 +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 SSID "DEINE-SSID" #define WIFIPASS "Dein.WIFI-Passwort" #define DSTIP "192.168.10.120" #define DSTPORT 80 #define CH_PD_PIN A0 #define HOST "emon.mydomain.ch" #define APIKEY "abcdef1234567890abcdef1234567890" #define USER_AGENT "User-Agent: Mozilla/0.1 (esp8266; wifi-hack)" #define 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); } 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="); 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); } Firmware UpdateEin Image für den Update auf Firmware 0.91 kann hier heruntergeladen werden:
Dieses Image benötigst Du unabhängig davon ob Du den Update mit Windows oder Linux durchführen willst. Firmware Update mit LinuxDiese 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
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 / LatenzStromverbrauchDurchschnittliche 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! Wenn der ESP nicht zuverlässig arbeitet, dann kann der Stromverbrauch ein Problem sein. Es empfiehlt sich genügend Strom zur Verfügung zu haben. Der USB Anschluss eines Laptops hat da evtl. ein Problem. Evtl. hilft auch schon ein grösserer Kondensator um die Spitzen abzufangen. Netzwerk LatenzEin 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 programmierenSeit 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 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. Am besten nimmt man für einen ersten Versuch eines der vielen mitgelieferten Beispiele. Hier ein Beispiel für einen Http Client “basichttpclient.ino”. Damit lassen sich mit wenig Aufwand Messdaten an einen Server übermitteln. Weiter ist auch das Beispiel NTPClient interessant. Darüber lässt sich die UTC Zeit von einem NTP Time Server auslesen. MQTTMit dem ESP8266 kann man sehr einfach MQTT Meldungen absetzen oder darauf reagieren. Dazu muss die Library PubSubClient installiert werden: Ein sehr einfaches Beispiel ist das: Basic ESP8266 MQTT example Darin müssen nur folgende Zeilen angepasst werden und schon kann man via MQTT kommunizieren. Hier muss das Wlan und der mqtt Server definiert werden: // Update these with values suitable for your network. const char* ssid = "?"; const char* password = "?"; const char* mqtt_server = "?"; Hier habe ich dann noch user und passwort ergänzt das ist natürlich von Eurem mqtt Server abhängig. if (client.connect(clientId.c_str(),"<user>","<password>")) { Danach noch alle Topic anpassen. Einfach die Aufrufe mit client.publish und client.subscribe. Beispiel: client.publish("user/test/esp_out", "hello world"); // ... and resubscribe client.subscribe("user/test/esp_in"); Hier seht die die Kommunikation: Hier auch noch ein Beispiel für das Empfangen von Meldungen über MQTT. Fehlersuche
Links
Referenzen |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Letzte Aktualisierung: © boxtec internet appliances · the better security products |