Inhaltsverzeichnis:

ESP-12 Infrarot-Blaster - Gunook
ESP-12 Infrarot-Blaster - Gunook

Video: ESP-12 Infrarot-Blaster - Gunook

Video: ESP-12 Infrarot-Blaster - Gunook
Video: My journey of making a PERFECT! Universal IR Blaster 👀 2024, Juli
Anonim
ESP-12 Infrarot-Blaster
ESP-12 Infrarot-Blaster

Infrarot-Fernbedienungsblaster mit esp8266

Überträgt vom Web empfangene Fernbedienungscodes und unterstützt mehrere Ausgabegeräte.

Eingebaute einfache Webseite hauptsächlich zum Testen.

Die normale Nutzung erfolgt über POST-Nachrichten, die von Webseiten oder von der IFTTT / Alexa-Sprachsteuerung stammen können.

Unterstützt einen Amazon Echo/Dot-Aktivierungsdetektor zum Stummschalten / Beruhigen, sobald ein Aktivierungswort gesprochen wird.

Befehle sind entweder einzelne Befehle oder Sequenzen. Sequenzen können als benannte Makros gespeichert werden, die dann als Befehle oder in anderen Sequenzen verwendet werden können.

Aktuelle Historie und Liste der Makros können über die Webschnittstelle abgerufen werden

Unterstützt OTA-Upload von neuer Firmware und verwendet die WifiManager-Bibliothek für die anfängliche WLAN-Einrichtung

Schritt 1: Hardware

Hardware
Hardware
Hardware
Hardware

Verwendet folgende Komponenten

  • ESP-12F-Modul
  • 3.3V-Regler (MP2307 Mini-Abwärtsregler)
  • MOSFET-Schalter (AO3400)
  • Infrarot-Strahler (3mm)
  • Lichtabhängiger Widerstand GL2258 (optionaler Alexa-Aktivitätsdetektor)
  • Widerstände
  • Entkopplungskondensator (20uF)
  • USB-Buchse (am besten lötfreundlich mit Tülle)
  • 3-polige IC-Buchsenleiste für Alexa-Detektor
  • Mechanische Teile (können 3D gedruckt werden)

Kann in ESP-12F-Projektbox montiert werden

  • Schließen Sie den Regler an den USB-Anschluss an und stecken Sie ihn in die Box
  • Machen Sie den IR-Treiber auf ein kleines Stück Vero-Platine (3 Drähte, +5 V, 0 V Gate-Eingang)
  • Verbinden Sie den IR-Treiber mit USB +5V, 0V
  • Setzen Sie die 3-polige IC-Buchse in die Projektbox ein, wenn Sie den Alexa-Detektor verwenden. An +3.3V, 0V anschließen und für Eingang verdrahten
  • Bilden Sie ESP-12F mit 2,2K von GPIO15 zu GND, EN zu Vdd, 4K7 GPIO13 zu Vdd, Alexa-Eingang zu GPIO13, IR-Treiber zu GPIO14, 0V und Vdd zu 3,3V
  • Stellen Sie den Alexa-Detektor zusammen und unterstützen Sie den Puffer, falls erforderlich.

Beachten Sie, dass es einfacher sein kann, ESP-12F zuerst zu programmieren, wenn Sie eine Art serielle Programmiereinrichtung oder eine temporäre Breadboarding-Funktion wie diese haben, um eine Verbindung zu den seriellen Anschlüssen herzustellen.

Eine nachträgliche Programmierung kann über das eingebaute OTA-Update erfolgen.

Schritt 2: Software

Der ir Blaster verwendet eine Arduino-Skizze, die auf github verfügbar ist

Dies muss an die lokalen Bedingungen angepasst und dann in einer esp8266 Arduino-Umgebung kompiliert werden.

Die folgenden Bibliotheken werden benötigt, die meisten sind Standard oder können hinzugefügt werden. Die letzten beiden sind im Git enthalten.

  • ESP8266WiFi
  • ESP8266WebServer
  • FS.h
  • DNS Server
  • ESP8266mDNS
  • ESP8266HTTPUpdateServer
  • ArduinoJson
  • BitTx (in Git enthalten)
  • BitMessages (in Git enthalten)

