Erste Erfahrungen mit dem ESP8266 WLAN Modul

Das Funkmodul ESP2688 gibt es seit einiger Zeit sehr preisgünstig in Verschiedenen Ausführungen zu kaufen.

Ich möchte hier meine ersten Erfahrungen bzw. einige Basics dazu schildern.

Benutzt habe ich das Modul in Verbindung mit einem Arduino, also nicht als geflashtes StandAlone Gerät! 

 

Baudrate und serielle Schnittstelle 

Wenn das Modul geliefert wird, ist eine Baudrate von 115200 eingestellt. Mit einem Hardwareseriellen Anschluss
(so am MEGA - Serial2,3,4) ist das kein Problem. Soll das Modul aber am NANO angeschlosen werden und man entschließt sich dazu die SoftSerial Library zu benutzen, kann es Probleme geben.
Bei mir war es so, dass die Verbindung instabil lief. Wahrscheinlich ist das Timing bei dieser Geschwindigkeit nicht ganz korrekt, da es ja über Timer abgebildet wird. So musste ich die Baudrate herrunterschalten. In meinem Fall auf 9600 baud.

Beim Umschalten der Baudrate ist unbedingt zu beachten, dass nicht zufällig wie in einigen Beispielen im Internet angegeben RTS/CTS aktiviert wird. Dann gibt es außer einem Flashen des Moduls keine Möglichkeit jemals wieder Kontakt mit diesemaufzunehmen, da die entsprechenen PIN's nicht herausgeführt sind.

AT+UART_CUR=115200,8,1,0,3       FALSCH
AT+UART_CUR=115200,8,1,0,0       RICHTIG

NewSoftSerial Buffer

Da ein Netzwerkpaket deutlich größer als 64 Zeichen ist, müssen die Bytes sehr schnell abgeholt werden, um ein überschreiben im "seriellen Buffer"  zu vermeiden bzw. zu minimieren. Außerdem ist darauf zu achten , das möglichst wenige Zeichen (also keine Videos ) über das WLAN übertragen werden.

Dazu sind die folgenden Zeile in NewSoftSerial.h anzupassen

//#define _SS_MAX_RX_BUFF 64 // RX buffer size
#define _SS_MAX_RX_BUFF 256  // RX buffer size

Library

Die von mir eingesetzte Library benutzte verschiedentlich folgende Befehlssequencen:

original, aber Fehlerhafte Funktion geändert und stabil
m_puart->print("AT-CIPSTART=");
m_puart->print(mux_id);
...
m_puart->println(port);  

sprintf(cmd,"AT+CIPSTART=%d,\"%s\",\"%s\",%d",mux_id,&type[0],&addr[0],port);

m_puart->println(cmd);

Diese musste ich vollständig durch einen einmaligen AUfruf von println(..) ersetzen, da es sonst nicht funktionierte.
Ich denke das liegt an Timingproblemen (TimeOut) bei der internen Verarbeitung der AT Kommandos im ESP, wenn dass Kommando nicht vollständig in einem "Rutsch" ankommt.

RAM Verbrauch

Durch die vielen fest eingebauten Strings, welche in der Library benutzt werden ist der RAM verbrauch relativ hoch!
Durch umschreiben der Library liese sich das deutilch minimieren. (Strings liegen zwar im Programmcodesegment, werden aber zum Programmstart in den RAM kopiert, auch wenn die String/char[] nicht modifiziert werden).

 AT-Befehle

Ein für mich großes Problem waren die AT Befehle. Im Netz kursieren viele verschiedene Versionen davon. Manche waren jedoch nicht mehr implementiert. Zum Schluß habe ich eine benutzbare Liste der AT Befehle für dieses Modul HIER gefunden.

Die interessantesten Kombinationen

Einstellen Baudrate

AT+CIOBAUD=xxxx                        //nicht mehr benutzen
AT+UART_CUR=115200,8,1,0,0     //temporär
AT+UART_DEF=115200,8,1,0,0     //immer

Einstellen IP

AT+CIPSTA="192.168.1.50","192.168.1.2","255.255.255.0"   //IP, Gateway, Mask

UPD Receiver & Send (Broadcast)

AT+CIPMUX=0
AT+CIPSTART=1,“UDP“,“192.168.1.255“,6070   //KANAL 1 Port 6070 (nur senden, kein Empfang)    BROADCAST
AT+CIPSEND=1,3123
AT+CIPCLOSE=1

TCP Server

AT+CIPMUX=1                          //unbedingt denMUX einschalten
AT+CIPSERVER=1,23                 //Kanal 1 Port 23 (Telnet)