Ich habe wieder ein bisschen mit Elektronik gebastelt. Allerdings war das aktuelle „Projekt“ nicht wirklich echt, es ging nicht um das Produkt, sondern nur um ein bisschen Spaß. Für die aktuelle Themenreihe der CityChurch sollten ein paar Videos gedreht werden, und die Videoleute fragten mich an, ob ich ich dafür nicht irgend eine Elektronik-Bastelei machen könnte.
Die Idee war dann, die Weihnachtsbaumbeleuchtung per WLAN vom Handy aus zu steuern. Einfach so zum Spaß. Ich hatte mir gerade das Wemos D1 mini etwas genauer angesehen und sagte zu. Sollte kein zu großes Problem sein, damit per WLAN ein Relais zu steuern, welches die Beleuchtung dann schaltet. Das Problem war dann aber, dass ich aufgrund der letzten Bastelei kein Relais mehr hatte und pfuschen improvisieren musste: Statt des Relais habe ich ein Servo verwendet, mit dem eine Art motorisierter Schalter gebaut wurde. Also auch eine Art Relais, nur nicht mit Magnetspule, sondern mit Servomotor. Dem Elektriker meines Vertrauens sei gesagt, dass die Konstruktion längst wieder zerlegt wurde und nie für den produktiven Einsatz gedacht war. Der Vollständigkeit halber: Don’t try this at home!
Hier also das Video. Schnitt und so ist nicht von mir, nur die Bastelei und ein bisschen Schauspielerei (nicht gerade meine Kernkompetenz).
Fazit: Das Wemos D1 mini kann ich nur empfehlen. Im Wesentlichen Arduino-kompatibel, man kann es mit der Arduino-IDE programmieren (eine simple Anleitung zur Installation des Boards findet man hier), WLAN ist an Bord, außerdem ein einfach zu bedienender Webserver. Die erste Demo (Steuerung einer LED per WLAN) war mit guter Anleitung in unter 15 Minuten auf dem Schreibtisch lauffähig und die Abwandlung zur Servo-Steuerung ein Klacks. Außerdem ist ein Klon des Boards mit 6,50€ wirklich erschwinglich.
Vom Prozedere her läuft das ganze so: Code schreiben, compilieren und auf’s Board schieben, aus dem seriellen Monitor der Arduino-IDE die IP des Boards holen, mit dem Browser die IP aufrufen und darüber das Board steuern. Wenn man das ganze (wie im Video gezeigt) etwas eleganter per Smartphone machen will empfiehlt sich eine App wie z.B. HTTP Request Widget, die für Android Widgets erstellen kann, die dann HTTP-Requests absetzen und somit die Steuerung ohne den „Umweg“ über den Browser übernehmen.
Der Vollständigkeit halber hier noch mein Code für das Projekt:
//http://www.esp8266learning.com/wemos-webserver-example.php #include <ESP8266WiFi.h> #include <ESP8266mDNS.h> #include <WiFiUdp.h> #include <Servo.h> const char* ssid = "deine WLAN-SSID"; const char* password = "dein WLAN-Passwort"; int servoPin = D4; Servo Servo1; WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); Servo1.attach(servoPin); Servo1.write(0); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected!"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.print("Use this URL : "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while(!client.available()){ delay(1); } // Read the first line of the request String request = client.readStringUntil('\r'); Serial.println(request); client.flush(); // Match the request int value = LOW; if (request.indexOf("/servo=on") != -1) { //digitalWrite(servoPin, HIGH); Servo1.write(90); value = HIGH; } if (request.indexOf("/servo=off") != -1){ //digitalWrite(servoPin, LOW); Servo1.write(0); value = LOW; } // Return the response client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); // do not forget this one client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.print("Servo position is now: "); if(value == HIGH) { client.print("ON"); } else { client.print("OFF"); } client.println(" "); if(value == HIGH) { client.println("Click <a href=\"/servo=off\">to turn the servo in OFF position</a> "); } else { client.println("Click <a href=\"/servo=on\">to turn the servo in ON position</a> "); } client.println("</html>"); delay(1); Serial.println("Client disconnected"); Serial.println(""); }
HAHA, sau geil, der Moment, in dem zum ersten Mal das Servo zu sehen war. Musste richtig laut lachen 😉 Weiter so! Jetzt noch ein kleines Kästchen drum herum und dann kannst du das auch TÜV geprüft einsetzen.
Wie gesagt, ist schon wieder zerlegt. Und jetzt habe ich auch wieder Relais (kamen einige Stunden zu spät…).
Ich überlege zur Zeit mich mal mit dem ESP8266 zu beschäftigen. Kannst du mir sagen wo der Vorteil des von dir eingesetzten Boards gegenüber eines ESP8266-12 liegen? Vielen Dank!
Hallo Jonathan,
dazu kann ich dir leider nicht viel sagen. Hab aktuell ein paar ESP8266-Boards daheim liegen, aber irgendwie weiß ich nicht genau, wie ich mit denen beginnen soll. Vom normalen Arduino her kommend schien mir das D1 mini nett, weil es für mich sowas ist wie ein Arduino plus WIFI, während ich bei den anderen ja z.B. nicht mal eine USB-Schnittstelle für die Programmierung habe und ich schon am einfachen Beschreiben des Microcontrollers zu scheitern fürchte. Vermutlich verliert das Thema auch schnell seine Schrecken, wenn man es mal angeht, hab das aber noch nicht gemacht.
Alles in allem also eher praktische als konzeptionelle Überlegungen. Du kannst ja ruhig mal ein paar Erfahrungen damit sammeln und dann berichten 😉