Zu ändernde Elemente in der Skizze umfassen

  • Autorisierungscode für Webzugriff AP_AUTHID
  • Wfi-Manager-Passwort WM_PASSWORD
  • Firmware-OTA-Passwort update_password
  • Neue IR-Geräte / Tastencodes (siehe später)

Sobald dies erledigt ist, sollte es zuerst mit dem herkömmlichen seriellen Upload hochgeladen werden.

Da SPIFFS verwendet wird, sollte der Speicher durch die Installation und Verwendung des arduino ESP8266 Sketch Data Upload-Tools vorbereitet werden. Dadurch wird der Datenordner als anfänglicher SPIFFS-Inhalt hochgeladen

Wenn das Gerät keine Verbindung zum lokalen Netzwerk herstellen kann (was beim ersten Mal der Fall ist), erstellt der Wifi-Manager einen Zugangspunkt (192.168.4.1). Stellen Sie von einem Telefon oder Tablet aus eine Verbindung zu diesem Netzwerk her und navigieren Sie dann zu 192.168.4.1. Sie erhalten eine Weboberfläche, um eine Verbindung zum lokalen WLAN herzustellen. Nachfolgende Zugriffe verwenden dies. Wenn sich das lokale Netzwerk ändert, wechselt es zurück in diesen Konfigurationsmodus.

Ein nachfolgendes Update kann durchgeführt werden, indem eine Export-Binärdatei in der Arduino-Umgebung kompiliert und dann auf die OTA-Schnittstelle unter ip/firmware zugegriffen wird.

Schritt 3: Geräte- / Tastencodes hinzufügen

Hinweis: Dieser Abschnitt hat sich gegenüber der vorherigen Methode geändert, bei der die Konfiguration zuvor in den Code kompiliert wurde. Es verwendet jetzt Dateien, die aus dem SPIFF-Dateisystem geladen werden. Dies erleichtert das Hochladen neuer Definitionen erheblich.

Die Schaltflächendefinitionen sind in der Datei buttonnames.txt enthalten. Es handelt sich um eine globale Namensliste für alle verwendeten Fernbedienungen, da viele Namen in der Regel gebräuchlich sind. Im Lieferzustand enthält diese Angaben zu den von mir verwendeten Fernbedienungen. Neue Einträge können hinzugefügt werden. Es ist Platz für insgesamt 160 Namen, aber dieser kann durch Anpassen von Konstanten in bitMessages.h und Neukompilieren erhöht werden. Die hier definierten Namen sind die beim Senden von Befehlen zu verwendenden Namen.

Jedes entfernte Gerät ist in einer Datei namens dev_remotename definiert. Es besteht aus einem Konfigurationsabschnitt oben und einer Zuordnungstabelle von Schaltflächennamen zu Codes, die Hex-Strings sind, die die zu sendenden Bits enthalten. Es müssen nur die erforderlichen Schaltflächennamen definiert werden.

Der Abschnitt config am Anfang einer Gerätedatei enthält Parameter, die beim Senden eines Codes verwendet werden. Der erste Eintrag ist der Gerätename, der beim Senden eines Befehls verwendet wird. Andere Parameter sind in der Readme auf der Codeseite beschrieben.

Die meisten Fernbedienungen gehören zu einer von 3 Protokollkategorien (nec, rc5 und rc6). nec ist wahrscheinlich die gebräuchlichste und hat eine einfache Header-Struktur und Bit-Timing. Hiervon gibt es eine kleine Variante, die sich nur im Header-Puls-Timing unterscheidet. rc5 und rc6 sind Protokolle, die von Philips definiert, aber auch von einigen anderen Herstellern verwendet werden. Sie sind etwas komplizierter und insbesondere rc6 hat eine spezielle Timing-Anforderung für eines der Bits.

Um die Codes für eine neue Fernbedienung zu erfassen, verwende ich einen IR-Empfänger (TSOP), der normalerweise mit eingesteckten Fernbedienungsempfängern verwendet wird. Dies führt die grundlegende Dekodierung durch und liefert eine Ausgabe mit Logikpegel. Sie werden normalerweise mit einer 3,5-mm-Buchse mit +5V-, GND- und DATA-Anschlüssen geliefert. Ich habe einen geopfert, die Leitung gekürzt und durch einen invertierenden 3,3-V-Puffer gesteckt, um einen GPIO-Pin auf einem Raspberry Pi zu speisen.

