Im nachfolgenden Artikel beschreibe ich das Steuern gängiger Funksteckdosen (wie z.B. Elro 440) mit dem günstigen Wlan-SoC ESP8266 (bzw. dem darauf basierenden NodeMCU-Board). Dabei erfolgt die Umsetzung wie bei der Lösung mit dem Raspberry Pi inklusive Webinterface, das auch über HTTP-Requests, wie z.B. zur Sprachsteuerung über AIVC oder dem Steuern über die NetIO-App benötigt, steuern lässt. Damit lassen sich für einen Gesamtpreis von unter 10€ vorhandene Funksteckdosen vernetzen.

 

1. Benötigte Hardware

  • ESP8266 (hier: ESP-201) oder NodeMCU-Entwicklungsboard (hier: V1.0): ca. 5€
  • 433 MHz-Sender + Jumper-Kabel: ca. 1€
  • Netzteil (für NodeMCU-Board ein Micro-USB-Netzteil, für ESP-201 3V Netzteil) + USB-Kabel: ca. 4€

→ insgesamt ca. 10€

Für den ESP-201 benötigt ihr zusätzlich noch einen USB-to-UART-Adapter (3 Volt-Variante!), welchen es für 1-2€ in China gibt (dafür ist der ESP-201 etwas günstiger als das NodeMCU-Entwicklungsboard). Habt ihr kein 3V Netzteil, so könnt ihr behelfsweise auch die Stromversorgung des FTDI-Adapters verwenden, welche ihr mit einem Elko (hier verwendet: 220µF) stützt. Das ist aber nur eine Behelfslösung.


Hinweis: Kauft euch am Besten keinen Billig-FTDI-Clone aus China – damit habe ich bereits schlechte Erfahrungen gemacht, was die Qualität betrifft. Gerade am Anfang kann es frustrierend sein, wenn die Kommunikation einfach nicht stabil laufen will, egal, wie man die Stromversorgung und Verkabelung macht. Wenn es möglichst günstig sein soll, greift besser zu Adaptern mit CP2102- oder CH340-Chip.


(+ geeignete Funksteckdosen; hier verwendet: Elro AB440S [analog zum Raspberry Pi-Tutorial])

 

2. Die Verkabelung

Beginnen möchte ich dabei mit dem Anschluss des 433 MHz-Transmitters an das NodeMCU-Board, da dieser sehr simpel über 3 Jumper-Kabel erfolgt.

Der Anschluss ist nachfolgendem Schaltplan zu entnehmen:nodemcu_433_transmitter

In tabellarischer Form:

NodeMCU 433 MHz Transmitter
GND GND
3V3 VCC
D4 Data

Beim ESP-201 sieht der Anschluss etwas komplizierter aus, was daran liegt, dass hier noch der FTDI-Adapter sowie ein Netzteil (bzw. hier ein Stützkondensator) zum Einsatz kommt:esp_201_433_transmitter

In tabellarischer Form:

ESP-201 FTDI-Adapter 433 MHz Transmitter
RX TX
TX RX
3.3V VCC
GND GND
IO15 GND
IO0 GND
CHIP_EN VCC
3.3V VCC
GND GND
IO2 Data

Hinweis (danke an Tobi!): Wenn ihr das Programm auf den ESP-201 übertragen habt und ihr den ESP-201 nach Trennung vom Strom damit betreiben wollt, so müsst ihr die Verbindung zwischen IO0 und GND trennen, da der ESP8266 sonst in den Flash-Modus startet, statt das bereits darauf vorhandene Programm zu starten. Eventuell hilft es bei Problemen auch, den IO0 mit 3.3V zu Verbinden, um den Flash-Modus zu unterdrücken.


[Update 07.12.2015] Wollt ihr den ESP-201 mit einer externen Stromversorgung betreiben (empfohlen!), könnt ihr den Schaltungsaufbau nachfolgendem Bild entnehmen:433_ywrobotEs sollte auch das kleine Modell ESP-01 reichen, um die Funksteckdosensteuerung umzusetzen. Der Aufbau der entsprechenden Schaltung (mit externer Stromversorgung) ist nachfolgendem Bild zu entnehmen:

 

2.1 Exkurs: Hintergrundinfos zu Pinbelegung

Vorweg: Dieser Teil ist nicht relevant, wenn ihr das Tutorial nur nachbauen wollt. Ihr könnt diesen Teil also überspringen. Für den, den es interessiert, habe ich hier ein PinOut vom NodeMCU-Board:nodemcu_pinout_700

Wie man sehen kann, entspricht der D4-Pin dem GPIO2. Daher der unterschied an dieser Stelle bei der Verkabelung im Vergleich zum ESP-201.

Das entsprechende PinOut des ESP-201 findet ihr auf dieser Seite.

 

3. Einstellen der Funksteckdosen

Da dieser Schritt komplett gleich, wie bei der Umsetzung mit Raspberry Pi abläuft, habe ich die entsprechende Passage übernommen:

Aber zuerst solltet ihr noch den Hauscode bei euren Dosen ändern, nicht, dass euer Nachbar zufällig auch diese Steckdosen hat und ihr euch diese gegenseitig an- und ausschaltet. Dazu öffnet ihr einfach mit einem Kreuz-Schraubendreher die Dosen hinten und legt die Dip-Schalter mit einem Code eurer Wahl um. Also z.B. hoch, hoch, unten, hoch, unten.Steckdose

Diese Kombination solltet ihr bei allen Steckdosen eingeben und dann auch bei dem Handsender. Mit diesem könnt ihr dann auch überprüfen, ob alles soweit schon funktioniert.Fernbedienung

 

4. Einrichten der Entwicklungsumgebung

Bei diesem Projekt verwende ich als IDE die Arduino IDE, welche es einfach ermöglicht, auch ESP8266-Modelle und NodeMCU-Boards mit Software zu versorgen.

Dazu muss die IDE in der Version 1.6.5 (oder neuer) auf eurem Rechner installiert sein. Öffnet die IDE und öffnet den Punkt „Voreinstellungen“ unter „Datei“ (unter Umständen variiert die Benennung ja nach IDE-Version und Betriebssystem etwas).arduino_ide_voreinstellungen

Im sich nun öffnenden Fenster „Voreinstellungen“ gebt ihr unten im Textfeld neben „Additional Boards Manager URLs“ die folgende URL ein:

arduino_ide_voreinstellungen_2

Klickt auf „OK“ und startet die IDE neu. Geht dann auf „Werkzeuge“ → „Platine“ → „Boards Manager…“ und tippt in das Suchfeld „esp“ ein. Klickt bei „esp8266“ auf „Install“.board manager

Die benötigten Komponenten werden nun heruntergeladen und installiert.

Nun solltet ihr unter „Werkzeuge“ → „Platine“ unten ein paar neue Einträge für ESP8266-Modelle haben. Wählt für den ESP-201 „Generic ESP8266 Module“ aus und für ein NodeMCU-Board den entsprechenden Eintrag eures Modells (aktuell verkaufte Boards sind in der Regel 1.0er Versionen). arduino_ide_board

Die restlichen Einstellungen („CPU Frequency“ und „Upload Speed“) könnt ihr vom Screenshot übernehmen. Als Port wählt ihr den seriellen Anschluss aus, unter dem sich der ESP8266 am PC angemeldet hat. Startet dazu am einfachsten einfach die IDE, ohne das jeweilige Board eingesteckt zu haben, schaut dann, welche Ports zur Verfügung stehen und schließt das Board anschließend an den PC an. Es sollte nun ein neuer Port zur Auswahl stehen, welchen ihr anklickt.


