Forum: Projekte & Code 433MHz Steckdosen-Webserver mit ESP8266


von E. T. (jadeaffenjaeger)


Angehängte Dateien:

Lesenswert?

Das Ganze war eher nur ein kleines Wochenendprojekt, aber um es nicht zu 
zeigen ist es irgendwie doch zu schick geworden.

Ich habe Funksteckdosen geschenkt bekommen, allerdings keine 
Fernbedienung dazu. Um sie benutzen zu können habe ich also die 
Kontrollsequenzen aus der (geborgten) Fernbedienung ausgelesen, einen 
Webserver auf einem ESP8266 aufgesetzt und lasse sie nun vom ESP mit 
einem 433MHz-Sender schalten.

Gibts zwar so ähnlich schon reichlich, ein paar Besonderheiten hat das 
Ganze aber doch:

- Die Website hat bringt einiges an CSS mit, damit sie nicht so 
langweilig aussieht
- Die Seite ist responsive. Bedeutet: Sie wird auf einem Smartphone mit 
anderen Parametern als auf einem Desktop-PC dargestellt, damit sie auf 
unterschiedlichen Endgeräten funktioniert.
- POST Requests, statt dem üblichen GET. Finde ich schöner, weil es die 
Adresszeile in Ruhe lässt.
- Die Index-Seite wird vom Dateisystem (SPIFFS) gelesen, aber ein paar 
Platzhalter werden dynamisch ersetzt, damit die Buttons je nach 
Schaltzustand ihre Farbe ändern können und man die Infos am unteren Rand 
sehen kann. Das hält den Code schön sauber, weil man nicht das komplette 
html-Dokument als String im Sourcecode hat, und macht es einfacher, 
Änderungen im HTML einzubauen.

Benutzt wird SPIFFS als Dateisystem und PlatformIO als Build Manager, 
außerdem der Arduino Core für den ESP8266.

Der Code, zusammen mit ein paar zusätzlichen Infos liegt auf GitHub:
https://github.com/jadeaffenjaeger/433home

: Bearbeitet durch User
von Sebastian E. (der_andere_sebastian)


Lesenswert?

Das ist ja ein schönes Projekt; erstaunlich daß noch niemand kommentiert 
hat.
Ist das zum Nachbau freigegeben?

Leider sehe ich auf GitHub keine weiteren Infos über die Hardware. Wie 
ist der 433 MHz-Sender an den ESP8266 angebunden? Ist das Timing ein 
Problem? Ich hatte mich schon länger gefragt, ob ein ESP8266 
Impulsfolgen im Bereich <1 ms erzeugen kann, ohne durch Interrupts 
gestört zu werden. Kann man andere Funkprotokolle hinzufügen?

Ansonsten sieht das echt schick aus.

von Joachim S. (oyo)


Lesenswert?

Kleiner Hinweis @Threadstarter:
Ich habe eben mal die Github-Seite überflogen - meiner Vermutung nach 
hast Du das verwendete Protokoll leicht falsch interpretiert, auch wenn 
es in der Praxis keinen grossen Unterschied macht:

Das letzte, vermeintlich 25ste Bit ist kein (variables) Daten-Bit, 
sondern besteht aus einer Zeiteinheit (bei Dir also ca. 275µs) "high" 
gefolgt von (üblicherweise) 31 Zeiteinheiten "low"; in den Datasheets 
wird das manchmal "Sync-Bit" genannt, und nach jeder Wiederholung der 
eigentlichen Daten gesendet.

Sebastian E. schrieb:
> Leider sehe ich auf GitHub keine weiteren Infos über die Hardware. Wie
> ist der 433 MHz-Sender an den ESP8266 angebunden?

Das geht bei allen derartigen Lösungen üblicherweise über einen 
beliebigen GPIO-Pin, an den ein üblicher 433MHz ASK/OOK-Transmitter 
angeschlossen ist, der um 1 Euro kostet.
Kleines Problem dabei normalerweise: Die Sendestärke der Dinger ist umso 
höher, je höher die angelegte Spannung ist; Für maximale Reichweite 
sollten sie mit 12V betrieben werden. Da die GPIO-Pins des ESP8266 aber 
nur mit 3.3V arbeiten, muss man entweder den 433MHz-Sender ebenfalls mit 
3.3V laufen lassen, wodurch sich die Sendestärke und Reichweise massiv 
reduziert, oder man muss die 3.3V-Ausgänge des ESP per Levelshifter auf 
12V erhöhen.

