Home > Technologie > Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

0
Advertisement

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Dieses Projekt ist ein ESP8266-basierter "Home Automation" -Server, der mehrere RF-gesteuerte Steckdosen auf 315 MHz und 434 MHz steuern kann. Mit zwei Empfängern und zwei Sendern (ein Paar für jede Frequenz), kann es am häufigsten verfügbaren ferngesteuerten Steckdosen zu steuern. Es gibt eine Tonne von Ressourcen im Web für die Schnittstelle mit dieser Art von Steckdose. Ich habe einfach erweitert das Konzept für die Arbeit mit beiden gemeinsamen Frequenzen und fügte eine Web-Schnittstelle.

Die Grundidee ist die Verwendung von 315 MHz und 434 MHz Empfängern, um Signale von allen Fernbedienungen ein- und auszuschalten und genügend Informationen im Flash-Speicher des Mikrocontrollers zu speichern, um diese Signale mit dem entsprechenden Sender wieder abspielen zu können. Die Benutzeroberfläche besteht aus einer Handvoll einfacher Webseiten, die vom ESP8266 bedient werden. Über diese Schnittstelle können Sie einen Namen und einen Standort für jede entfernte Einheit angeben. Es ermöglicht auch die Steuerung einer oder aller Einheiten auf einmal.

Im Laufe der Jahre haben meine Frau und ich mehrere verschiedene RF-kontrollierte Steckdosen für den Einsatz auf Innen-und Außenbereich Weihnachtsdekoration gesammelt. Einige davon waren 315 MHz und 434 MHz. Einige waren interoperabel und / oder umprogrammierbar, aber einige waren zu einem festen Signal hartcodiert. Als Ergebnis mussten wir mehrere verschiedene Fernbedienungen jonglieren. (Ich weiß nicht, über Sie, aber wenn ich N-Fernbedienungen in der Hand haben, wird es immer mir N Versuche, um die eine, die ich brauche!) Letztes Weihnachten beschloss ich, dieses Problem durch den Aufbau eines universellen RF Outlet Remote Control Server zu lösen . Anfang 2015 begann ich, die Teile zu sammeln, die ich brauchte. Dann wurde ich abgelenkt und kam erst Anfang November zurück. Hoppla! Was plötzlich genug Zeit war, war nicht!

Schritt 1: Was Sie benötigen

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Die Teile, die ich verwendete, waren eine Kombination von Sachen, die ich an Hand und passende Einzelteile von meinen Lieblingsverkäufern hatte. Wenn Sie dieses Projekt reproduzieren möchten, werden Sie am Ende mit einem etwas anderen Satz von Komponenten. Deshalb ist dieses Instructable eine Richtlinie und keine Schritt-für-Schritt-Anleitung.

ESP8266-12 ( Adafruit Huzzah )
315 MHz - Empfänger ( Sparkfun )
315 MHz Transmitter ( Sparkfun )
434 MHz - Empfänger ( Sparkfun )
434 MHz Transmitter ( Sparkfun )
Projektfeld ( SeeedStudio )
Etwa 90-Grad-Steckerleiste (für den Programmierkopf auf dem ESP8266)
Protoboard / stripboard ( Radio Shack Universal - Component Board )
Versuchsaufbau freundliche Micro-USB - Buchse ( Adafruit Breakout Board )
Vier NPN-Transistoren (2N2222 oder gleichwertig)
Zwei taktile Druckknöpfe
Trinkhalm (Die starre Art, die in Wasserflaschen verwendet wird)
Verschiedene Gummidurchführungen (ich habe eine Schachtel mit verschiedenen Größen, die ich bei Harbor Freight bekommen habe) Sehr praktisch)
Verschiedene Widerstände
5V Wandleuchte mit Micro-USB-Stecker (mind. 300mA)
Verschiedene Drähte und Schrauben
FDTI-Kabel oder Freund für das Hochladen von Code auf dem ESP8266

Schritt 2: Verdrahten Sie es

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Das genaue Layout Ihres Boards wird wahrscheinlich anders sein als meines, da ich ein "Universal Component Board" von Radio Shack verwendet habe. Dieses Board war eigentlich eine sehr schöne Passform für dieses Projekt, da das symmetrische Layout der Busse mir erlaubt, die ESP8266 in der Mitte und die beiden Empfänger / Sender-Paare auf beiden Seiten zu setzen. Sie können die gleiche Sache mit einem Stripboard zu erreichen, aber müssen einige Spuren schneiden. Auch in der Mitte der Platine waren der Mikro-USB-Stecker und die beiden taktilen Tasten. Diese brechen die beiden GPIOs, die für die Programmierung des ESP8266 verwendet werden.

Der 315 MHz Empfänger und der Sender befinden sich auf einer Seite des ESP8266 und die 434 MHz Einheiten auf der anderen Seite. Jeder Empfänger und Sender erhält ihre Energie durch einen Transistor geführt, so dass sie ausgeschaltet werden können, wenn nicht in Gebrauch.

Es gibt kaum genug GPIO-Pins auf der ESP8266-12-Platine, um die Transistoren, HF-Module und Drucktasten zu handhaben. Aber "barely enough" ist auch als "genug", also drücken Sie auf ...

GPIO-Anschlussbelegungen

  15 - Basis des Transistors für den 315 MHz Empfänger 2 - Datenausgangsstecker des 315 MHz Empfängers (benötigt Spannungsteiler) 0 - Tastschalter 4 - Daten im Pin des 315 MHz Transmitters 5 - Basis des Transistors für den 315 MHz Transmitter
  13 - Basis des Transistors für den 434 MHz Empfänger 12 - Datenausgangsstecker des 434 MHz Empfängers (benötigt Spannungsteiler) 14 - Daten im Pin des 434 MHz Transmitters 16 - Basis des Transistors für den 434 MHz Transmitter RST - Taktiler Taster


E / A

Die beiden Empfänger haben einen digitalen 5V-Ausgang. Da die ESP nicht 5V-tolerant ist, müssen Sie diese mit einem Spannungsteiler nach unten schneiden, um eine Beschädigung des uC zu vermeiden. Die beiden Sender verfügen über digitale Eingänge, die nominell 5V sind, aber mit 3.3V gut funktionieren, so dass sie direkt von den GPIO-Pins angesteuert werden können.

Adafruit's Huzzah Board hat zwei kleine Knöpfe, eine an GPIO0 gebunden und die andere an Reset. Sie müssen beide drücken, um neuen Code in das Board hochzuladen. Weil ich diese Drucktasten zu klein finden, um bequem zu benutzen, fügte ich Drucktasten zu GPIO0 und dem RST Knopf hinzu, um das Leben weniger frustrierend zu machen. Ich habe einfach einen Knopf zu jedem dieser Pins und der anderen Seite der Tasten zu GND verbunden. Dann positionierte ich die Tasten am Ende der Platine, wo ich sie leicht erreichen konnte.

Power

Der ESP8266 Huzzah akzeptiert eine Reihe von Eingangsspannungen auf Vbat und speist sie über einen an Bord befindlichen 3.3V Regler. Da die HF-Einheiten 5V akzeptieren, entschied ich mich für eine 5V-Wandleuchte, um die Platine mit Strom zu versorgen. Diese kam über einen Mikro-USB-Stecker und wurde an die ESP und die HF-Einheiten geleitet. (Vorsicht! - Sie können keine 5V zu den GPIO-Pins auf dem ESP, aber das ist leicht mit Spannungsteiler adressiert werden.)

Um den Stromverbrauch und HF-Störungen zu reduzieren, wollte ich die HF-Geräte nicht kontinuierlich verlassen, sodass ich sie mit vier Transistoren steuerte.

Sind die Transistoren notwendig?

Vielleicht nicht. Ich konnte nicht finden, ein Datenblatt für die HF-Einheiten, die endgültig gab eine max aktuelle ziehen. Nach meinen Messungen habe ich mit meinem DMM gemacht, diese Boards ziehen von 8 - 12 mA. Dies ist sehr nahe an der Grenze, was die ESP8266 GPIO-Pins Quelle, so dass ich gewählt, um sie ein-und ausschalten mit NPN-Transistoren. Könnte ich mit dem Fahren der HF-Einheiten direkt aus dem ESP weggekommen sein? Ich war nicht sicher, also wählte ich auf der Seite der Vorsicht irren.

Riesen-Fehler?

Okay ... Zeit zu 'fess up. Ich bin ein Software-Kerl und bin ein Neuling mit Hardware. So kann mein Schaltungsentwurf völlig durcheinander gebracht werden. Um die Stromversorgung zu den vier HF-Einheiten zu steuern, verband ich jede von ihnen direkt mit dem 5V-Bus. Dann habe ich ihre Masseanschlüsse durch den Kollektorstift eines NPN-Transistors geführt und den Emitter dieser Transistoren mit Erde verbunden. Wenn das uC ein Signal an die Basis liefert, kann es Strom durch die HF-Einheit, dann durch den Transistor und zu Masse fließen. Gibt es einen besseren Weg, dies zu tun? Sollte ich PNP-Transistoren verwendet haben? Setzen Sie die Transistoren auf die 5V-Seite statt der Erdseite? Fühlen Sie sich frei zu kommentieren, wie ich diesen Teil hätte besser machen können.

Schritt 3: Antennen (oder Antennen, wenn Sie es vorziehen)

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Die empfohlene Antennenlänge für 315 MHz beträgt 24 cm und bei 434 MHz etwa 17 cm. Ich schneide einige isolierte Draht zu den Längen und setzen einige Hitze schrumpfen auf ein Ende jeder. Dann lötete ich jeden Draht, so dass er mit Antenneneingängen des entsprechenden Empfänger / Sender-Paars verbunden war.

Zuerst dachte ich, dass ich in der Lage wäre, nur die beiden Drähte in der Projektbox zu stopfen und nicht darum zu kümmern, wie sie geroutet wurden. Das war, was ich sah in den Fernbedienungen ich zerlegt, so dass ich dachte, es würde für mich zu arbeiten. Junge, war ich falsch! Der Sender Bereich, wenn ich es, die schrecklich war - weniger als ein Meter. Die Reichweite des Empfängers war nicht viel besser.

Ein wenig Experimentieren führte mich zu erkennen, dass die Reichweite dramatisch verbessert, wenn die Antenne gehalten wurden gerade nach oben. In dieser Konfiguration war ich in der Lage, Empfänger zu erreichen, die in meinem Haus und im Vorgarten stationiert waren. Da ich nicht auf die Basisstation laufen und die Drähte halten wollte, während ich versuchte, die Lampen ein- und auszuschalten, entschied ich mich für eine Art Antennenmast.

Vorbildlicher Mast

Als Test, um sicherzustellen, dass es wie erwartet funktionierte, nahm ich eine fadenscheinige Fast-Food trinken Stroh und lief beide Antenne Drähte bis durch sie. Dann klebte ich das Stroh an die Spitze der Box, mit genug Band, um es stehen (kinda) vertikal. Es war hässlich, aber funktionierte wie erwartet.

Tatsächlicher Mast

Ein Strohhalm schien gut genug zu funktionieren, aber ich wollte etwas ein bisschen stabiler als der fadenscheinige, der im Prototyp verwendet wurde. Während ich war einkaufen, sah ich eine Schachtel mit Ersatz-Strohhalme für Wasserflaschen. Diese waren viel steifer und genau die richtige Länge, so dass ich packte eine Schachtel mit fünf.

Um den Mast an der Box anzubringen, bohrte ich ein Loch in die Plastikoberseite und steckte eine kleine Gummidurchführung ein. Dieses Loch war nur etwas zu groß für das Stroh, aber ein wenig von Schrumpfschlauch machte es genau richtig. Dann legte ich eine andere Tülle an der Unterseite des Strohs, um Reibung mit der Leiterplatte zur Verfügung zu stellen. Ein paar Kerben in der unteren Tülle und das Stroh, um die Antennen durchlaufen, und alles war golden. Die Ösen halten das Stroh an Ort und Stelle durch Reibung und die Antenne Drähte hatte einen schönen Mast zu laufen.

Leider würden die Drähte nicht gerade nach oben im Mast stehen und hatten eine Tendenz zu fallen. Glücklicherweise hatte ich einige kleinere Ösen, die genau die richtige Größe zu passen * innen * der Stroh ... Mast. Diese gab den Drähten gerade genug Reibung, um sie straff zu halten.

In den Bildern sehen Sie, dass die Antennendrähte so aussehen, dass sie die gleiche Länge haben. Das ist, weil ich Wärmeschrumpfen verwendet, um zwei Erweiterungen zu befestigen, die ich verwende, um die Drähte oben durch den Mast zu ziehen. Diese sind nicht elektrisch mit den Antennen verbunden.

Schritt 4: Software

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Dual Frequency RC Auslass Webserver

Software. Ich liebe es. Seit über 30 Jahren beruflich. Echtzeit. Flugsteuerung. Simulationen. Geschäftsanwendungen. Wissenschaftliche Anwendungen. Ich liebe sie alle. Davon abgesehen, für meine Heimprojekte, verbringe ich viel mehr von meiner Anstrengung auf die Hardware als die Software. Dies ist ein Hobby und was ich tun, um nach dem Schreiben von Software den ganzen Tag zu entspannen. Die Software für dieses Projekt könnte kompletter, robuster und hübscher, aber das ist nicht, wie ich bin auf der Suche, um meine Zeit auf ein Heim-Projekt zu verbringen.

Benutzer interface

Da dieses Projekt um eine ESP8266-12 gebaut ist, dann ist die offensichtliche Lösung für die Benutzeroberfläche eine Reihe von Webseiten. Ich habe nicht alles Phantasie, nur warf zusammen einige HTML5, CSS und Javascript in Kate. Dies war mein erstes Mal mit dem ESP8266 für alles andere als ein triviales Beispiel und es gab einige Macken und Fallstricke musste ich stolpern meinen Weg durch, bevor ich alles funktionierte.

Ich hatte keine HTML in mehr als zehn Jahren geschrieben und wollte ausprobieren HTML5. Um das Hin- und Herschreiben des Schreibens, Kompilierens und Hochladens auf den ESP8266 zu vermeiden, habe ich zuerst alle Webseiten auf meinem Laptop mit dem SimpleHTTP Pythonmodul als Server prototypisiert. Dies gab mir sehr schnell Turn-around, während ich klopfte die HTML-Rost aus.

Aus den Bildern können Sie sehen, dass die Hauptseite eine Liste von bekannten Geräten und Tasten zum Auswählen / Abwählen und Ein- und Ausschalten ist. Es gibt auch Schaltflächen, die Sie zu Seiten führen, um ein neues Gerät zu definieren oder ein bestehendes zu bearbeiten.

Um ein neues Gerät zu definieren, verwenden Sie die Schaltfläche "Record 315" oder die Schaltfläche "Record 434". Hoffentlich wissen Sie, welche Frequenz Ihr Gerät verwendet, aber wenn nicht, versuchen Sie nur ein und dann das andere. Wenn Sie zuerst das falsche wählen, wird es kein Signal sehen, also kein Schaden getan.

Die Entwicklungsumgebung

Der Code für dieses Projekt wird in C ++ unter Verwendung von Arduino-Bibliotheken geschrieben und mit der Arduino-Befehlszeilenschnittstelle kompiliert und hochgeladen.

Als C ++ - Entwickler von Tag, das ist meine bevorzugte Sprache zu Hause. Ich habe mich erstmal vor zwei Jahren mit Embedded-Systemen auf der Bühne beschäftigt, mit der Plattform, die Menschen entweder lieben oder hassen - der Arduino Uno. Wie jeder andere professionelle Programmierer, der die Arduino IDE für mehr als fünf Minuten verwendet hat, suchte ich schnell nach einer anderen Lösung. Nachdem ich die verfügbaren Makefiles und das Eclipse-Plugin ausprobiert habe, habe ich mit Kate und einem Python-Skript die Arduino-Befehlszeilenschnittstelle aufgerufen. Das erlaubte mir, ihre IDE ganz zu graben und machte mich viel glücklicher.

Bevor es noch eine sinnlose Debatte darüber, ob Arduino ist ein geeignetes Ökosystem zu arbeiten, lassen Sie mich darauf hinweisen, dass es drei sehr schöne Dinge über die Arbeit mit diesem Toolset:

  • Der Reichtum an Open-Source-Bibliotheken für die Anbindung verschiedener Hardware-Komponenten
  • Die Fähigkeit, nicht-Arduino-Boards (wie die ESP8266) in ihr Build-System zu integrieren
  • Eine Hardware-Abstraktionsschicht, mit der Sie (mehr oder weniger) unabhängig vom verwendeten Mikrocontroller programmieren können.

Ja, ich weiß, dass viele sehr stimmliche Leute da draußen auf das Arduino-Ökosystem mit Verachtung schauen und behaupten, dass jeder, der nicht direkt auf die hardware-spezifische Schnittstelle programmiert und jede Bibliothek von Grund auf neu schreibt, kein realer Programmierer ist. Ich bin anderer Meinung, aber da das Thema schon vor langer Zeit zu Tode getreten ist, können Debatten an / dev / null gesendet werden.

Funktionelles Prototyping

Alle meine ursprüngliche Prototyping wurde auf einem Arduino Uno mit meinem Laptop verbunden und mit Serial, um Befehle aus der Tastatur lesen und Ergebnisse auf dem Bildschirm. Dies ermöglichte mir, auf das Lesen, Speichern und Wiederholen der RF-Befehle konzentrieren, ohne sich von Problemen mit WiFi und dem Web-Interface zu verlieren.

* Pro Tip * - Von Anfang an, schrieb ich die Kernlogik als ein Satz von Stand-alone-Klassen völlig unabhängig von dem, was Benutzeroberfläche wurde durch den Testfahrer verwendet. Während ich Prototyping war, las ich Befehle von der Tastatur, analysierte sie, rief die richtigen Methoden aus meinem Bibliothekscode und zeigte Ergebnisse auf dem Bildschirm. Als ich zu einer webbasierten Schnittstelle auf dem ESP8266 wechselte, glitt die Bibliothek recht innen, da sie keine Abhängigkeiten auf der Benutzerschnittstelle hat. Konfigurationsparameter wie GPIO-Pin-Zuweisungen werden als Konstruktorparameter an die Bibliotheksklasse der obersten Ebene übergeben. In der Haupt-Quelldatei (die .ino in Arduino-Land) gibt es eine Reihe von #ifdefs, die diese korrekt auf der Grundlage der Board-Typ, den ich für die Kompilierung konfigurieren.

Wenn ein Befehl empfangen wird, schaltet die Software die entsprechende HF-Hardware (315 Empfänger, 315 Sender, 434 Empfänger oder 434 Sender) ein, wobei der Transistor mit jedem dieser Einheiten verbunden ist. Es wartet eine kleine Zeitspanne, um sicherzustellen, dass die Hardware eingeschaltet wird und sendet dann entweder einen Befehl oder hört auf einen eingehenden Befehl.

Sicherheit

Keiner. Dies ist nicht ausgesetzt vor meinem lokalen Netzwerk, so dass ich faul im Interesse der Zeit mit meiner Familie. Ehrlich gesagt, wenn Sie entscheiden, Büste durch meine Firewall und die einzige Sache, die Sie finden können, ist meine Weihnachtsbeleuchtung an und ausschalten immer wieder, gut ... Sie können nicht bereit für Anonym noch ganz.

Nächste Feiertagjahreszeit kann ich eine MAC Whitelist und einige rudimentäre Benutzeranmeldungen addieren. Ich dachte auch über das Hinzufügen einiger Logik, die Sie sperrt für eine Weile, wenn Sie versuchen, mehr als N Befehle in einer Stunde auszustellen. Für jetzt ist es unplugged, also ist es ziemlich sicher.

Software Wiederverwendung

Wie ich schon erwähnt habe, ist die Möglichkeit, vorhandene Bibliotheken wieder zu nutzen, eine enorme Steigerung der Produktivität. Für dieses Projekt gibt es vor allem zwei Bibliotheken, die ich genutzt habe.

RCSwitch - Arduino libary für Fernsteuerungsausgangsschalter

Diese Bibliothek ( http://code.google.com/p/rc-switch/ ) macht es sehr einfach mit den HF - Empfänger und Sender zu verbinden. Ich habe am Ende zu modifizieren es ziemlich schwer, um meine besonderen Bedürfnisse, aber es war ein guter Ausgangspunkt und zeigte mir die Antworten, die ich brauchte, um Dinge arbeiten.

ESP8266WebServer - Dead einfacher Web-Server

Dieser Code von Ivan Grokhotkov ist ein guter Ausgangspunkt für das Schreiben eines einfachen Webservers.

Wenn ich weiter gesehen habe, dann stehe ich auf den Schultern der Riesen. -- Isaac Newton

Dieses Zitat ist ein bisschen anmaßend für solch ein weltliches Projekt, aber ich denke, dass es wichtig ist, die Arbeit anderer Leute anzuerkennen, die das Schreiben dieser Software viel einfacher machte, als es anders gewesen sein würde. Vielen Dank.

Schritt 5: Lektionen gelernt und Dinge zu tun

Insgesamt bin ich sehr glücklich mit diesem Projekt. Es hat seinen Job ganz gut in dieser Ferienzeit und gab mir eine Entschuldigung, um einige Stücke auszuprobieren, mit denen ich noch nie gespielt hatte. Aber Tucker sind nie voll zufrieden und es gibt noch einige Dinge, die ich verbessern oder lernen, wie es besser geht.

  1. Wie ich bereits erwähnt habe, gibt es einige Einschränkungen für die ESP8266 in Bezug auf die Größe der einzelnen Dateien und die Anzahl der gleichzeitigen Verbindungen. Ich vermute, dass diese Probleme Lösungen haben können, die vielen von Ihnen bekannt sind. Ich möchte mehr Forschung auf, dass vor der Verwendung dieses Board in einem anderen Projekt zu tun.
  2. Ich bin gerade erst in Ätzen meine eigenen Platinen und frage mich, ob ein geätztes Board könnte weniger laut und haben ein besseres Signal als die Proto-Board ich verwendet. RF ist eine andere Sache auf meiner Liste der Dinge, um mehr darüber zu erfahren.
  3. Apropos HF, muss es einen besseren Weg, um die Antennen zu führen. Nachdem die Antenne Mast gerade stehend gab mir das beste Signal, ist aber nicht ästhetisch.
  4. Ich möchte spiff up der CSS, um die Seiten ein wenig weniger deutlich.

Vielen Dank für das Lesen bis zum Ende. Ich hoffe, Sie genießen zu sehen, was ich an kürzlich gearbeitet habe.

Related Reading