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
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.
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!
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
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.