Rainer-Rebhan

Die WiFi/WLan Controller ESP 8266

5V kompatible Varianten des ESP8266 WLan (WiFi) Controller


3. ESP8266 (ESP07) Modul

Auch dieses Modul mit einem ESP07 Controller ist 5V kompatibel und hat einen Stecker mit 4 Anschlüsse ähnlich dem Selbstbau-Shield (2.). Zusätzlich sind noch ein Reset-Taster und ein Umschalter zum Flashen des ESP vorhanden. Damit ergibt sich die Möglichkeit den ESP direkt und ohne "Umbau" zu flashen. Ich habe dieses ESP8266-Modul einmal nicht als Shield augeführt sondern direkt über einen 4pol. Stecker an einen MEGA angeschlossen. Die 4 Anschlüsse werden direkt auf den +5Volt und 0V (GND) Anschluß sowie den UART-Anschlüssen TX und RX gelötet - fertig. Interessant ist bei diesem Modul, dass neben einer Keramik-Antenne der Anschluß einer externen WLan-Antenne möglich ist.

4. 5V Adapter für ein ESP8266 - ESP01 Modul

Auf diesen Adapter kann ein ESP-01 Modul direkt aufgesteckt werden. Das ESP-01 Modul ist einer der Ersten auf dem Markt gewesen und deshalb ein viel angebotenes ESP-Modul mit sehr günstigem Preis (ca. 3 €) Der Adapter besitzt einen 3.3 V Regler und die Pegelwandler für den seriallen UART-Anschluß. Das ESP-Modul wurde zunächst mit 9600 Baud ausgeliefert, Module neueren Datums (SW rev. 040) kommunizieren mit 115200 Baud.

Hinweis für einen SoftwareSerial Port zum ESP

