WiFi IR Blaster
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Notwendige Werkzeuge und Maschinen
|
Apps und Onlinedienste
| ||||
|
Über dieses Projekt
Zwei Schritte vorwärts...
Es scheint, als würden sich die großen Telefonhersteller von integrierten IR-Blastern entfernen, daher suche ich nach einer Möglichkeit, meine "dummen" Geräte zukunftssicher zu machen, die derzeit nicht in meine IoT-Infrastruktur integriert sind. Ich habe ein vernetztes Smart Home, aber ich brauche eine physische Fernbedienung, um meinen Fernseher einzuschalten? Es muss einen besseren Weg geben.
Ich habe vor kurzem einen IR-Blaster gebaut, der eigenständige Klimaanlagen in meinem Haus steuert, und ein weiteres früheres Projekt war eine vernetzte HLK-Entlüftung mit einer mit Android verbundenen Webapp. Im Wesentlichen muss ich diese beiden Dinge nur zu einem mit dem Internet verbundenen IR-Blaster mit einem Webapp-Frontend kombinieren, damit ich Tasten auf meinem Telefon drücken und IR-Signale an meine Mediacenter senden kann. Diese können in jedem Raum bereitgestellt und von überall aus über eine einzige Schnittstelle gesteuert werden, sodass die Anwendungen dafür extrem breit sind.
Rapid Prototyping
Ich habe mir ungenutzte Hardware geschnappt und alles verkabelt, was ich brauche, um mich mit meinem WLAN zu verbinden, HTTP-Verbindungen zu akzeptieren und IR-Signale zu senden.
Dies funktionierte insofern gut, als ich eine bestimmte URL auf der dem ESP8266 zugewiesenen IP anfordern und das Arduino ein "Power" -Signal an die IR-LED ausgeben konnte. Ich musste nur herausfinden, wo die Webapp gehostet werden soll, die URLs an den IR-Blaster senden und diese Anfragen dann in bestimmte IR-Codes analysieren lassen. Dies war mit dem ESP8266 mit AT-Befehlen sehr mühsam, und es gab etwas, das eine 1-2-Sekunden-Verzögerung zwischen dem Senden der Anfrage und dem Blinken der LED verursachte.
NodeMCU
Ich habe das NodeMCU ESP8266-Entwicklungsboard verwendet, da es über eine integrierte Stromregelung, eine USB-zu-Seriell-Schnittstelle und viele I / O-Pins in diesem kleinen Paket verfügt (es ist auch Breadboard-freundlich). Es stellte sich heraus, dass es bereits eine ESP8266 WebServer-Bibliothek gibt, die GET-Anfragen akzeptiert, die ich zum Senden von IR-Codes anpassen konnte, und die reguläre IRremote-Bibliothek funktioniert sofort.
Der ESP8266 auf der NodeMCU ist nicht leistungsstark genug, um die Webapp selbst zu hosten, daher werde ich sie auf einem nicht ausgelasteten C.H.I.P. Computer im Wert von 9 $, der bereits mit meinem Heimnetzwerk verbunden ist. Eine weitere Einschränkung besteht darin, dass der ESP8266 eine 3,3-V-Platine ist, sodass die direkt von einem I / O-Pin angesteuerten IR-LEDs sehr schwach waren und sich direkt neben dem Gerät befinden mussten, an das ein Signal gesendet wurde. Ich habe stattdessen den I/O-Pin verwendet, um einen npn-Transistor anzusteuern, um die 5-V-Versorgungsspannung ein- / auszuschalten.
RUHE...ish
Nach einigen Recherchen fand ich ein großartiges Tutorial zur Implementierung einer REST-API für Arduino zur Steuerung von LEDs auf Adafruit. Ich habe ihre JavaScript- und PHP-Dateien verwendet, um die cURL-Anfragen zu senden, und diese auf den CHIP geladen, der bereits Apache ausführt, aber genauso einfach in der Cloud gehostet werden könnte. Nachdem ich eine einfache HTML-Seite für die Fernbedienung erstellt hatte, fügte ich die Dateien manifest.json und icon hinzu, damit sie als native Webapp auf einem Android-Telefon ausgeführt werden kann.
Auf der Arduino-Seite habe ich den Webserver so gekürzt, dass er nur eine GET-Anfrage akzeptiert, die URL analysiert, ein 200 OK sendet und dann die Verbindung trennt. Basierend auf der URL sendete das Arduino den IR-Code, der der gedrückten Taste zugeordnet war.
Universelles Remonster
Alles funktioniert einwandfrei ohne Verzögerung. Ich habe festgestellt, dass die von mir verwendeten IR-LEDs einen sehr engen Winkel haben, daher muss ich aufpassen, dass sie richtig ausgerichtet sind. Mit einem industriellen Klettverschluss kann ich es unter einem Regal außer Sichtweite montieren und stellt sicher, dass es auf die IR-Empfänger am anderen Ende gerichtet bleibt. Ich habe den LED-Kabeln etwas dickeres Kabel hinzugefügt, damit sie fein abgestimmt werden können.
Die Widerstände für die IR-LEDs machten sie fast unbrauchbar, sodass der Transistor sie mit ungeregelten 5 V versorgt. Dadurch kann ich IR von Wänden abprallen und den Blaster quer durch den Raum montieren, wirkt sich jedoch definitiv auf die Langlebigkeit aus. Ich hoffe, dass ich die LEDs für einige Zeit nicht ersetzen muss, da sie sehr selten verwendet werden und die IR-Signale superkurze Impulse sind (niedrigeres Tastverhältnis als die meisten schwachen PWM-Signale). Ich habe für Version 2 einige Weitwinkel-IR-LEDs mit höherer Leistung bestellt. Wenn diese endlich sterben, werde ich sie zusammen mit einem Inline-Widerstand ersetzen.
3-Monats-Update und zukünftige Funktionen
Ich benutze es täglich und es hat einwandfrei funktioniert. Ich habe sogar ein zweites Gerät in unserem Familienzimmer hinzugefügt, um unsere Fensterklimaanlage und einen weiteren Fernseher zu steuern.
Pläne für die Zukunft:
- Migrieren Sie die Web-Benutzeroberfläche zu einem Cloud-Dienst
- Integrieren mit Amazon Echo für Sprachbefehle (Fertig)
- Die nächste Hardware-Iteration wird auch einen DHT22-Temperatursensor haben und ich untersuche Möglichkeiten, HF für meine Deckenventilatoren zu übertragen
- Fügen Sie einen IR-Empfänger für eine Lernfunktion hinzu, damit Sie die IR-Blaster-Befehle von vorhandenen Fernbedienungen "beibringen" können
- Integration in meine Heimautomatisierung/-sicherheit, um Geräte auszuschalten, wenn sie nicht verwendet werden
Dieser kleine vernetzte IR-Blaster füllt langsam die Lücke zwischen meinem Smart Home und älteren Geräten.
Code
- WiFi IR Blaster für ESP8266 Arduino Sketch
- script.js
- index.html
- curl.php
- manifest.json
WiFi IR Blaster für ESP8266 Arduino SketchC/C++
Sie benötigen die WLAN-Bibliothek ESP8266 und IRremote.h. Sie sollten sich auch dafür entscheiden, die Raw-IR-Codes nicht zu verwenden, wenn Ihre Fernbedienung in der Bibliothek unterstützt wird. Ich habe diese Skizze von einer Klimaanlagensteuerung angepasst, die ich gebaut habe, die nicht standardmäßige IR-Codes verwendet an eine angeschlossene IR-LED basierend auf diesen Anforderungen. * Dies funktioniert am besten mit einem anderen Webserver, der als Front-End agiert, * das cURL-Anfragen basierend auf den gedrückten Tasten sendet. * cURL-Format:http://ESP8266/IRcode */#includescript.jsJavaScript
Javascript für Webapp (erfordert jquery)// Funktion zum Senden von IR-Befehlenfunction buttonClick(clicked_id){ if (clicked_id =="irTVpwr"){ $.get( "curl.php", { room:"192.168.1.62" , Schaltfläche:"irTVpwr"} ); } if (clicked_id =="irTVsrc"){ $.get( "curl.php", { room:"192.168.1.62", button:"irTVsrc"} ); } if (clicked_id =="irTVmute"){ $.get( "curl.php", { room:"192.168.1.62", button:"irTVmute"} ); } if (clicked_id =="irTVvdn"){ $.get( "curl.php", { room:"192.168.1.62", button:"irTVvdn"} ); } if (clicked_id =="irTVvup"){ $.get( "curl.php", { room:"192.168.1.62", button:"irTVvup"} ); } if (clicked_id =="irTVchup"){ $.get( "curl.php", { room:"192.168.1.62", button:"irTVchup"} ); } if (clicked_id =="irTVchdn"){ $.get( "curl.php", { room:"192.168.1.62", button:"irTVchdn"} ); } if (clicked_id =="irRECpwr"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECpwr"} ); } if (clicked_id =="irALLpwr"){ $.get( "curl.php", { room:"192.168.1.62", button:"irALLpwr"} ); } if (clicked_id =="irRECpwrON"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECpwrON"} ); } if (clicked_id =="irRECpwrOFF"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECpwrOFF"} ); } if (clicked_id =="irRECmute"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECmute"} ); } if (clicked_id =="irRECvdn"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECvdn"} ); } if (clicked_id =="irRECvup"){ $.get( "curl.php", { room:"192.168.1.62", button:"irRECvup"} ); } }
index.htmlHTML
Einfaches HTML zum Anzeigen von Schaltflächen.
Fernseher
Empfänger
curl.phpPHP
php-Skript zum Senden von GET-Anfragen an ESP8266manifest.jsonJSON
Dadurch kann die Webseite als native Webapp in Android ausgeführt werden.{ "name":"WiFi Remote", "icons":[ { "src":"remote_icon_36.png", "sizes":"36x36" , "type":"image/png", "density":0.75 }, { "src":"remote_icon_48.png", "sizes":"48x48", "type":"image/png", "density" :1.0 }, { "src":"remote_icon_128.png", "sizes":"128x128", "type":"image/png", "density":1.0 }, { "src":"remote_icon_192.png" , "sizes":"192x192", "type":"image/png", "density":1.0 } ], "scope":"/remote/", "start_url":"/remote/index.html", "display":"fullscreen", "orientation":"portrait"}
Schaltpläne
Nichts wirklich, nur Strom und ein einzelner Pin, der mit einem NPN-Transistor verbunden ist, um zwei IR-LEDs in Reihe (ohne Widerstände) von der 5-V-Versorgungsspannung zu treiben. Wenn Sie zusätzliche LEDs betreiben möchten oder weniger Spannungsabfall von einer 3,3-V-Quelle benötigen, können Sie einen NPN verwenden Transistor zum Schalten mehrerer PNP-Transistoren (einer pro LED). Mit dieser Konfiguration können Sie so viele LEDs verwenden, wie Ihre Quellenspannung Strom liefern kann.Herstellungsprozess
- Die Mängel von WLAN-RTLS
- Neue drahtlose Technologie 2015
- So installieren Sie einen sicheren eingebetteten Webserver auf einem 3 USD-WLAN-Gerät
- MQTT-Kommunikation zwischen NodeMCU und Raspberry Pi 3 B+
- RASPBERRY PI WIFI-ROBOTER, KONTROLLIERT VON ANDROID SMART PHONE
- WLAN-gesteuerter Roboter mit Raspberry Pi
- Was sind WLAN-Anrufe? Wie funktioniert es?
- IOT - Smart Jar mit ESP8266, Arduino und Ultraschallsensor
- Smart Door Lock mit WLAN-Anmeldeseite von Arduino &ESP8266
- Was ist eine Perlenexplosion? Ein Leitfaden zum Perlenstrahlen