Inhoudsopgave:

ESP-12 infrarood blaster - Ajarnpa
ESP-12 infrarood blaster - Ajarnpa

Video: ESP-12 infrarood blaster - Ajarnpa

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

Infrarood afstandsbediening blaster met esp8266

Verzendt afstandsbedieningscodes die zijn ontvangen van internet en ondersteunt meerdere uitvoerapparaten.

Ingebouwde eenvoudige webpagina voornamelijk om te testen.

Normaal gebruik is via POST-berichten die afkomstig kunnen zijn van webpagina's of van IFTTT / Alexa-spraakbesturing.

Ondersteunt een Amazon Echo/Dot-activeringsdetector om te dempen / zachter te maken zodra het activeringswoord is uitgesproken.

Commando's zijn ofwel enkele commando's of reeksen. Sequenties kunnen worden opgeslagen als benoemde macro's die vervolgens kunnen worden gebruikt als opdrachten of in andere sequenties.

Recente geschiedenis en lijst met macro's kunnen worden verkregen via de webinterface

Ondersteunt OTA-upload van nieuwe firmware en gebruikt de WifiManager-bibliotheek voor de eerste wifi-installatie

Stap 1: Hardware

Hardware
Hardware
Hardware
Hardware

Gebruikt de volgende componenten:

  • ESP-12F-module
  • 3.3V-regelaar (MP2307 mini-buck-regelaar)
  • MOSFET-schakelaars (AO3400)
  • Infrarood zender (3mm)
  • Lichtafhankelijke weerstand GL2258 (optionele Alexa-activiteitsdetector)
  • Weerstanden
  • Ontkoppelcondensator (20uF)
  • Vrouwelijke USB-aansluiting (bij voorkeur soldeervriendelijk met huls)
  • 3-pins IC-socketstrip voor Alexa-detector
  • Mechanische onderdelen (kunnen 3D geprint worden)

Kan worden geassembleerd in ESP-12F-projectdoos

  • Bevestig de regelaar aan de USB-connector en plaats deze in de doos
  • Maak een IR-driver op een klein stukje vero-bord (3 draden, +5V, 0V gate-ingang)
  • Sluit IR-stuurprogramma aan op USB +5V, 0V
  • Steek de 3-pins IC-socket in de projectdoos als u een Alexa-detector gebruikt. Aansluiten op +3.3V, 0V en draad voor input
  • Make-up ESP-12F met 2.2K van GPIO15 naar GND, EN naar Vdd, 4K7 GPIO13 naar Vdd, Alexa input naar GPIO13, IR driver naar GPIO14, 0V en Vdd naar 3.3V
  • Maak indien nodig Alexa-detector en ondersteuningsbuffer.

Merk op dat het gemakkelijker kan zijn om ESP-12F eerst te programmeren als u een soort seriële programmeerfaciliteit of tijdelijke breadboarding-faciliteit zoals deze heeft om verbinding te maken met de seriële poorten.

Daaropvolgend programmeren kan worden gedaan met behulp van de ingebouwde OTA-update.

Stap 2: Software

De ir Blaster gebruikt een Arduino-schets die beschikbaar is op github

Dit moet worden aangepast aan de lokale omstandigheden en vervolgens worden gecompileerd in een esp8266 Arduino-omgeving.

De volgende bibliotheken zijn nodig, de meeste zijn standaard of kunnen worden toegevoegd. De laatste twee zijn opgenomen in de git.

  • ESP8266WiFi
  • ESP8266Webserver
  • FS.h
  • DNS server
  • ESP8266mDNS
  • ESP8266HTTPUpdateServer
  • ArduinoJson
  • BitTx (inbegrepen in Git)
  • BitMessages (inbegrepen in Git)

Items in de schets die moeten worden gewijzigd, zijn onder meer:

  • Autorisatiecode voor webtoegang AP_AUTHID
  • Wfi-beheerderswachtwoord WM_PASSWORD
  • firmware OTA wachtwoord update_password
  • Nieuwe IR-apparaten / knopcodes (zie later)

Zodra dit is gebeurd, moet het eerst worden geüpload met behulp van conventionele seriële upload.

Omdat SPIFFS wordt gebruikt, moet het geheugen worden voorbereid door de Arduino ESP8266 Sketch Data upload-tool te installeren en te gebruiken. Dit zal de gegevensmap uploaden als initiële SPIFFS-inhoud

Wanneer het apparaat geen verbinding kan maken met het lokale netwerk (zoals de eerste keer zal gebeuren), maakt Wifi-manager een toegangspunt (192.168.4.1). Maak verbinding met dit netwerk vanaf een telefoon of tablet en blader vervolgens naar 192.168.4.1 U krijgt een webinterface om verbinding te maken met de lokale wifi. Volgende toegangen zullen dit gebruiken. Als het lokale netwerk verandert, schakelt het terug naar deze configuratiemodus.

