NodeMCU / ESP8266 Wifi LED
Als kleines Beispiel zum Einstieg in die Programmierung des ESP8266 eine LED welche sich über Wlan Steuern lässt.
Was wird benötigt?
Webserver auf dem NodeMCU
Ihr solltet die Arduino IDE wie beschrieben eingerichtet haben.
Das folgende Sketch zeigt einen simplen Webserver. Kopiert es in die Arduino IDE und ersetzt die Punkte bei ssid und password durch Eure Wlan-Zugangsdaten.
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 75 76 77 78 | #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> const char* ssid = "........"; const char* password = "........"; ESP8266WebServer server(80); const int led = LED_BUILTIN; void handleRoot() { server.send(200, "text/plain", "hello from esp8266!"); } void ledOn() { digitalWrite(led, 0); server.send(200, "text/plain", "LED on"); } void ledOff() { digitalWrite(led, 1); server.send(200, "text/plain", "LED off"); } void handleNotFound(){ digitalWrite(led, 1); String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET)?"GET":"POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i=0; i<server.args(); i++){ message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); digitalWrite(led, 0); } void setup(void){ pinMode(led, OUTPUT); digitalWrite(led, 0); Serial.begin(115200); WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (MDNS.begin("esp8266")) { Serial.println("MDNS responder started"); } server.on("/", handleRoot); server.on("/on", ledOn); server.on("/off", ledOff); server.onNotFound(handleNotFound); server.begin(); Serial.println("HTTP server started"); } void loop(void){ server.handleClient(); } |
Öffnet den Seriellen Monitor der Arduino IDE über Werkzeuge -> Serieller Monitor Ihr solltet folgende Ausgabe sehen:
Hier findet Ihr auch die IP-Adresse welche von Eurem Router an den ESP8266 zugewiesen wurde. In meinem Fall 192.168.1.150
.
Für den Webserver werden Drei Hauptfunktionen festgelegt: handleRoot
, ledOn
, ledOff
.
Diese können über den Browser (bzw. HTTP) angesprochen werden.
handleRoot
kann über http://192.168.1.150
aufgerufen werden. ledOn
kann über http://192.168.1.150/on
aufgerufen werden und ledOff
über http://192.168.1.150/off
. Ihr müsst beim Aufruf jeweils eure IP-Adresse einsetzten.
Im Code wird jeweils definiert was bei dem jeweiligen Aufruf passiert. handleRoot
sendet nur einen Text an den Browser. ledOn
bzw. ledOff
schaltet zusätzlich noch die eingebaute LED ein bzw. aus.
Warum denn mit einem Webserver auf dem NodeMCU und nicht über MQTT? Dann kann man den ESP8266 auch mit Lua programmieren :)