Um den Debug-Monitor (TX#0 + RX# 0) bei einem Arduino UNO weiter verwenden zu können, gibt es die Möglichkeit die o.g. ESP-Module über einen Software-Serial-Port anzuschliessen. Die Software Library "SoftwareSerial" ermöglicht es "normale" Digital-Ein-Ausgänge in einen seriellen Anschluss umzuwandeln. Bitte beachten die Hinweise auf dieser Arduino Referenz-Seite zur Software Serial Lib. Da praktisch alle ESP-Module mit einer (Standard) Baud-Rate von 1152000 Baud arbeiten, müssen auch die SoftwareSeriale Ports (RX / TX) mit dieser Baudrate arbeiten. Obwohl die SW-Serial-Library diese hohe Baudrate zulässt, ist der praktische Betrieb mit dieser Baudrate nicht sicher.

Umstellung des ESP auf eine andere Baudrate

Es ist möglich den ESP auf eine niedrigere Baudrate einzustellen z.B. auf 19200 oder 9600 Baud. Mit dieser Rate arbeitet auch der SW-Serial-Port wieder zuverlässig. Die Umstellung am ESP (hier auf 9600 baud) kann mit diesem AT Befehl erfolgen. AT+UART_CUR=9600,8,1,0,0
AT+UART_DEF=9600,8,1,0,0
Wobei der _CUR Befehl den Baud-Wert nicht ins Flash speichert - der _DEF Befehl den Wert bleibend in das Flash speichert. Zur Umstellung der Baudrate schließe ich den ESP an einen Arduino Mega z.B. an den Serial#3 Hardware-UART (mit 115200) an und programmiere auf eine niedrigere Baudrate. Dann kann man diesen ESP auf z.B. einem Arduino UNO mit einem SoftwareSeriel-Port auf den Pins 10 (=RX) und 11 (=TX) und 9600 Baud betreiben. Sollte die Umprogrammierung nicht richtig funktioniert haben kann man den ESP mit den AT Befehl AT+RESTORE auf Werkseinstellung zurücksetzen.
/* Baudrate Test ESP8266 Arduino IDE 1.6.4 COM PORT 18 für MEGA Mega mit HW-Serial: Serial#3 AT+UART_DEF=115200,8,1,0,0 AT+UART_DEF=9600,8,1,0,0 This command sets the UART configuration and ! save ! it to flash. It is stored as the default parameter and will also be used as the default baudrate henceforth AT+UART_CUR=115200,8,1,0,0 AT+UART_CUR=9600,8,1,0,0 This command sets the current UART configuration; it does ! not ! write to the flash. Hence there is no change in the default baudrate. */ #include "WiFiEsp.h" #include int espbyte = 0; unsigned long baud9600 = 9600; unsigned long baud19200 = 19200; unsigned long baud38400 = 38400; unsigned long baud115200 = 115200; boolean Baud_istOK = false; boolean UART_Flashen = false; #define MG_HW_PIN 53 // fuer Hardware beim Mega (Rev.3) (immer Output) #define LED_OB 13 // LED //----------------------------------------------------------------- void Konsole_Eingabe() { if(Serial.available()) { char inByte = Serial.read(); //Serial.print("\n\rEingabe= "); Serial.print(inByte); if(inByte == 'A') { Serial.print("\n\rESP Cmd: "); Serial3.write("AT\r\n"); } if(inByte == 'R') { Serial.print("ESP Cmd: "); Serial3.write("AT+RST\r\n"); UART_Flashen = false; } if(inByte == 'F') { Serial.println("\n\r\n\rSetze UART Baudrate flashen!"); UART_Flashen = true; } if(inByte == '#') { Serial.print("\n\rESP Cmd: "); Serial3.write("AT+RESTORE\r\n"); delay(100); Serial.println("\n\rESP-Restore zu Baud 115200"); Serial3.begin(115200); Check_Baudrate(baud115200,1); Auf_OK_warten(); if(Baud_istOK) Serial.println("Baudrate wurde erkannt"); delay(100); Serial.println("\n\rESP Cmd - AT"); Serial3.write("AT\r\n"); } if(inByte == 'V') { Serial.print("\n\rESP Cmd: "); Serial3.write("AT+GMR\r\n"); } if(inByte == 'P') { Serial.print("\n\rESP Cmd: "); Serial3.write("AT+CWLAP\r\n"); } if(inByte == '?') { asm volatile (" jmp 0"); } if(inByte == '1') { Serial.print("\n\rESP Cmd: setze UART 115200"); if(!UART_Flashen) { Serial3.write("AT+UART_CUR=115200,8,1,0,0\r\n"); Serial.println("... eingestellt"); } if(UART_Flashen) { Serial3.write("AT+UART_DEF=115200,8,1,0,0\r\n"); Serial.println("... geflasht"); UART_Flashen = false; } delay(100); Serial3.begin(115200); } if(inByte == '2') { Serial.println("\n\rESP Cmd: setze UART 38400"); if(!UART_Flashen) { Serial3.write("AT+UART_CUR=38400,8,1,0,0\r\n"); Serial.println("... eingestellt"); } if(UART_Flashen) { Serial3.write("AT+UART_DEF=38400,8,1,0,0\r\n"); Serial.println("... geflasht"); UART_Flashen = false; } delay(100); Serial3.begin(38400); } if(inByte == '3') { Serial.println("\n\rESP Cmd: UART 19200"); if(!UART_Flashen) { Serial3.write("AT+UART_CUR=19200,8,1,0,0\r\n"); Serial.println("... eingestellt"); } if(UART_Flashen) { Serial3.write("AT+UART_DEF=19200,8,1,0,0\r\n"); Serial.println("... geflasht"); UART_Flashen = false; } delay(100); Serial3.begin(19200); } if(inByte == '4') { Serial.println("\n\rESP8266 Cmd: UART 9600"); if(!UART_Flashen) { Serial3.write("AT+UART_CUR=9600,8,1,0,0\r\n"); Serial.println("... eingestellt"); } if(UART_Flashen) { Serial3.write("AT+UART_DEF=9600,8,1,0,0\r\n"); Serial.println("... geflasht"); UART_Flashen = false; } delay(100); Serial3.begin(9600); } if(inByte == 'a') { Serial.println("\n\rSetze Baudrate = 9600"); Serial3.begin(9600); } if(inByte == 'b') { Serial.println("\n\rSetze Baudrate = 19200"); Serial3.begin(19200); } if(inByte == 'c') { Serial.println("\n\rSetze Baudrate = 38400"); Serial3.begin(38400); } if(inByte == 'd') { Serial.println("\n\rSetze Baudrate = 115200"); Serial3.begin(115200); } inByte = 'x'; } } //--------------------------------------------------------------- void Check_Baudrate(unsigned long baudr, int wait) { Serial.print("Check Baudrate: "); Serial.print(baudr); Serial.print(" ... "); Serial3.begin(baudr); Serial3.write("AT\r\n"); delay(wait); } void Auf_OK_warten() { boolean Ook = false; boolean Kok = false; unsigned long Counter = 0; while(!Kok) { if (Serial3.available()) espbyte = Serial3.read(); //Serial.write(espbyte); if (espbyte == 79) Ook = true; if (espbyte == 75) Kok = true; Counter++; if (Counter > 200000){Serial.print("Timeout\n\r"); break;} } if (Ook && Kok) Baud_istOK = true; } //----------------------------------------------------------------- void setup() { Serial.begin(19200); pinMode(MG_HW_PIN, OUTPUT); //Hardware Pin53 Output pinMode(LED_OB, OUTPUT); //onBoard LED digitalWrite(LED_OB, LOW); Serial.println("----------------------------------------------------------"); Serial.println("Baudrate-Aenderungen ESP8266"); Serial.println("MEGA-Board + ESP8266 an HW-UART#3\n\r"); Serial.println("Konsolen-Eingabe fuer AT-CMDs:"); Serial.println("A = AT, F = UART Flashen, R = AT+RST (flashen aus), # = RESTORE, V = AT+GMR, P = AT+CWLAP"); Serial.println("? = Prog. Neustart"); Serial.println("1 = ESP Baudrate 115200 einstellen -> davor F fuer flashen"); Serial.println("2 = ESP Baudrate 38400 einstellen -> davor F fuer flashen"); Serial.println("3 = ESP Baudrate 19200 einstellen -> davor F fuer flashen"); Serial.println("4 = ESP Baudrate 9600 einstellen -> davor F fuer flashen\n\r"); Serial.println("Setze SW+HW Baudrate: a=9600, b=19200, c=38400, d=115000"); Serial.println("----------------------------------------------------------"); Serial.println("Baudrate-Test mit AT-Cmd: AT ..."); if(!Baud_istOK) { Check_Baudrate(baud115200,10); Auf_OK_warten(); if(Baud_istOK) Serial.println("Baudrate wurde erkannt"); } if(!Baud_istOK) { Check_Baudrate(baud38400,10); Auf_OK_warten(); if(Baud_istOK) Serial.println("Baudrate wurde erkannt"); } if(!Baud_istOK) { Check_Baudrate(baud19200,10); Auf_OK_warten(); if(Baud_istOK) Serial.println("Baudrate wurde erkannt"); } if(!Baud_istOK) { Check_Baudrate(baud9600,10); Auf_OK_warten(); if(Baud_istOK) Serial.println("Baudrate wurde erkannt"); } } //---------------------------------------------------------------- void loop() { Konsole_Eingabe(); if (Serial3.available()) Serial.write(Serial3.read()); //if (Serial.available()) Serial.write(Serial.read()); }

Arduino-Sketch für den ESP8266 - Verbinden mit dem WLan weiter

nach oben zurueck weiter