ESP8266 WiFi – Webserver via een Arduino (AT)
Op deze pagina vind je een voorbeeld script om met een ESP-01 en AT commando’s een webserver te draaien via een arduino.
Wat heb je nodig?
1) ESP-01 module met AT firmware (getest met: ESP8266 AT Firmware v1.3.0.2 (ai-thinker, AT v0.40, SDK v1.3.0, baudrate 115200).bin)
2) Arduino UNO/MEGA/NANO
ESP module op 9600 baud!
In dit voorbeeld gebruiken we de SoftwareSerial, het nadeel is dat deze niet overweg kan met hoge baudrates (bijvoorbeeld 115200), dan treed er vervorming in de communicatie op, het is daarom raadzaam om de ESP module op 9600 baud te zetten met het commando:
AT commandoset <= AT v0.40
AT+CIOBAUD=9600
AT commandoset > AT v0.40
AT+UART_DEF=9600,8,1,0,0 of AT+UART=9600,8,1,0,0
Ps. gebruik geen AT+IPR
ESP op de Arduino UNO aansluiten
Sluit de ESP module als volgt aan op de arduino UNO:
De code komt van deze website, en heb ik aangepast & getweaked, dit is het resultaat:
Ps. pas in de code je SSID en Wachtwoord aan van je WiFi netwerk!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
// Dit is een voorbeeld om via AT commando's een webpagina weer te geven d.m.v. een Arduino UNO. // Door: Sebastiaan Ebeltjes (domoticx.nl) // // Hardware: Arduino + ESP8266 module // // Ps. zet de ESP module eerst op 9600 baud met het commando: // bij <= AT v0.40, commando: AT+CIOBAUD=9600 // bij > AT v0.40, commando: AT+UART_DEF=9600,8,1,0,0 // dit omdat de softwareserial anders niet goed werkt met snelheden van 115200 baud! #include <SoftwareSerial.h> SoftwareSerial esp8266(2,3); // RX, TX void setup() { Serial.begin(9600); // Start de seriele monitor op 9600 baud. esp8266.begin(9600); // Start de software monitor op 9600 baud. // WiFi instellingen SSID en wachtwoord. String SSIDstring = ("\"SSID\""); String PASSstring = ("\"PASS\""); Serial.println("\r\n----- [ RESET DE MODULE (RST) ] -----"); sendData("AT+RST\r\n", 1000, true); // Reset de ESP module. Serial.println("\r\n----- [ ZET ESP IN STATION MODE (CWMODE) ] -----"); sendData("AT+CWMODE=1\r\n", 500, true); // Configureer de ESP in "station mode" (1=Station, 2=AP, 3=Station+AP). Serial.println("\r\n----- [ INLOGGEN OP WIFI (CWJAP) ] -----"); sendData("AT+CWJAP=" + SSIDstring + "," + PASSstring + "\r\n", 5000, true); // Inloggen op de WiFi met wachtwoord. Serial.println("\r\n----- [ DUMMY REGEL OM DE ERROR OP TE VANGEN ] -----"); sendData("AT+CIPSTATUS\r\n", 500, true); // Alles wat na de bovenste regel komt geeft "ERROR", vandaar deze dummy regel! Serial.println("\r\n----- [ MULTIPLEX MODE OP MULTIPLE CONNECTIES ZETTEN (CIPMUX) ] -----"); // Zet multiplex in "multiple mode, zo kan de server meerdere verbindingen accepteren, dit is nodig om de server te starten. sendData("AT+CIPMUX=1\r\n", 500, true); Serial.println("\r\n----- [ SERVER STARTEN (CIPSERVER) ] -----"); sendData("AT+CIPSERVER=1,80\r\n", 500, true); // Zet de server actief op poort 80. Serial.println("\r\n----- [IP ADRES] -----"); sendData("AT+CIFSR\r\n", 500, true); // Geef het verkregen IP adres weer. } void loop() { if(esp8266.available()) { // Controleer op de ESP een bericht stuurt. if(esp8266.find("+IPD,")) { delay(1000); int connectionId = esp8266.read() - 48; // Haal er 48 van af, want de "read()" functie geeft een ASCII decimaal waaarde en 0 terug (het eerste decimale nummer begint op 48) // ----- WEBPAGINA ----- String Webpagina = "<h1>Hallo Wereld</h1><button>KNOP 1</button><button>KNOP 2</button>"; // ----- WEBPAGINA ----- sendData("AT+CIPSEND=" + String(connectionId) + "," + Webpagina.length() + "\r\n", 500, true); sendData(Webpagina, 1000, true); // Stuur de webpagina door. sendData("AT+CIPCLOSE=" + String(connectionId) + "\r\n", 1000, true); // Sluit de connectie. } } } String sendData(String command, const int timeout, boolean debug) { String response = ""; esp8266.print(command); // Stuur een "lees" karakter naar de ESP. long int time = millis(); while( (time+timeout) > millis()) { while(esp8266.available()) { // De ESP heeft data om weer te geven, laat het zien in de serial monitor. char c = esp8266.read(); // Lees het volgende karakter. response+=c; } } if(debug) { Serial.print(response); } return response; } |
ESP op de Arduino MEGA aansluiten
Sluit de ESP module als volgt aan op de arduino MEGA:
Ps. pas in de code je SSID en Wachtwoord aan van je WiFi netwerk!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
// Dit is een voorbeeld om via AT commando's een webpagina weer te geven d.m.v. een Arduino. // Door: Sebastiaan Ebeltjes (domoticx.nl) // // Hardware: Arduino + ESP8266 module // Ps. zet de ESP module eerst op 9600 baud met het commando: // bij <= AT v0.40, commando: AT+CIOBAUD=9600 // bij > AT v0.40, commando: AT+UART_DEF=9600,8,1,0,0 void setup() { Serial.begin(9600); // Start de seriele monitor op 9600 baud. Serial1.begin(9600); // Start de software monitor op 9600 baud. // WiFi instellingen SSID en wachtwoord. String SSIDstring = ("\"SSID\""); String PASSstring = ("\"PASS\""); Serial.println("\r\n----- [ RESET DE MODULE (RST) ] -----"); sendData("AT+RST\r\n", 1000, true); // Reset de ESP module. Serial.println("\r\n----- [ ZET ESP IN STATION MODE (CWMODE) ] -----"); sendData("AT+CWMODE=1\r\n", 500, true); // Configureer de ESP in "station mode" (1=Station, 2=AP, 3=Station+AP). Serial.println("\r\n----- [ INLOGGEN OP WIFI (CWJAP) ] -----"); sendData("AT+CWJAP=" + SSIDstring + "," + PASSstring, 6000, true); // Inloggen op de WiFi met wachtwoord. Serial.println("\r\n----- [ DUMMY REGEL OM DE ERROR OP TE VANGEN ] -----"); sendData("AT+CIPSTATUS\r\n", 500, true); // Alles wat na de bovenste regel komt geeft "ERROR", vandaar deze dummy regel! Serial.println("\r\n----- [ MULTIPLEX MODE OP MULTIPLE CONNECTIES ZETTEN (CIPMUX) ] -----"); // Zet multiplex in "multiple mode, zo kan de server meerdere verbindingen accepteren, dit is nodig om de server te starten. sendData("AT+CIPMUX=1\r\n", 500, true); Serial.println("\r\n----- [ SERVER STARTEN (CIPSERVER) ] -----"); sendData("AT+CIPSERVER=1,80\r\n", 500, true); // Zet de server actief op poort 80. Serial.println("\r\n----- [IP ADRES] -----"); sendData("AT+CIFSR\r\n", 500, true); // Geef het verkregen IP adres weer. } void loop() { if(Serial1.available()) { // Controleer op de ESP een bericht stuurt. if(Serial1.find("+IPD,")) { delay(1000); int connectionId = Serial1.read() - 48; // Haal er 48 van af, want de "read()" functie geeft een ASCII decimaal waaarde en 0 terug (het eerste decimale nummer begint op 48) // ----- WEBPAGINA ----- String Webpagina = "<h1>Hallo Wereld</h1><button>KNOP 1</button><button>KNOP 2</button>"; // ----- WEBPAGINA ----- sendData("AT+CIPSEND=" + String(connectionId) + "," + Webpagina.length() + "\r\n", 500, true); sendData(Webpagina, 1000, true); // Stuur de webpagina door. sendData("AT+CIPCLOSE=" + String(connectionId) + "\r\n", 1000, true); // Sluit de connectie. } } } String sendData(String command, const int timeout, boolean debug) { String response = ""; Serial1.print(command); // Stuur een "lees" karakter naar de ESP. long int time = millis(); while( (time+timeout) > millis()) { while(Serial1.available()) { // De ESP heeft data om weer te geven, laat het zien in de serial monitor. char c = Serial1.read(); // Lees het volgende karakter. response+=c; } } if(debug) { Serial.print(response); } return response; } |
Upload de code naar de Arduino, dit is de output van de seriele monitor:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
----- [ RESET DE MODULE (RST) ] ----- AT+RST OK [BOOTLOADER PRUT @ 75K baud] Ai-Thinker Technology Co.,Ltd. invalid ----- [ ZET ESP IN STATION MODE (CWMODE) ] ----- AT+CWMODE=1 OK ----- [ INLOGGEN OP WIFI (CWJAP) ] ----- AT+CWJAP="SSID","PASS"WIFI CONNECTED WIFI GOT IP ----- [ DUMMY REGEL OM DE ERROR OP TE VANGEN ] ----- AT+CIPSTATUS ERROR ----- [ MULTIPLEX MODE OP MULTIPLE CONNECTIES ZETTEN (CIPMUX) ] ----- AT+CIPMUX=1 OK ----- [ SERVER STARTEN (CIPSERVER) ] ----- AT+CIPSERVER=1,80 OK ----- [IP ADRES] ----- AT+CIFSR +CIFSR:STAIP,"192.168.0.111" +CIFSR:STAMAC,"5c:cf:7f:0d:7c:af" OK |
En dan is dit de website:
Bronnen:
medium.com
www.esp8266.com