Daaropvolgende update kan worden gedaan door een export binair bestand in Arduino-omgeving te compileren en vervolgens toegang te krijgen tot de OTA-interface op ip/firmware.

Stap 3: Apparaat-/knopcodes toevoegen

Opmerking: deze sectie is gewijzigd ten opzichte van de vorige methode waarbij de configuratie eerder in de code was gecompileerd. Het gebruikt nu bestanden die zijn geladen vanuit het SPIFF-bestandssysteem. Dit maakt het veel gemakkelijker om nieuwe definities te uploaden.

De knopdefinities zijn opgenomen in het bestand buttonnames.txt. Het is een globale lijst met namen van alle afstandsbedieningen die in gebruik zijn, aangezien veel namen vaak voorkomen. Zoals geleverd bevat dit details voor de afstandsbedieningen die ik gebruik. Er kunnen nieuwe items worden toegevoegd. Er is ruimte voor in totaal 160 namen, maar dit kan worden vergroot door constanten in bitMessages.h aan te passen en opnieuw te compileren. De hier gedefinieerde namen zijn de namen die moeten worden gebruikt bij het verzenden van opdrachten.

Elk extern apparaat is gedefinieerd in een bestand met de naam dev_remotename. Het bestaat uit een configuratiegedeelte bovenaan en vervolgens een toewijzingstabel van knopnamen tot codes die hex-strings zijn die de bits bevatten die moeten worden verzonden. Alleen de benodigde knopnamen hoeven te worden gedefinieerd.

Het configuratiegedeelte aan het begin van een apparaatbestand bevat parameters die moeten worden gebruikt bij het verzenden van een code. Het eerste item is de apparaatnaam die wordt gebruikt bij het verzenden van een opdracht. Andere parameters worden beschreven in de readme op de codesite.

De meeste afstandsbedieningen behoren tot een van de 3 protocolcategorieën (nec, rc5 en rc6). nec is waarschijnlijk de meest voorkomende en heeft een eenvoudige headerstructuur en bittiming. Er is een kleine variant hiervan die alleen verschilt in de timing van de koppuls. rc5 en rc6 zijn protocollen die door Philips zijn gedefinieerd, maar ook door andere fabrikanten worden gebruikt. Ze zijn iets gecompliceerder en met name rc6 heeft een speciale timingvereiste voor een van de bits.

Om de codes voor een nieuwe afstandsbediening vast te leggen, gebruik ik een IR-ontvanger (TSOP) die vaak wordt gebruikt met plug-in externe ontvangers. Dit doet de basisdecodering en geeft een uitvoer op logisch niveau. Ze worden normaal gesproken geleverd met een 3,5 mm-aansluiting met +5V, GND, DATA-aansluitingen. Ik heb er een opgeofferd, de lead ingekort en door een inverterende 3.3V-buffer geleid om een GPIO-pin op een Raspberry Pi te voeden.

Ik gebruik dan een python-tool rxir.py (in de map git tools) om codes vast te leggen. Om het gemakkelijker te maken om een groot aantal knoppen vast te leggen, gebruikt de tool een tekstdefinitiebestand om de knoppen op de afstandsbediening te definiëren en zijn het alleen de namen van de knoppen in een groep op de afstandsbediening. U kunt bijvoorbeeld een nieuwe Sony-afstandsbediening hebben en 3 tekstbestanden instellen met de naam sonytv-cursor, sonytv-nummers, sonytv-playcontrols, elk met de relevante knopnamen erin. De tool vraagt om het apparaat (sonytv), de sectie (cursor) en welk protocol te gebruiken (nec, nec1, rc5, rc6). Het zal dan achtereenvolgens vragen voor elke druk op de knop en de resultaten naar een sonytv-ircodes-bestand schrijven. Secties kunnen indien nodig worden herhaald om te controleren of de vangsten goed zijn. Bits uit het.ircodes-bestand kunnen worden bewerkt in de BitDevices-tabellen.

Stap 4: Webcontrole en macro's

Het basiswebbeheer is een enkele get of een json-bericht dat een reeks kan bevatten.

De get to /ir heeft 6 parameters

  • auth - met daarin de autorisatiecode
  • apparaat - de naam van het externe apparaat
  • parameter - de naam van de knop
  • bits - een optionele bittelling
  • herhaal - een optionele herhalingstelling
  • wait - een vertraging in mseconden voordat de volgende opdracht kan worden uitgevoerd.

Het apparaat kan ook 'null' zijn om slechts een vertraging te krijgen, 'macro' om de macro te gebruiken waarnaar door de parameter wordt verwezen, of 'detect' om de Alexa-detectiefunctie te gebruiken (zie later).

Het bericht naar /irjson bestaat uit een json-structuur zoals

{

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

}

De reeks kan elke lengte hebben en apparaten kunnen macroreferenties zijn.