Ich verwende dann ein Python-Tool rxir.py (im Ordner git tools), um Codes zu erfassen. Um es einfacher zu machen, eine große Anzahl von Tasten zu erfassen, verwendet das Tool eine Textdefinitionsdatei, um die Tasten auf der Fernbedienung zu definieren, und enthält nur die Namen der Tasten in einer Gruppe auf der Fernbedienung. Zum Beispiel könnte man eine neue Sony-Fernbedienung haben und man richtet 3 Textdateien namens sonytv-cursor, sonytv-numbers, sonytv-playcontrols jeweils mit den entsprechenden Tastennamen ein. Das Tool fragt nach dem Gerät (sonytv), dem Abschnitt (Cursor) und welches Protokoll verwendet werden soll (nec, nec1, rc5, rc6). Es wird dann nacheinander für jeden Tastendruck auffordern und die Ergebnisse in eine sonytv-ircodes-Datei schreiben. Abschnitte können bei Bedarf wiederholt werden, um zu überprüfen, ob die Aufnahmen gut sind. Bits aus der.ircodes-Datei können in den BitDevices-Tabellen bearbeitet werden.

Schritt 4: Webkontrolle und Makros

Die grundlegende Webkontrolle ist entweder ein einzelner Get- oder ein Json-Post, der eine Sequenz enthalten kann.

Das Get to /ir hat 6 Parameter

  • auth - enthält den Autorisierungscode
  • Gerät - der Name des entfernten Geräts
  • Parameter - der Name der Schaltfläche
  • bits - eine optionale Bitanzahl
  • wiederholen - eine optionale Wiederholungszahl
  • wait - eine Verzögerung in ms, bevor der nächste Befehl ausgeführt werden kann.

Das Gerät kann auch 'null' sein, um nur eine Verzögerung zu erhalten, 'Macro', um das Makro zu verwenden, auf das sich der Parameter bezieht, oder 'detect', um die Alexa-Erkennungsfunktion zu verwenden (siehe später).

Der Beitrag zu /irjson besteht aus einer Json-Struktur wie

{

"auth":"1234", "Befehle": [{ "device":"yamahaAV", "parameter":"hdmi4", "wait":"5000", "bits":"0", "repeat":"1"}, { "device":"yamahaAV", "parameter":"mute", "wait":"100", "bits":"0", "repeat":"1"}]

}

Die Sequenz kann beliebig lang sein und Geräte können Makroreferenzen sein.

Dieselbe Struktur kann verwendet werden, um Makros zu definieren. Fügen Sie einfach macro:"macroname" ein, auf der obersten Ebene, z. B. nach auth. Der eigentliche Inhalt wird in einer Datei namens macroname.txt gespeichert

Makros können gelöscht werden, indem sie ohne "Befehle" definiert werden.

Andere Webbefehle

  • /recent (listet die letzten Aktivitäten auf)
  • /check (zeigt Grundstatus an)
  • / (lädt ein Webformular, um Befehle manuell zu senden)
  • /edit (lädt ein Webformular, um die Dateiliste anzuzeigen und Dateien zu löschen/hochzuladen)
  • /edit?file=filename (Inhalt einer bestimmten Datei anzeigen)
  • /reload (lädt Schaltflächennamen und Gerätedateien neu. Verwenden Sie diese, nachdem Sie diese geändert haben)

Schritt 5: Alexa-Sprachsteuerung mit IFTTT

Der einfachste Weg, den ir Blaster mit Alexa zu verwenden, besteht darin, IFTTT als Gateway zu verwenden.

Der erste Port leitet den Port weiter, der zu Ihrem Blaster in Ihrem Router verwendet wird, damit er über das Internet zugänglich ist. Es kann gut sein, einen DNS-Dienst wie freedns zu verwenden, um der externen IP-Adresse Ihres Routers einen Namen zu geben und die Handhabung zu erleichtern, wenn sich diese IP ändert.

