WeMos D1 mini als WLAN-Sensor/-Aktor

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
m.yoda
Beiträge: 74
Registriert: 26.01.2016, 15:42
Danksagung erhalten: 1 Mal

WeMos D1 mini als WLAN-Sensor/-Aktor

Beitrag von m.yoda » 01.02.2016, 05:42

Hallo allerseits,

ich möchte Euch hier meine Basteleien mit dem WeMos vorstellen. (Bitte nicht verwechseln mit dem WeMo von Belkin, das ist was anderes…)
Der „große“ Wemos D1 R2 kann so ungefähr das, was ein Arduino UNO mit WLAN-Shield kann - für die Anbindung an die CCU ist also TCP/IP naheliegend. (Im „Homeduino“-Projekt sind die Möglichkeiten, die sich daraus ergeben, ja bereits sehr schön entwickelt und beschrieben.) Die Kombi Arduino und WLAN-Shield ist zwar durchaus üblich, aber eigentlich so, als ob der Schwanz mit dem Hund wedelt, da die angehängten WLAN-Chips leistungsfähiger sind als die Arduino-Prozessoren. Beim WeMos D1 ist nur ein Chip verbaut, der ESP-8266, und erledigt die Aufgaben, für die sonst die Atmega-Chips gut sind, quasi nebenbei mit. Von der Bauform her ist der WeMos D1 dem UNO angeglichen, mit 11 digitalen I/O-Pins und einem analogen Eingang allerdings etwas spartanischer ausgestattet. Der Clou ist allerdings der Preis: ca. 6 Euro inkl. Versand direkt aus China.

Noch interessanter finde ich persönlich den kleinen Bruder, den WeMos D1 mini, der nur wenig größer als eine normale SD-Karte ist und unter 4 Euro kostet, ebenfalls inkl. Versand. Durch seine ultra-kompakte Bauform lässt sich der Winzling prima dezentral verstauen, z.B. in Unterputzdosen oder in bereits vorhandenen Geräten. Für den Wemos D1 mini gibt es auch schon die ersten passenden Mini-Shields, z.B. Micro-SD-Kartenleser, Feuchte-/Temperatur-Sensoren, Relais…
divWeMos.jpg
WeMos D1 R2, WeMos D1 mini und diverse Mini-Shields
Kaufen kann man ihn da (Lieferzeiten waren bei mir immer so zwischen 10-20 Tagen, die Preise ändern sich täglich je nach Dollarkurs, Zollfreigrenzen beachten), technische Spezifikationen und Anleitungen gibt es dort.

Beide WeMos-Varianten werden fix und fertig aufgebaut geliefert, lediglich die Pin-Leisten muss man beim D1 mini noch selber einlöten. Finde ich aber auch ganz praktisch, weil man dann selbst entscheiden kann, ob männlich, weiblich, weiblich mit langen Beinen, abgewinkelt oder sonst wie. Die Komponenten wirken sauber verarbeitet, alle elektronischen Teile kommen einzeln verpackt im Anti-Statik-Beutelchen, ordentlich beschriftet. Kann man nicht meckern…

Programmiert werden kann das Ganze mit der bekannten Arduino IDE, die noch um den passenden Boardmanager für den ESP-8266 (Doku) ergänzt werden muss. (In der Arduino IDE unter Preferences im Feld „Additional Board Manager“ http://arduino.esp8266.com/stable/packa ... index.json eintragen, anschließend im Boards Manager installieren. (Ich benutze z.Z. die Arduino IDE 1.6.5 mit dem esp8266 2.0.0, als Upload-Geschwindigkeit funktionieren bei mir 230400 und 115200 zuverlässig.)
Update 25.3.2016
Mittlerweile benutze ich Arduino IDE 1.6.8 mit esp8266 2.1.0
Zur Kommunikation mit dem WeMos über den seriellen Port braucht es dann noch einen Treiber für den CH340G (je nach Betriebssystem schon vorinstalliert, lädt sich automatisch oder muss „zu Fuß“ installiert werden; Download z.B. hier) und ein passendes USB-Kabel mit Micro-USB-Stecker. Mit diesem Kabel und einem simplen USB-Ladegerät kann man dann später den WeMos an jeder Steckdose betreiben.

Ansonsten noch zu beachten:
Die WeMos laufen intern mit 3,3 V wie z.B. auch der Arduino Due - die meisten Arduinos haben jedoch 5 V. Beim Übertragen von Arduino-Schaltungen also aufpassen, dass die Spannung an den I/O-Pins auch zum WeMos passt.

Vielleicht finden sich ja noch weitere Homematicer, die meine Begeisterung für den WeMos teilen - ich bin schon gespannt auf eure Ideen und Sketche. Frohes Basteln und gutes Gelingen!

—m.yoda :mrgreen:
Zuletzt geändert von m.yoda am 18.05.2016, 21:50, insgesamt 6-mal geändert.

Benutzeravatar
m.yoda
Beiträge: 74
Registriert: 26.01.2016, 15:42
Danksagung erhalten: 1 Mal

WLAN-Schaltaktor (Prototyp)

Beitrag von m.yoda » 01.02.2016, 06:06

Zum ersten Rumspielen und Testen hab ich mich für die klassische Schaltaufgabe entschieden. Aufbau: Das Relais-Shield (1,77 €) auf den WeMos D1 mini (3,72 €) stecken und fertig ist der WLAN-Schaltaktor für insgesamt exakt 5,49 € (Preisangaben Stand 31.1.2016).

Weil ich so beeindruckt bin von seiner Größe bzw. Winzigkeit, habe ich ihn mal in eine Streichholzschachtel gesetzt:
WeMosSchaltaktor.jpg
WeMos D1 mini mit Relais-Shield
Der folgende Sketch klinkt den WeMos in ein vorhandenes WLAN und setzt einen HTTP-Server auf, über den das Relais angesteuert wird:

Code: Alles auswählen

/*
 *  WeMos-Schaltaktor (Prototyp)
 *  
 *  verbindet sich mit dem vorhandenen WLAN als Server
 *  Steuerung über HTTP-Befehle:
 *     "<IP-Adresse>" gibt eine Status- und Befehlsübersicht aus
 *     "<IP-Adresse>/aus" schaltet das Relais aus
 *     "<IP-Adresse>/ein" schaltet das Relais ein
 *     "<IP-Adresse>/status" gibt den Schaltzustand des Relais als Logikwert ("ein" oder "aus") zurück
 *
 *  Getesteter Aufbau:
 *     WeMos D1 mini
 *     Relay Shield mini
 *     Pin-Belegung:
 *        D1: Steuerleitung Relais
 *
 *  31.Januar 2016 —m.yoda
 */

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

// ******* Netzwerkeinstellungen, bitte anpassen! *******
const char* ssid     = "abc123"; // SSID des vorhandenen WLANs
const char* password = "geheim"; // Passwort für das vorhandene WLAN
IPAddress gateway(xxx,xxx,xxx,xxx); // IP-Adresse des WLAN-Gateways
IPAddress subnet(255,255,255,0);  // Subnetzmaske
IPAddress ip(xxx,xxx,xxx,xxx); // feste IP-Adresse für den WeMos

ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
String antwort = "";

String zeitstempel() { // Betriebszeit als Stunde:Minute:Sekunde
  char stempel[10];
  int lfdStunden = millis()/3600000;
  int lfdMinuten = millis()/60000-lfdStunden*60;
  int lfdSekunden = millis()/1000-lfdStunden*3600-lfdMinuten*60;
  sprintf (stempel,"%03d:%02d:%02d", lfdStunden, lfdMinuten, lfdSekunden);
  return stempel;
}

void wurzel_behandlung() { // bei Aufruf des Root-Verzeichnisses
  String temp = zeitstempel();
  antwort = "WeMos Schaltaktor\n\n";
  if (digitalRead(D1) == HIGH)
    antwort = antwort + "Status: eingeschaltet\n";
  else
    antwort = antwort + "Status: ausgeschaltet\n";
  antwort = antwort + "Betriebszeit: " + temp + " (Std:Min:Sek)\n";
  antwort = antwort + "Verbunden mit: " + ssid + "\n";
  int rssi = WiFi.RSSI();
  antwort = antwort + "Signalstaerke: " + String(rssi) + " dBm\n\n";
  antwort = antwort + "HTTP-Befehlsuebersicht:\n";
  antwort = antwort + "\"<IP-Adresse>/aus\" schaltet das Relais aus\n";
  antwort = antwort + "\"<IP-Adresse>/ein\" schaltet das Relais ein\n";
  antwort = antwort + "\"<IP-Adresse>/status\" gibt den Schaltzustand des\n  Relais als Logikwert (\"ein\" oder \"aus\") zurueck\n";
  server.send(300, "text/plain", antwort);
  delay(150);
  Serial.println(temp + " unspezifische HTTP-Anfrage");
}

void mach_an() {
  pinMode(D1, OUTPUT);
  digitalWrite(D1, HIGH);
  server.send(200, "text/plain", "WeMos-Schaltaktor ist eingeschaltet");
  delay(100);
  Serial.println(zeitstempel() + " ueber HTTP eingeschaltet");
}

void mach_aus() {
  pinMode(D1, OUTPUT);
  digitalWrite(D1, LOW);
  server.send(200, "text/plain", "WeMos-Schaltaktor ist ausgeschaltet");
  delay(100);
  Serial.println(zeitstempel() + " ueber HTTP ausgeschaltet");
}

void melde_status() {
  String temp = zeitstempel();
  if (digitalRead(D1) == HIGH)
    antwort = "ein";
  else
    antwort = "aus";
  server.send(200, "text/plain", antwort);
  delay(100);
  Serial.println(zeitstempel() + " ueber HTTP Status gemeldet");
}

void setup() {
  pinMode(D1, OUTPUT); // Relais-Pin als Ausgang setzen
  
  // Seriellen Monitor für Kontrollausgaben öffnen
  Serial.begin(9600);
  Serial.println("");
  Serial.println("WeMos-Schaltaktor");
  
  // WLAN-Verbindung herstellen
  WiFi.config(ip, gateway, subnet); // auskommentieren, falls eine dynamische IP bezogen werden soll
  WiFi.begin(ssid, password);
  Serial.print("Verbindungsaufbau");

  // Verbindungsaufbau abwarten
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" erfolgreich!");
  Serial.println("");
  Serial.print("Verbunden mit: ");
  Serial.println(ssid);
  Serial.print("Signalstaerke: ");
  int rssi = WiFi.RSSI();
  Serial.print(rssi);
  Serial.println(" dBm");
  Serial.print("IP-Adresse: ");
  Serial.println(WiFi.localIP());
  Serial.println("");

  // HTTP-Anfragen bearbeiten
  server.on("/", wurzel_behandlung);
  server.on("/ein", mach_an);
  server.on("/aus", mach_aus);
  server.on("/status", melde_status);
  
  // HTTP-Server starten
  server.begin();
  Serial.println(zeitstempel() + " HTTP-Server gestartet");
}

void loop() {
  server.handleClient(); // auf HTTP-Anfragen warten
}
Schalten per HTTP-Request z.B. im Web-Browser oder über die CCU mit system.exec bzw. CUxD.

Der WeMos reagiert auf folgende Befehle:
  • "<IP-Adresse>" gibt eine Status- und Befehlsübersicht aus
  • "<IP-Adresse>/aus" schaltet das Relais aus
  • "<IP-Adresse>/ein" schaltet das Relais ein
  • "<IP-Adresse>/status" gibt den Schaltzustand des Relais als Logikwert ("ein" oder "aus") zurück
Nur der Vollständigkeit halber ein kleines Beispiel, wie ein Homematic-Skript für den Einschalt-Befehl mit system.exec aussehen könnte:

Code: Alles auswählen

string stdout;
string stderr;
string url="http://<IP-Adresse des WeMos>/ein";
system.Exec ("wget -q -O /dev/null " # url, &stdout, &stderr);
Angenehm überrascht hat mich die Geschwindigkeit: Wenn ich einen HTTP-Befehl mit dem Drücken der Return-Taste abschicke, geht das Klicken der Taste akustisch nahtlos in das Klacken des Relais über. Bei einem Kaltstart braucht der WeMos bei mir ca. 10 Sekunden für Verbindungsaufbau und Start des HTTP-Servers, beim Warmstart (Reset) ca. 1-2 Sekunden.

In den ersten Tests lief bei mir bisher alles völlig stabil und problemlos. Hoffen wir mal, dass das so bleibt... :mrgreen:

fsommer1968
Beiträge: 230
Registriert: 16.02.2008, 17:05
Danksagung erhalten: 9 Mal

Re: WeMos D1 mini als WLAN-Sensor/-Aktor

Beitrag von fsommer1968 » 01.02.2016, 12:49

Sehr interessant das Teil. Das könnte ein geeigneter Nachfolger für meine FS20 Schaltaktoren werden.
Mir mißfällt aber, daß die Module augenscheinlich kein CE-Kennzeichen tragen. Ich erwarte da schonmal Probleme beim Zoll in D. Spätestens wenn ich zehn Stück auf einmal bestellen würde.

Braucht man da noch irgendwas an Entwicklungs-HW oder reicht das SW Entwicklungssystem aus? (Programmierung über USB Anschluß?)
Die 3,3V Betriebsspannung kann man über den entspr. Pin einspeisen, richtig? Oder schließt man grundsätzlich immer die Betriebsspannung an den Anschluß an der wie ein USB Anschluß aussieht?

Benutzeravatar
m.yoda
Beiträge: 74
Registriert: 26.01.2016, 15:42
Danksagung erhalten: 1 Mal

Re: WeMos D1 mini als WLAN-Sensor/-Aktor

Beitrag von m.yoda » 01.02.2016, 14:34

@fsommer1968

Das mit der (fehlenden) CE-Kennzeichnung sehe ich im Grundsatz auch so. Leider steht man mit DIY-Elektronik da öfter mal in der dunkleren Grauzone, das geht ja schon los, wenn man ein Shield auf einen Arduino pappt... Möge jeder selbst für sich entscheiden, was er da tut.

Die zollrechtlichen Bestimmungen möchte ich an dieser Stelle auch nicht weiter auslegen oder kommentieren. Persönliche Erfahrung dazu: Ich habe im letzten Jahr ca. 10 Sendungen mit Elektronik-Gedöns aus China erhalten. Eins war ein Päckchen, da musste ich zum Zollamt und den Warenwert nachweisen. CE-Kennzeichnung hat niemanden interessiert. Die anderen waren kleine Luftpolster-Briefumschläge, die mit dem Vermerk "Von zollamtlicher Behandlung befreit" direkt bei mir im Briefkasten landeten.

Für die Entwicklung ist keine weitere Hardware nötig, es reicht die Arduino-IDE auf dem PC und ein USB-Datenkabel.

Auf den Boards ist ein Step-down-Konverter (siehe Dateianhang), ich habe die bisher immer mit 5 Volt über USB oder direkt am 5V-Pin versorgt.
Dateianhänge
d1_mini.pdf
Schaltplan WeMos D1 mini
(31.77 KiB) 1500-mal heruntergeladen

braindead
Beiträge: 532
Registriert: 28.11.2014, 21:20
Hat sich bedankt: 5 Mal
Danksagung erhalten: 2 Mal

Re: WeMos D1 mini als WLAN-Sensor/-Aktor

Beitrag von braindead » 01.02.2016, 14:42

Kannst Du etwas zu der WLAN Reichweite sagen?
Gruß,
Markus

Benutzeravatar
m.yoda
Beiträge: 74
Registriert: 26.01.2016, 15:42
Danksagung erhalten: 1 Mal

Re: WeMos D1 mini als WLAN-Sensor/-Aktor

Beitrag von m.yoda » 01.02.2016, 18:08

@braindead

Gute Frage - da wir WLAN-technisch eher überversorgt sind, hab ich mir darüber bisher keine Gedanken gemacht. Aber habe es gleich mal probiert.

Ausgangssituation:
Freistehendes EFH ca. 10x10m Grundfläche, ein AP im EG, einer im 1.OG. Verbindungsaufbau zum AP im 1.OG, liegt im Signalbereich von 3 weiteren WLAN der Nachbarn.
HTTP-Request über PC im LAN, Messung der Signalstärke durch den WeMos selbst mit WiFi.RSSI() im o.g. Schaltaktor-Sketch.
  • WeMos im gleichen Zimmer -54 dBm
  • WeMos im gleichen Stock, entgegengesetzte Hausecke -75 dBm
  • WeMos im EG, entgegengesetzte Hausecke -74 dBm
  • WeMos im Keller, entgegengesetzte Hausecke -73 dBm
  • WeMos im Keller, entgegengesetzte Hausecke, in einer Blech-Keksdose mit aufgelegtem Deckel -77 dBm
  • Für draußen ist mir das Wetter zu mistig...
Je nach Ausrichtung des WeMos (Antennenlage) mal 2 dBm mehr oder weniger. Egal wo er steht, reagiert der WeMos nach meiner Wahrnehmung "sofort". Mit dem Schaltaktor-Scatch werden ja neben dem Overhead nur ein paar Bytes hin- und hergeschoben. Wenn eine TCP-Verbindung steht, dann gehen die auch "sofort" durch. Die unterschiedliche Verzögerung, die es ja geben muss, wird wohl erst bei Datenmengen "spürbar", die um Potenzen größer sind.

Witzig, hätte ich selber nicht gedacht, dass das so fluppt. :mrgreen: Aber der Zwerg ist ja auch für's IoT gemacht...

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: WeMos D1 mini als WLAN-Sensor/-Aktor

Beitrag von dondaik » 01.02.2016, 18:33

kommt genau richtig, habe mir zwei letzte woche zwei board bestellt .... :-)
ggf hättest du noch ein beispiel für den umgekehrten weg als zb temperatur zur ccu. wäre super!!
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

braindead
Beiträge: 532
Registriert: 28.11.2014, 21:20
Hat sich bedankt: 5 Mal
Danksagung erhalten: 2 Mal

Re: WeMos D1 mini als WLAN-Sensor/-Aktor

Beitrag von braindead » 01.02.2016, 19:12

Danke für die Tests. Ich glaube ich werde mir auch mal einen bestellen.
Gruß,
Markus

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: WeMos D1 mini als WLAN-Sensor/-Aktor

Beitrag von dondaik » 01.02.2016, 19:59

dank eines tips von eugen rollt das test-bord hier an ..vorteil: usb/seriell adapter on board :
NodeMCU Lua WIFI Internet Development Board Based on ESP8266 NodeMCU LUA
Zuletzt geändert von dondaik am 02.02.2016, 07:17, insgesamt 1-mal geändert.
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

Benutzeravatar
m.yoda
Beiträge: 74
Registriert: 26.01.2016, 15:42
Danksagung erhalten: 1 Mal

Re: WeMos D1 mini als WLAN-Sensor/-Aktor

Beitrag von m.yoda » 01.02.2016, 21:17

@dondaik

Das WeMos-Feuchte-/Temperatur-Shield wollte ich mir eh als nächstes näher anschauen...

Ansonsten hast du mich etwas verwirrt: Was für Boards hast du denn nun bestellt? WeMos oder NodeMCU LUA? Falls NodeMCU LUA - welches genau, da gibt's ja viele, hast du vielleicht einen Link?

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“