> Ist das Timing ein
> Problem? Ich hatte mich schon länger gefragt, ob ein ESP8266
> Impulsfolgen im Bereich <1 ms erzeugen kann, ohne durch Interrupts
> gestört zu werden.

Ist meines Wissens nach kein Problem, so lange das kürzeste Timing über 
ca. 100µs liegt, was m.W.n nach bei allen üblichen 433MHz-Protokollen 
der Fall ist.

> Kann man andere Funkprotokolle hinzufügen?

Ja, grundsätzlich könnte man damit wohl (fast?) jedes unidirektionale 
Protokoll verwenden, das Infrarot- oder 433MHz ASK/OOK-Signale benutzt.

> Ansonsten sieht das echt schick aus.

Stimmt. Nettes kleines Projekt!

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

sehr schönes Projekt, muß ich mir mal genauer anschauen.

Joachim S. schrieb:
> Da die GPIO-Pins des ESP8266 aber
> nur mit 3.3V arbeiten, muss man entweder den 433MHz-Sender ebenfalls mit
> 3.3V laufen lassen, wodurch sich die Sendestärke und Reichweise massiv
> reduziert, oder man muss die 3.3V-Ausgänge des ESP per Levelshifter auf
> 12V erhöhen.

Der Data-Eingang der billigen 433MHz-Sender geht üblicherweise über 
einen Widerstand auf die Basis eines Transistors, der dann im 
Kollektorkreis den Sender einschaltet.

Zum Ansteuern reichten bei mir die 3,3V des ESP8266 bisher aus, die 
Reichweite des Senders mit 5V Betriebsspannung deckt zumindest die 
Funksteckdosen in einem Zimmer hier sicher ab.

Ich habe einen 433MHz-Sender in einer Sonoff-WLAN-Steckdose 
untergebracht, Software auf dem ESP ist eine eigene (auch Arduino-IDE), 
Protokoll ist MQTT und am "anderen Ende" läuft ein RasPi mit Mosquitto 
und FHEM.

Gruß aus Berlin
Michael

von E. T. (jadeaffenjaeger)


Lesenswert?

Freut mich, dass das Projekt gefällt, und über potentielle Nachbauer 
freue ich mich ganz besonders! Andere Funkprotokolle hinzufügen ist kein 
Problem, nur eben Handarbeit. Die ganze Steuerung findet in der 
switches.ino-Datei statt. Je nach Protokoll müsste man da evtl. ein paar 
Zeilen umschreiben...

Wie schon richtig bemerkt steigt die Sendeleistung des 433MHz-Moduls, je 
höher die Eingangsspannung am Sender ist. Ich wollte die Schaltung 
allerdings so unkompliziert wie möglich halten, deshalb sieht meine 
Lösung so aus:

- Der Sender bekommt genau wie der ESP 3,3V Versorgungsspannung. Das 
spart die zweite Spannung auf der Platine und einen zusätzlichen 
Treiber.
- An den Ausgang ist ein 17,3cm langer Draht als Viertelwellendipol 
gelötet
- Da auf diese Weise gelegentlich Befehle verloren gehen, wird jede 
Sequenz zehnmal nacheinander gesendet, um die Chance zu erhöhen, dass 
eine vollständige ankommt.

In meiner Zweizimmerwohnung (Geräte sind über alle Zimmer verteilt) 
funktioniert das bis jetzt absolut zuverlässig. Hatte noch kein einziges 
Mal, wo etwas nicht geschaltet hätte. Wenn man über mehrere Etagen oder 
durch dicke Wände will, kommt man um höhere Spannung aber wohl nicht 
herum.

Mit der Mikrosekunden-Delay Funktion von der Arduino IDE klappt das 
Timing problemlos. Ich nehme an, die Steckdosen haben auch keine 
sonderlich strikten Anforderungen.

Wenn ich mal wieder etwas mehr Zeit habe soll noch ein NTP-Client dazu 
kommen, und ein Interface, das es erlaubt, Steckdosen auch zu bestimmten 
Zeitpunkten zu triggern. Das wird dann meinen Radiowecker ersetzen.

@Joachim: Interessant! Hast du irgendwo einen Link dazu? Im Moment ist 
das tatsächlich reines Replay dessen, was aus der Fernbedienung kommt. 
Ohne irgendwelches Reverse Engineering.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.