Richten Sie ein IFTTT-Konto ein und aktivieren Sie den Maker Webhooks-Kanal und den Alexa-Kanal. Sie müssen sich dabei auf der Amazon-Site anmelden, um den IFTT-Zugang zu aktivieren.

Erstellen Sie einen IF-Trigger mit dem IFTTT-Alexa-Kanal, wählen Sie die Aktion basierend auf einer Phrase aus und geben Sie die gewünschte Phrase ein (z. B. Lautstärke erhöhen).

Erstellen Sie die Aktion, indem Sie den Maker-Webhooks-Kanal auswählen. Geben Sie in das URL-Feld etwas ein wie

myip:port/irjson?plain={"auth":"1234", "comm…

Diese Aktion wird an den ir-Blaster gesendet, wo er versucht, die Makro-Lautstärkeerhöhung auszuführen. Wenn gewünscht, kann man hier bestimmte Geräte / Schaltflächen verwenden, aber ich finde es besser, Makros zu definieren und zu verwenden, da dann die Aktionssequenz einfach durch Neudefinition des Makros geändert werden kann.

Für jeden Befehl wird ein separates IFTTT-Applet benötigt.

Schritt 6: Native Alexa-Sprachfähigkeit

Anstelle von IFTTT kann man in der Alexa-Entwicklung einen benutzerdefinierten Skill erstellen. Dadurch wird die gesamte Verarbeitung an einem Ort zentralisiert und Sie müssen nicht für jede Schaltfläche separate Aktionen erstellen.

Sie müssen sich als Amazon Alexa-Entwickler registrieren lassen und sich beim Lambda-Service der Amazon AWS-Konsole registrieren. Sie müssen sich auch die Tutorials ansehen, um den Prozess ein wenig zu verstehen.

Auf der Alexa-Entwicklerseite müssen Sie einen neuen benutzerdefinierten Skill erstellen, sein Triggerwort eingeben und eine Liste von Befehlswörtern wie Lautstärke erhöhen, Anleitung usw. erstellen.

Alexa sendet die Phrase dann an ein Programm, das auf dem Lamda-Dienst ausgeführt wird, das die Phrase interpretiert und einen URL-Aufruf an den Ir-Blaster sendet, um ihn auszuführen.

Ich habe das Alexa-Intent-Schema und die von mir verwendete Konsolen-Lambda-Funktion in das Git eingebunden. Die URL muss geändert werden, um auf die entsprechende IP zu verweisen und über die richtige Berechtigung zu verfügen. Um es einfach zu halten, rufen die Lambda-Funktionen ein Makro auf, das eine von Leerzeichen entfernte Version der Phrase in Kleinbuchstaben enthält. Es versucht auch, das Trigger-Schlüsselwort zu entfernen, das manchmal enthalten sein kann. Z. B. blaster VOLUME up ruft ein Makro namens volumeup auf, wenn das Triggerwort Blaster war.

Schritt 7: Alexa Detektor aktivieren

Obwohl die Echo / Dot-Spracherkennung gut ist, kann es manchmal zu Verwirrung kommen, wenn der Ton von einem Fernseher abgespielt wird, es sei denn, Sie nähern sich und sprechen laut.

Um dies zu verbessern, habe ich meinem Dot einen Aktivierungsdetektor hinzugefügt. Sobald das Schlüsselwort (Alexa gesagt wird) leuchtet der LED-Ring auf. Der Detektor speist dies in den Blaster ein, wo er das alexaon-Makro verwendet, um den Fernseher stumm zu schalten. Am Ende der Verarbeitung eines Befehls gehen die Lichter aus und das alexaoff-Makro stellt den Ton wieder her.

Der Befehl 'detect' kann auch verwendet werden, um dies ein- und auszuschalten. So verwende ich zum Beispiel das anfängliche Turnon-Makro, um die Erkennung zu aktivieren, und das Turnoff-Makro, um sie zu deaktivieren. Dies kann auch innerhalb der Aktionsmakros verwendet werden, um einen echten Mute- und Unmute-Befehl zu unterstützen, der sonst problematisch wäre.

Der physikalische Detektor ist ein lichtabhängiger Widerstand, den die Schaltung unterstützt. Ich montiere meine auf dem Dot mit einer 3D-gedruckten Halterung

Empfohlen: