Arduino Projekt: Funksteckdose steuern

Eine Funksteckdose wird meist mit einer Fernbedienung ausgeliefert. Wie man eine Funksteckdose mit einem Wemos D1 mini steuert und die Steckdose in das Intranet / Internet einbindet möchte ich in diesem Tutorial erläutern.

Funksteckdose mit Fernbedienung.
Funksteckdose mit Fernbedienung.

Hinweis : Die Steckdose selbst gibt 230V an Spannung aus, dieses ist gefährlich und kann zu schweren Verletzungen führen.
Daher bleibt das Gehäuse von einer Erweiterung unberührt.

 

Den Wemos D1 mini habe ich gleichnamigen Tutorial WEMOS D1 Mini – Übersicht ausführlich behandelt.

WEMOS D1 Mini
WEMOS D1 Mini

Ziel

Das Ziel dieses Tutorials soll es sein eine Funksteckdose mit einem Arduino anzusteuern (an / aus). Dazu soll in der ersten Ausbaustufe ein Taster mit Pulldown Widerstand die Steckdose An und Aus schalten. In der zweiten Ausbaustufe soll dieses über eine Webseite gelöst werden. Diese Webseite kann man je nach vorhandener Infrastruktur in das Internet einbinden.

Benötigte Komponenten

Für einen „fliegenden“ Aufbau benutze ich gerne Breadboards diese gibt es in verschiedenen Größen und haben den Vorteil das der Aufbau ohne Löten zu erledigen ist.

  • min. 1 Funksteckdose (mit Fernbedienung),
  • 433 MHz Sender & Empfänger,
  • 400 PIN Breadboard ,
  • Breadboardkabel,
  • Wemos D1 mini

433 MHz Sender & Empfänger

Der 433MHz Sender & Empfänger Modul besteht aus zwei Modulen.

433MHz Sender & Empfänger
433MHz Sender & Empfänger

Wie diese beiden Module funktionieren habe ich im Tutorial Arduino Tutorial 37: 433 MHz Sender & Empfänger beschrieben.

Benötigte Bibliothek

Für die Entwicklung des Sketches verwende ich die Bibliothek RCSwitch welche vom Git Repository des Entwicklers geladen werden kann.

Wie man diese Bibliothek in die Arduino IDE einbindet habe ich unter Arduino IDE, Einbinden einer Bibliothek erläutert.

Ermitteln der benötigten Daten von der Funksteckdose

Bevor man nun die Funksteckdose in den Zustand „an“ bzw. „aus“ versetzen kann muss man erst einmal die Daten auslesen. Dazu wird ein 433 MHz Empfänger benötigt.

Quellcode

Den nachfolgenden Sketch habe ich von den Beispielen der Bibliothek übernommen und aus den zwei Dateien in eine zusammengefasst.

Ausgabe auf dem seriellen Monitor

Wenn das oben genannte Sketch auf dem Arduino hochgeladen wurde, so kann man nun beim betätigen der Taste auf der Fernbedienung folgenden Inhalt auf dem seriellen Monitor auslesen.

Daten beim einschalten der Funksteckdose:

Daten beim ausschalten der Funksteckdose:

Es gibt nun 2 Möglichkeiten die Funksteckdose mit den emfangenen Daten zu steuern.

Tri-State

Mit dem Hexadezimalen Wert „Tri-State“, der Pulse Länge sowie dem Wert für Protokoll kann man die Funksteckdose wiefolgt steuern:

Binär

Bei einigen Funksteckdosen wird der Wert „Tri-State“ nicht ausgegeben daher muss dann auf den Binären Wert zurückgegriffen werden. Dazu wird die Funktion „rcSwitch.send(<<BINARY_WERT>>);“ statt „rcSwitch.sendTriState(<<TRI_STATE_WERT>>);“ verwendet.

Ausbaustufe I – „einfach“

In der Ausbaustufe I möchte ich nun einen einfachen Taster (mit Pulldown Widerstand) an den Wemos D1 mini anschließen um dann auf Tastendruck die Funksteckdose ein bzw. aus zuschalten.