Dezelfde structuur kan worden gebruikt om macro's te definiëren. Voeg gewoon macro:"macroname" toe op het hoogste niveau, b.v. na auth. De feitelijke inhoud wordt opgeslagen in een bestand met de naam macroname.txt

Macro's kunnen worden verwijderd door ze te definiëren zonder "commando's".

Andere webopdrachten

  • /recent (lijst met recente activiteit)
  • /check (toont basisstatus)
  • / (laadt een webformulier om opdrachten handmatig te verzenden)
  • /edit (laadt een webformulier om de bestandslijst te bekijken en bestanden te verwijderen/uploaden)
  • /edit?file=bestandsnaam (bekijk de inhoud van een specifiek bestand)
  • /reload (laadt knopnamen en apparaatbestanden opnieuw. Gebruik na het wijzigen van een van deze)

Stap 5: Alexa-spraakbediening met IFTTT

De eenvoudigste manier om de ir Blaster met Alexa te gebruiken, is door IFTTT als gateway te gebruiken.

Port forward eerst de gebruikte poort naar je blaster in je router, zodat deze toegankelijk is vanaf internet. Het kan goed zijn om een dns-service zoals freedns te gebruiken om uw routers een extern IP-adres een naam te geven en het gemakkelijker te maken om te verwerken als dit IP-adres verandert.

Stel een IFTTT-account in en schakel het Maker Webhooks-kanaal en het Alexa-kanaal in. U moet hierbij inloggen op de Amazon-site om de IFTT-toegang in te schakelen.

Maak een IF-trigger met behulp van het IFTTT Alexa-kanaal, kies de actie op basis van een zin en voer de gewenste zin in (bijvoorbeeld volume omhoog).

Maak de actie door het Maker webhooks-kanaal te kiezen. Voer in het URL-veld iets in als

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

Deze actie wordt naar de ir-blaster gestuurd waar het zal proberen de macrovolume-up uit te voeren. Men kan hier desgewenst een specifiek apparaat/knoppen hebben, maar ik vind het beter om macro's te definiëren en te gebruiken, omdat de actievolgorde dan eenvoudig kan worden gewijzigd door de macro opnieuw te definiëren.

Voor elke opdracht is een aparte IFTTT-applet nodig.

Stap 6: Native Alexa-stemvaardigheid

In plaats van IFTTT kan men een aangepaste vaardigheid bouwen binnen Alexa-ontwikkeling. Hierdoor wordt alle verwerking op één plek gecentraliseerd en hoeft u niet voor elke knop aparte acties aan te maken.

U moet zich registreren als Amazon Alexa-ontwikkelaar en u moet zich registreren bij de lambda-service van de Amazon AWS-console. Je zult ook naar de tutorials moeten kijken om het proces een beetje te begrijpen.

Aan de kant van de Alexa-ontwikkelaar moet je een nieuwe aangepaste vaardigheid maken, het triggerwoord invoeren en een lijst met opdrachtwoorden maken, zoals volume omhoog, gids, enz.

Alexa stuurt de zin vervolgens naar een programma dat draait op de lamda-service, die de zin interpreteert en een URL-oproep doet naar de Ir-blaster om er actie op te ondernemen.

Ik heb het Alexa-intentieschema en de console lambda-functie die ik gebruik in de git opgenomen. De URL moet worden aangepast om naar het juiste IP-adres te verwijzen en de juiste autorisatie te hebben. Om het simpel te houden, roepen de lambda-functies een macro aan die een spatiegestripte versie van de frase in kleine letters heeft. Het probeert ook het trigger-trefwoord te verwijderen, dat soms kan worden opgenomen. bijv. blaster VOLUME up roept een macro genaamd volumeup aan als het triggerwoord blaster was.

Stap 7: Alexa Activeer Detector

Hoewel de Echo / Dot-spraakherkenning goed is, kan het soms in de war raken als het geluid van bijvoorbeeld een tv wordt afgespeeld, tenzij je dichtbij komt en luid spreekt.

Om dit te verbeteren heb ik een active detector toegevoegd aan mijn Dot. Zodra het trefwoord (Alexa wordt gezegd) licht de ring van LED's op. De detector voert dit in de blaster waar het de alexaon-macro zal gebruiken om de tv te dempen, op dezelfde manier aan het einde van het verwerken van een opdracht gaan de lichten uit en herstelt de alexaoff-macro het geluid.

Het 'detect'-commando kan ook worden gebruikt om dit aan en uit te zetten. Dus ik gebruik bijvoorbeeld de initiële inschakelmacro om de detectie in te schakelen en de uitschakelmacro om deze uit te schakelen. Dit kan ook worden gebruikt binnen de actiemacro's om een echte mute- en unmute-coomand te ondersteunen, wat anders problematisch zou zijn.

De fysieke detector is een lichtafhankelijke weerstand die door de schakeling wordt ondersteund. Ik monteer de mijne op de Dot met een 3D-geprinte beugel

Aanbevolen: