Stap 2: Registreren de IR-opdrachten gebruikt om controle van de airco
De ESP8266 simuleert de afstandsbediening om te schakelen aan/uit de airco en verschillende functies selecteren. Om te kunnen doen, zodat we de verschillende IR moet vastleggen sturen signalen van de afstandsbediening.
Eerst is een apparaat om vast te leggen van de IR-signalen nodig. Ik heb een Arduino Uno die ik altijd gebruik te maken van snelle tests. Ik aangesloten de IR ontvanger op de Arduino, zoals hierboven getoond in het schema en breadboard schets. Ik aangesloten de Fritzing bestanden (DumpIR.fzz). Ik had een bedieningspaneel van een oude kabel TV ontvanger rond leggend. Ik gebruikte de IR ontvanger gemonteerd op dit controlepaneel voor de opname. (Ik zal later delen een instructable over het gebruik van dit controle paneel ook).
Voor de opname gebruikte ik de Multi-Protocol infrarood externe bibliotheek voor de Arduino. Deze bibliotheek bevat een voorbeeldprogramma (IRrecvDumpV2.ino) om op te nemen van IR-signalen. Ik gebruikte IRrecvDumpV2 te krijgen een eerste idee van hoe de IR-commando's er hetzelfde uitzien. De output van het programma ziet er als:
Encoding : NEC<br>Code : 8E76897 (32 bits) Timing[67]: +8900, -4450 + 600, - 450 + 600, - 550 + 550, - 550 + 550, - 550 + 550, -1700 + 550, - 550 + 550, - 600 + 500, - 550 + 550, -1700 + 500, -1700 + 550, -1700 + 600, - 500 + 550, - 600 + 550, -1600 + 650, -1600 + 550, -1650 + 600, - 500 + 550, -1700 + 600, -1600 + 650, - 450 + 650, -1600 + 550, - 550 + 600, - 500 + 650, - 450 + 650, -1600 + 550, - 550 + 650, - 450 + 650, -1550 + 600, - 550 + 600, -1600 + 650, -1600 + 600, -1600 + 600 unsigned int rawData[67] = {8900,4450, 600,450, 600,550, 550,550, 550,550, 550,1700, 550,550, 550,600, 500,550, 550,1700, 500,1700, 550,1700, 600,500, 550,600, 550,1600, 650,1600, 550,1650, 600,500, 550,1700, 600,1600, 650,450, 650,1600, 550,550, 600,500, 650,450, 650,1600, 550,550, 650,450, 650,1550, 600,550, 600,1600, 650,1600, 600,1600, 600}; // NEC 8E76897 unsigned int data = 0x8E76897;
Deze uitgang is een beetje cryptisch, dus heb ik besloten om te "verbeteren" van de uitvoer en het gebruik van dit programma voor mijn persoonlijke opnamen. Het nieuwe programma heet DumpIR en de verbeteringen zijn
- Kortere uitgang met extra informatie welke functie werd opgenomen
- Uitgang met geteste knop commentaar en opmaken als Byte-matrix, zodat het gebruikt kan worden rechtstreeks in de ESP8266 toepassing
- Elke knop 3 keer opnemen om ervoor te zorgen dat de opname correct is.
- Gebruiker vertellen welke knop drukken om te registreren
De uitvoer van DumpIR ziet er als:
Start testing, now press H-FAN====================H-FANEncoding : NEC Code : B1000111001110110100010010111 (32 bits)unsigned int data = 0x8E76897unsigned int rawData[67] = {8950,4350, 650,450, 650,500, 600,500, 650,450, 600,1600, 650,500, 600,500, 600,500, 650,1600, 600,1600, 600,1600, 650,450, 650,500, 600,1600, 650,1550, 650,1600, 600,500, 650,1600, 600,1600, 600,500, 650,1550, 650,500, 600,500, 650,450, 650,1550, 650,500, 600,500, 650,1550, 650,500, 600,1600, 600,1600, 650,1600, 600}; // NEC B1000111001110110100010010111 unsigned int data = 0x8E76897; {B00001000,B11100111,B01101000,B10010111}Encoding : NEC Code : B1000111001110110100010010111 (32 bits) unsigned int data = 0x8E76897 unsigned int rawData[67] = {8950,4400, 600,500, 650,450, 650,450, 650,500, 600,1600, 600,500, 650,450, 650,500, 600,1600, 650,1550, 650,1600, 600,500, 650,450, 650,1600, 600,1600, 600,1600, 650,500, 600,1600, 650,1600, 600,450, 650,1600, 650,450, 650,450, 650,500, 600,1600, 600,500, 650,450, 650,1600, 600,500, 650,1600, 600,1600, 600,1600, 650}; // NEC B1000111001110110100010010111 unsigned int data = 0x8E76897; {B00001000,B11100111,B01101000,B10010111} Encoding : NEC Code : B1000111001110110100010010111 (32 bits) unsigned int data = 0x8E76897 unsigned int rawData[67] = {9000,4350, 650,450, 650,450, 650,450, 650,500, 600,1600, 650,450, 650,500, 600,500, 650,1550, 650,1550, 650,1600, 650,450, 650,450, 650,1600, 600,1600, 650,1600, 600,500, 600,1600, 650,1550, 650,500, 600,1600, 650,450, 650,450, 650,500, 600,1600, 550,550, 650,500, 600,1600, 600,500, 650,1600, 600,1600, 650,1550, 650}; // NEC B1000111001110110100010010111 unsigned int data = 0x8E76897; {B00001000,B11100111,B01101000,B10010111} ==================== Command finished, now press M-FAN
De byte-array {B00001000, B11100111, B01101000, B10010111} worden rechtstreeks in de toepassing van de ESP8266 gebruikt voor het verzenden van de opdracht "overgang naar high fan modus" naar de airco.
De DumpIR.ino moet sommige aangepast voor verschillende airco afstandsbedieningen. Bijvoorbeeld mijn FujiDenzo airco externe heeft 10 knoppen, de vervoerder airco 14 knoppen. Als je naar de DumpIR.ino kijkt kunt u de definitie voor 2 aircons:
//------------------------------------------------------------------------------// This example code is for 2 different aircons // 1) manufacturer FujiDenzo // 2) manufacturer Carrier // These aircons have different command sets // Use #define FUJIDENZO for recording the FujiDenzo commands // Use #define CARRIER for recording the Carrier commands #define FUJIDENZO // #define CARRIER
Als ik wil opnemen signalen van de afstandsbediening van de FujiDenzo, de #define FUJIDENZO wordt gebruikt, wanneer de afstandsbediening van de vervoerder is vastgelegd de #define vervoerder wordt gebruikt.
De verschillende opdrachten en het aantal beschikbare opdrachten voor de beide afstandsbedieningen worden gedefinieerd in [cmdList] en endCmdIndex:
#ifdef FUJIDENZO<br>// FujiDenzo remote has 10 buttons int endCmdIndex = 10; // Sequence of commands on the FujiDenzo remote String cmdList[] = {"H-FAN", "M-FAN", "L-FAN", "TIMER", "TEMP+", "TEMP-", "COOL", "DRY", "FAN", "POWER"}; #endif #ifdef CARRIER // Carrier remote has 14 buttons int endCmdIndex = 14; // Sequence of commands on the Carrier remote String cmdList[] = {"POWER", "SWEEP", "TEMP+", "TEMP-", "FANSPEED", "TURBO", "TIMER", "DRY", "SLEEP", "ION", "HEAT", "COOL", "FAN", "AUTO"}; #endif
Zoals u de definities FUJIDENZO en drager worden gebruikt om de juiste lijst en aantal opdrachten te selecteren zien kunt.
Met DumpIR ik opgenomen van alle commando's voor de twee aircons van de FujiDenzo en de vervoerder en de resultaten worden opgeslagen in tekstbestanden.
U zal moeten aanpassen van de DumpIR om te werken met de fabrikant van uw specifieke airco.
LET OP:
Ik vastleggen, elke knop (minstens) 3 keer omdat tijdens dit project heb ik geleerd dat sommige afstandsbedieningen Stuur geen hetzelfde IR signaal voor een commando elke keer. Ik moest leren door proef en fout dat de Carrier-airco daadwerkelijk 3 verschillende IR-signalen voor dezelfde opdracht heeft. Als u een opdracht op de afstandsbediening herhalen (zoals temperatuur omhoog) de afstandsbediening doorlopen van de 3 IR-signalen en stuurt elke keer een andere naam. De cyclus wordt opnieuw ingesteld als een andere knop werd ingedrukt. In het volgende voorbeeld:
- Druk temperatuur omhoog knop = > IR signaal #1 voor temperatuur omhoog wordt verzonden.
- Druk temperatuur omhoog knop weer = > IR signaal #2 voor temperatuur omhoog wordt verzonden
- Druk op-temperatuur omlaag knop = > IR signaal #1 voor de temperatuur naar beneden wordt verzonden
- Druk temperatuur omhoog knop weer = > IR signaal #1 voor temperatuur omhoog wordt verzonden
Ik moest implementeren dit gedrag ook in de code voor de ESP8266 code, maar meer hierover in een latere stap.
Extra commentaar:
In de bijgevoegde foto's ziet u dat ik geen gebruik van een enkele IR-ontvanger om vast te leggen van de IR-signalen. Ik had een oude dash board van een kabel-TV rond leggend. Als dit dash board had een IR ontvanger gemonteerd, besloten heb ik om het te gebruiken in plaats van het kopen van een IR-ontvanger. Ik zal later een andere Instructable posten hoe ik dit dash board aangesloten op de Arduino Uno.
Alle bronnen van de software en alle schema's zijn beschikbaar in mijn Github repository