Hinweis für Mac-Nutzer (bzw. für Nutzer anderer Betriebssysteme, bei denen der Port nach Anschluss des NodeMCU-Boards nicht angezeigt wird): Unter OS X „El Capitan“ erhielt ich nach Anschluss des NodeMCU-Boards mit CP2102-Chip keinen neuen Port angezeigt. Es stellte sich heraus, dass der entsprechende Treiber des Herstellers noch installiert werden musste. Dieser ist für alle verfügbaren Betriebssysteme auf dieser Seite zu bekommen. Habt ihr bei eurem NodeMCU-Board also auch das Problem, dass kein Port angezeigt wird, müsst ihr vermutlich noch den Treiber installieren. Da dieser (je nach Betriebssystem) nur wenige Kilobyte bis Megabyte groß ist, geht das allerdings recht zügig.


Damit habt ihr eure Arduino IDE erfolgreich erweitert, um ESP8266-Module programmieren zu können. Was jetzt noch fehlt für die Steckdosensteuerung ist eine Bibliothek namens „RCSwitch“. Diese ist hier erhältlich. Ladet sie euch herunter und installiert sie für die Verwendung mit der Arduino IDE. Wie das geht ist detailliert auf dieser Arduino-Seite beschrieben.

 

5. Der Sketch (= Programm)

Den benötigten Sketch habe ich so gestaltet, dass er einfach an das eigene Setup an Funksteckdosen angepasst werden kann. Lediglich euer Hauscode der Funksteckdosen, die jeweiligen Gerätecodes und Namen für die einzelnen Steckdosen müssen eingetragen werden. Daraus wird dann dynamisch ein kleines Webinterface erstellt.webinterface_erweitert

Das Interface ist sehr einfach gehalten, ich habe aber den .css-Teil in eine eigene Variable gepackt, sodass ihr es einfach anpassen könnt. Auch die HTML-Komponenten lassen sich natürlich noch an eure Wünsche anpassen.

Mein Sketch sieht folgendermaßen aus:

Tragt in die Variable „housecode“ den Hauscode eurer Funksteckdosen ein (Dip-Schalter oben entspricht einer „1“ und Dip-Schalter unten einer „0“) und in die Variable „socketcodes“ alle Codes eurer Steckdosen (A-E) in gleicher Form wie beim Hauscode. In die Variable „socketnames“ könnt ihr euren Steckdosen dann noch Namen geben, die im Webinterface angezeigt werden.

Außerdem müsst ihr bei den Variablen „ssid“ und „password“ die jeweiligen Daten eures WLAN-Netzes eingeben.

Übertragt den Sketch nun auf euren ESP8266 und öffnet den seriellen Monitor der Arduino IDE. Stellt dort die Baudrate auf 115200 und wartet, bis sich euer ESP8266 mit dem WLAN verbunden hat. Ihr solltet nun die IP-Adresse angezeigt bekommen, die eurem ESP8266 zugewiesen wurde. serial_monitor_esp8266_socket

Öffnet diese in einem Browser eurer Wahl (der PC oder anderes Gerät, das ihr hierzu verwendet, muss natürlich im gleichen Netzwerk sein). Ihr solltet nun das oben abgebildete Webinterface sehen. Bei einem Klick auf den jeweiligen Button sollten sich nun eure Funksteckdosen bequem schalten lassen.


Hinweis: Die Steuerung ist im Übrigen nicht nur via Browser möglich, sondern auch mittels HTTP-Request auf die entsprechende Adresse. Damit könnt ihr eure Steckdosen beispielsweise auch per Tastatur-Shortcut, per Sprachsteuerung unter Android, per Android oder iOS Widget oder auch via NetIO steuern – also all das, was mit der Umsetzung via Raspberry Pi auch möglich ist.


Das Webinterface hat aktuell noch keine Statusspeicherung implementiert, auch eine zeitverzögerte Schaltung habe ich noch nicht eingebaut. Ich denke aber, dass der Sketch einfach ausbaubar ist und als Grundlage für eigene Umsetzung ausreichende Grundfunktionen liefert. Gerne dürft ihr den Sketch erweitern und mich auch über erweiterte Webinterfaces benachrichtigen, wenn ich diese im Artikel verlinken soll.
Ich wünsche euch viel Erfolg und Spaß bei der Umsetzung! Bei Fragen, Problemen oder Anregungen könnt ihr natürlich wie immer das Kommentarfeld unten verwenden.