433MHz Funksender mit Taster am Wemos D1 mini.
433MHz Funksender mit Taster am Wemos D1 mini.

Schaltung

Der Aufbau der Schaltung änder sich nur gering da hier der Taster mit Pulldown Widerstand hinzugefügt wird.

Aufbau der Schaltung, Ausbaustufe I mit Taster auf dem Breadboard.
Aufbau der Schaltung, Ausbaustufe I mit Taster auf dem Breadboard.

Video

Arduino - 433MHz Funksteckdose steuern "Ausbaustufe 1"

Quellcode

Download

 

Ausbaustufe II – „Webseite“

Der aufmerksame Leser meines Blogs wird sich sicherlich an das Tutorial zum Wemos D1 erinnern, dort habe ich eine LED über eine Webseite gesteuert. Wenn man nun dieses Sketch als Grundlage nimmt muss man „nur noch“ die Funktion für die Funksteckdose und den 433MHz sender implementieren (und dieses haben wir ja schon in der Ausbaustufe 1 abgehandelt).

Im weiteren verwende ich den Wemos D1 mini, dieser kleine Microcontroller hat den Vorteil das dieser auf das 400 PIN Breadboard passt und noch ordentlich Platz für weitere Module vorhanden ist.

Wemos D1 & Wemos D1 mini
Wemos D1 & Wemos D1 mini

Aufbau

Für dieses Beispiel werden folgende Komponenten benötigt:

  • 1x Wemos D1 mini
  • 1x 433MHz Funksender
  • 1x LED, 5mm, blau,
  • 1x 220 Ohm Widerstand
  • Breadboardkabel
  • 400 PIN Breadboard
Aufbau der Schaltung mit Wemos D1 mini und dem 433MHz Sendemodul.
Aufbau der Schaltung mit Wemos D1 mini und dem 433MHz Sendemodul.

Die Komponenten werden wie auf der folgenden Grafik verbunden.

Modul / PINAnschluss
 433MHz Funksender
VCC 5V
GNDGND
Datadigitaler PIN D8
LED
Kathode (abgeflachte Seite)GND
Annodedigitaler PIN D5
Funksender mit LED
Funksender mit LED

Quellcode

Ansicht der Seite im Mozilla FireFox

Webseite zum steuern der Funksteckdose
Webseite zum steuern der Funksteckdose

Video

Funksteckdose mit 433MHz Sendemodul und dem Wemos D1 mini steuern

Download

 

 

10 Gedanken zu „Arduino Projekt: Funksteckdose steuern

  • April 26, 2018 um 17:00
    Permalink

    Hallo Stefan,

    danke für die Anleitung!

    Mein Problem: Ich erhalte beim mehrmaligen Einschalten meiner Funksteckdose verschiedene binäre Codes. Und wenn ich einen davon sende, schaltet die Dose nicht. Was tun?

    sg

    Antwort
    • April 27, 2018 um 17:18
      Permalink

      Hallo,

      bitte prüfe doch welche Einstellung auf der Steckdose gewählt ist. Dort kannst du in der Regel durch einen Schiebeschalter den „Port“ wählen.
      Dann musst du auf der Fernbedienung noch die „richtige“ Taste drücken.

      Welches Gerät verwendest du denn? (Marke, Modellnummer)

      Gruß,

      Stefan

      Antwort
  • Mai 13, 2018 um 14:24
    Permalink

    Hallo,

    Ich habe deine Anleitung exakt verfolgt, jedoch passiert bei mir nichts.

    Ich hab alles ganz normal angeschlossen, habe auch schon alle Pins durchprobiert,
    jedoch erhalte ich keine Ausgabe auf meinem Seriellen Monitor, wenn ich eine Taste
    meiner Funkfernbedienung drücke.
    Was mir aufgefallen ist, dass wenn ganz schlicht ich eine LED einschalten möchte, muss ich bei „pinMode(, OUTPUT)“ den Pin auf D0, D1, …. setzen.
    Mit dieser Erkenntnis habe ich auch in Zeile 5 deines Codes die 0 auf „D0“ geändert,
    (Was wahrscheinlich keinen Sinn macht aber nun gut) und wie zu erwarten passierte nichts.

    Hast du eine Idee, woran dies liegen könnte, dass bei mir keine Ausgabe kommt ?

    MFG

    Antwort
      • Juni 13, 2018 um 19:33
        Permalink

        Hallo nochmal,

        ich benutze den „Wemos D1 mini“, so wie du eigentlich.

        Ein Update habe ich.
        Ich habe es geschafft, den Sender mit dem Empfänger kommunizieren zu lassen.
        Soweit so gut. Den Sender habe ich an einen „Funduino Mega2560“ angeschlossen, den Empfänger an den eben genannten ESP8266. Ich bekomme auf dem Wemos ohne Probleme die vom Mega2560 gesendeten Daten. Wenn ich jetzt aber wie blöd auf meinen Fernbedienungen rumdrücke, passiert nichts. Es werden keine Daten Empfangen. Sowohl von der Fernbedienung der Steckdosen, als auch der des Rollladens. Beides basiert eigentlich auf 433mhz. Bzw. auf 433,92mhz. Aber stellt das …,92mhz wirklich ein Problem dar? Ich habe mich eigentlich schlau gemacht und es hieß, es sollte passen. Oder irre ich mich gewaltig?

        Gruß,

        Seba M

        Antwort
  • Mai 19, 2018 um 17:16
    Permalink

    Wirklich toll und super beschrieben wie es funktioniert! Habe für mein Gartenhaus Funksteckdosen und habe dein Tutorial gleich umgesetzt. Nach ein paar kleineren Problemen mit der Schaltung die ich selbst beheben konnte, hat dann alles funktioniert.
    Danke für das Tutorial 🙂

    Antwort
  • Juni 18, 2018 um 10:06
    Permalink

    Hallo Stefan,

    Danke für die schöne Anleitung. An einer Stelle hast Du, glaube ich, einen Fehler. Folgende Zeilen müssen vertauscht werden:

    rcSwitch.setPulseLength(pulseLength);
    rcSwitch.setProtocol(protocol);

    Grund: setProtocol überschreibt die Pulslänge wieder, siehe https://github.com/sui77/rc-switch/issues/117

    Wenn die Pulslänge nicht allzusehr daneben liegt ist es vermutlich oft egal. Bei mir habe ich lange nachdem Fehler gesucht und es dann auf sdiese Art gelöst gekriegt.

    Felix

    Antwort
    • Juni 18, 2018 um 12:58
      Permalink

      Hi Felix,

      danke für den Hinweis. Auf den Fehler bin ich jedoch nicht gestoßen da bei mir alles Funktioniert hat.

      Gruß,

      Stefan

      Antwort
  • Dezember 30, 2018 um 09:41
    Permalink

    Hallo Stefan,
    ein wirklich gelungene Anleitung – das Schalten von meinen alten Schaltsteckdosen funktionierte auf Anhieb und ich war total angefixt!
    Leider hing sich mein Wemos nach einigen Minuten bis Stunden sporadisch auf, das ließ sich abschließend nur durch Reset oder Stecker ziehen beseitigen – und so habe ich mich auf Fehlersuche begeben und Folgendes rausgefunden:
    //Lesen der Anfrage vom Client
    String request = client.readStringUntil(‚\r‘);
    Dein obiger Programmcode ließ sich durch eine einfache nmap-Anfrage aus dem Tritt bringen,
    vermutlich bleibt client.readStringUntil beliebig lange auf Empfang wenn es sich nicht um eine html-Anfrage handelt. Nach Einbau eines Timeouts kehrte der Wemos wieder in den Empfangsmodus zurück. Evtl. kannst Du einen solchen timeout auch in Deinem Beispiel integrieren?
    Gruß
    Ralf

    Antwort
  • September 14, 2019 um 11:21
    Permalink

    Hallo Stefan,
    Du bist die Erlösung stundenlager Googlearbeit! Perfektes auslesen in allen Formaten!!
    Ein dickes DANKE!!

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.