Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-23 14:47
Imam Logitech daljinski upravljač harmonije i pokrećem kućnog pomoćnika na malini pi.
Htio sam moći pauzirati chromecast s daljinskog upravljača, ali imam stari televizor koji to ne podržava putem hdmija. Moja ideja je tada bila koristiti NodeMcu za hvatanje ir signala i pauzu.
Ako ga ne možete natjerati na rad ili imate pitanja, komentirajte u nastavku
Korak 1: Opremanje
Potrebna oprema:
Nodemcu (https://www.ebay.com/sch/i.html?_from=R40&_trksid=…
Ir prijemnik (primjerice ovo:
dupont žice
Micro usb kabel (power nodemcu)
Ja koristim Logitech Harmony -hub
Za moj pristup trebate Raspberry pi s instaliranim i noderedanim hass.io. Neću ulaziti u postavljanje kućnih pomoćnika ovdje. Ako koristite nešto drugo osim kućnog pomoćnika, morate sami prilagoditi stvari.
Morate biti u mogućnosti koristiti Nodemcu na Arduino IDE -u jer ovdje neću ulaziti u to
Korak 2: Daljinski signal
Način na koji sam to učinio bio je kopiranje signala s daljinskog upravljača koji ne koristim u daljinski upravljač.
Koristio sam daljinski za televizor Panasonic TXL32C3E jer to ne ometa moju opremu na prvom katu. To je televizor koji imam gore.
Ako ne koristite sklad, ovo možete preskočiti.
Dakle, za pronalaženje signala upotrijebio sam ovaj nacrt:
/ * * IRremoteESP8266: IRrecvDumpV2 - iscrtavanje detalja IR kodova s IRrecv * IR detektor/demodulator mora biti spojen na ulaz RECV_PIN. * * Autorsko pravo 2009. Ken Shirriff, https://arcfn.com * Autorsko pravo 2017. David Conran * * Primjer dijagrama: * https://arcfn.com * * Promjene: * Verzija 0.3, studeni 2017. * - Podrška za A/C dekodiranje za neke protokole. * Verzija 0.2. Travnja 2017. * - Dekodirajte iz kopije podataka kako bismo mogli početi snimati brže, čime se smanjuje vjerojatnost pogrešnog hvatanja. * Na temelju IrsendDemo verzije Kena Shirriffa od 0.1 srpnja 2009, */
#ifndef UNIT_TEST
#include #endif #include #include #include #if DECODE_AC #include #include #include #include #include #endif // DECODE_AC
// ==================== početak TUNEABLE PARAMETERS ====================
// IC detektor/demodulator spojen je na GPIO pin 14 // npr. D5 na ploči NodeMCU. #define RECV_PIN 14
// Brzina prijenosa serijske veze.
// tj. Poruka o statusu bit će poslana na računalo ovom brzinom prijenosa. // Pokušajte izbjeći male brzine poput 9600 jer ćete propustiti poruke i // uzrokovati druge probleme. Preporučuje se 115200 (ili brže). // NAPOMENA: Svakako postavite serijski monitor na istu brzinu. #define BAUD_RATE 115200
// Budući da je ovaj program hvatanje/dekodiranje posebne namjene, upotrijebimo veći
// od normalnog međuspremnika pa možemo rukovati kodovima za daljinski upravljač klima uređaja. #define CAPTURE_BUFFER_SIZE 1024
// TIMEOUT je br. mili-sekundi bez više podataka prije nego razmotrimo a
// poruka je završila. // Ovaj parametar je zanimljiv kompromis. Što je dulje vrijeme, poruka može biti složenija // složenija. npr. Neki protokoli uređaja brzo će slati // više paketa poruka, poput daljinskih upravljača za klima uređaj. // Air Coniditioner protokoli često imaju značajan jaz (20-40+ms) između // paketa. // Nedostatak velike vrijednosti timeout -a je mnogo manje složenih protokola // šalje više poruka kada se pritisne gumb na daljinskom upravljaču. Jaz između // njih često je također oko 20+ms. To može dovesti do toga da sirovi podaci budu 2-3+ // puta veći nego što je potrebno jer su snimili 2-3+ poruke u jednom // hvatanju. Postavljanje niske vrijednosti vremena čekanja može to riješiti. // Dakle, odabir najbolje vrijednosti TIMEOUT -a za vaš slučaj korištenja je // prilično nijansiran. Sretno i sretan lov. // NAPOMENA: Nemojte prekoračiti MAX_TIMEOUT_MS. Obično 130 ms. #iko DECODE_AC #define TIMEOUT 50U // Neke klima -jedinice imaju praznine u protokolima od ~ 40 ms. // npr. Kelvinator // Ovako velika vrijednost može progutati ponavljanja nekih protokola #else // DECODE_AC #define TIMEOUT 15U // Odgovara većini poruka, a ne guta mnogo ponavljanja. #endif // DECODE_AC // Alternative: // #define TIMEOUT 90U // Odgovara porukama s velikim prazninama poput XMP-1 i nekim klima uređajima //, ali može slučajno progutati ponovljene poruke // u izlaz rawData . // #define TIMEOUT MAX_TIMEOUT_MS // Ovo će postaviti naš trenutno // maksimalni maksimum. Ovako visoke vrijednosti su problematične // jer je to otprilike tipična granica // gdje se većina poruka ponavlja. // npr. Prestat će dekodirati poruku i // početi je slati u serijski broj točno // u vrijeme kada će sljedeća poruka vjerojatno biti // prenesena, a može je i propustiti.
// Postavljamo pakete poruka "UNKNOWN" najmanje veličine do kojih nam je zapravo stalo.
// Ova vrijednost pomaže u smanjenju lažno pozitivne stope detekcije IR pozadinske // buke kao stvarnih poruka. Šanse da se pozadinski IC šum otkrije // kako se poruka povećava s duljinom vrijednosti TIMEOUT. (Vidi gore) // Nedostatak postavljanja ove poruke prevelikom je to što možete propustiti neke valjane // kratke poruke za protokole koje ova knjižnica još ne dekodira. // // Postavite više ako dobijete puno nasumičnih kratkih NEPOZNATIH poruka kada ništa // ne bi trebalo slati poruku. // Postavite niže ako ste sigurni da vaše postavljanje radi, ali ne vidi poruke // s vašeg uređaja. (npr. Ostali IC daljinski upravljači rade.) // NAPOMENA: Postavite ovu vrijednost na vrlo visoku vrijednost kako biste učinkovito isključili NEPOZNATO otkrivanje. #define MIN_UNKNOWN_SIZE 12 // ==================== kraj TUNEABLE PARAMETERS ====================
// Upotrijebite uključivanje značajke spremišta međuspremnika za potpunije pokrivanje snimanja.
IRrecv unrecv (RECV_PIN, CAPTURE_BUFFER_SIZE, TIMEOUT, true);
decode_results rezultate; // Negdje za spremanje rezultata
// Prikažimo stanje čitanja A/C poruke ako možemo.
void dumpACInfo (decode_results *results) {String description = ""; #iko DECODE_DAIKIN if (rezultati-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (rezultati-> stanje); description = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (rezultati-> stanje, rezultati-> bitovi / 8); description = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (rezultati-> stanje); description = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (rezultati-> stanje); description = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (rezultati-> vrijednost); // Midea koristi vrijednost umjesto stanja. description = ac.toString (); } #endif // DECODE_MIDEA // Ako imamo opis poruke koji je čitljiv ljudima, prikažite ga. if (description! = "") Serial.println ("Opis poruke.:" + opis); }
// Dio koda se pokreće samo jednom pri pokretanju.
void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); kašnjenje (500); // Pričekajte malo da se serijska veza uspostavi.
#ako DECODE_HASH
// Zanemarite poruke s impulsima uključivanja ili isključivanja manjim od minimalnog. unrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH unrecv.enableIRIn (); // Pokreni prijemnik}
// Ponavljajući dio koda
// void loop () {// Provjerite je li primljen IR kod. if (unrecv.decode (& results)) {// Prikaz grube vremenske oznake. uint32_t sada = millis (); Serial.printf ("Vremenska oznaka: %06u. %03u / n", sada / 1000, sada %1000); if (results.overflow) Serial.printf ("UPOZORENJE: IR kod je prevelik za međuspremnik (> = %d)." "Ovom rezultatu ne treba vjerovati dok se to ne riješi." "Uredi i povećaj CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Prikaz osnovnog rezultata onoga što smo pronašli. Serial.print (resultToHumanReadableBasic (& rezultati)); dumpACInfo (& rezultati); // Prikazujemo dodatne podatke o klima uređaju ako ih imamo. prinos(); // Ulažite WDT jer ispis teksta može potrajati.
// Prikaz verzije knjižnice s kojom je poruka snimljena.
Serial.print ("Knjižnica: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Serial.println ();
// Izlaženje RAW vremenskih podataka o rezultatu.
Serial.println (resultToTimingInfo (& rezultati)); prinos(); // Hranite WDT (ponovno)
// Rezultate ispišite kao izvorni kod
Serial.println (resultToSourceCode (& rezultati)); Serial.println (""); // Prazan redak između unosa yield (); // Nahranite WDT (ponovno)}}
Kada se ovaj crtež učita i radi s otvorenim serijskim monitorom, on će ispisati kôd za pritiskanje gumba (vidi sliku)
Zapišite kodove koje želite koristiti za kasniju upotrebu. Koristio sam Excel da zabilježim što sam dobio za gumbe koje sam želio koristiti (vidi sliku)
Uredio sam gumbe u svojoj aktivnosti na Netflixu za slanje signala pauze s daljinskog upravljača Panasonic.. (vidi sliku)
Korak 3: Pisanje koda za slanje na Nodered
#ifndef UNIT_TEST #include #endif #include
#uključi
#uključi
#uključi
#uključi
#uključi
const char* ssid = ""; // Ovdje unesite SSID concon char* password = ""; // Ovdje unesite lozinku const char *host = ""; // IP adresa #define USE_SERIAL Serijski ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv unrecv (RECV_PIN); decode_results rezultate; void setup () {unrecv.enableIRIn (); // Pokretanje prijemnika USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (true); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();
za (uint8_t t = 4; t> 0; t--) {
USE_SERIAL.printf ("[SETUP] WAIT %d… / n", t); USE_SERIAL.flush (); kašnjenje (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, lozinka); } void loop () {if (unrecv.decode (& results)) {{100} {101}
// Promijenite vrijednost ovog signala za onu koju imate
if (results.value == 0x40040D00606D) {USE_SERIAL.println ("signal pauze primljen"); wifisend (stanka); kašnjenje (1000);
} if (results.value == 0x400401007273) {
USE_SERIAL.println ("prethodni");
wifisend ("prethodna"); kašnjenje (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("next"); wifisend ("sljedeći"); kašnjenje (1000); }
unrecv.resume (); // Primanje sljedeće vrijednosti} delay (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] početak… / n"); // konfigurirati poslužitelj tragedije i url http.begin ("https:// [korisnik]: [pass]@[ip]: [port]/chromecastpause? data =" + podaci); USE_SERIAL.print ("[HTTP] DOBI … / n"); // započinjemo vezu i šaljemo HTTP zaglavlje int httpCode = http. GET (); // httpCode će biti negativan u slučaju pogreške ako je (httpCode> 0) {// HTTP zaglavlje poslano i zaglavlje odgovora poslužitelja obrađeno USE_SERIAL.printf ("[HTTP] DOBIJI… kod: %d / n", // datoteka pronađena na poslužitelju
if (httpCode == HTTP_CODE_OK) {Niz korisnih podataka = http.getString (); USE_SERIAL.println (korisni teret); }} else {USE_SERIAL.printf ("[HTTP] GET … nije uspio, greška: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); kašnjenje (100); }}
Ovo je kod koji sam koristio na svom nodemcu. Morat ćete imati instalirane te knjižnice.
Možete testirati pomoću serijskog monitora i pritisnuti daljinske tipke koje ste dodali u kôd da vidite odgovor.
U retku:
http.begin ("https:// [korisnik]: [prolaz]@[ip]: [port]/chromecastpause? data =" + podaci);
Morate promijeniti [korisnika] u svog korisnika i tako dalje. BEZ zagrada. zagrade su za prikaz polja vještica za promjenu.
Ta linija također neće raditi sve dok svoj tok ne postavimo u nodered.
Korak 4: Stvaranje toka u Noderedu
Kao što je spomenuto na početku, koristim hass.io s noderedom. Ako pokrenete drugačiji postav, morat ćete ga promijeniti! Na slici možete vidjeti da se prilikom pritiska na gumb prikazuje u prozoru za otklanjanje pogrešaka …
Čvor promjene korisnog tereta vjerojatno bi se mogao preskočiti da sam odabrao nešto drugačije od tih podataka = u prethodnom koraku. Sklopni čvor koji koristim puno je veći nego samo pauzirajte, ali to je samo zato da mogu dodati više ir signala za upotrebu chromecasta za radio postaje itd.
Za pauzu samo reprodukcije možete upotrijebiti tok na drugoj slici.
[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "method": "get", "upload": false, "swaggerDoc": "", "x": 133, "y": 98, "žice":
Uklonio sam ime userpass i url iz ovoga pa ćete ga možda morati urediti.
dodajte prekidač ako želite reagirati na više od pauze (pogledajte sliku na primjer)
U čvoru kućnog pomoćnika za pauziranje upotrebe:
name: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [vaš chromecast ovdje]"}
za sljedeću pjesmu samo kopirajte taj čvor i uredite uslugu na: media_next_track i ime u: next chromecast
5. korak: Neobavezno Alexa Pause Chromecast
Izborna naredba dodavanja alexa za pauziranje chromecasta:
Ovdje postoje opcije. Možete napraviti jedan alexa čvor pod nazivom pause chromecast koji pauzira chromecast, ili možete napraviti jedan koji se zove pause tv koji provjerava trenutnu aktivnost harmonije i pauzira ovisno o tome.
Ovo ću kasnije dodati ovdje..
Preporučeni:
Automobil Arduino s L293D i daljinskim upravljačem: 5 koraka
Automobil Arduino s L293D i daljinskim upravljačem: slučajno imam čip L293D i IR daljinski upravljač i prijemnik. Želim izgraditi Arduino automobil bez mnogo kupovine, pa sam donio samo Arduino šasiju automobila na četiri kotača. Budući da Tinkercad ima L293D i IC prijemnik i Arduino, stvorio sam skicu
Kako kontrolirati 4dof velike snage robotske ruke velike veličine s Arduino i Ps2 daljinskim upravljačem?: 4 koraka
Kako kontrolirati 4dof velike snage robotske ruke velike veličine s Arduino i Ps2 daljinskim upravljačem?: Ovaj komplet koristi motor velike snage mg996, potrebna mu je velika struja, testirali smo puno ulazne energije. Samo će adapter 5v 6a raditi. I arduino rad na ploči na 6dof robotskoj ruci također.end: napiši kupi SINONING Trgovina za igračke uradi sam
Upravljanje televizorom i spojenom Raspberry Pi istim daljinskim upravljačem: 4 koraka
Upravljanje televizorom i povezanim Raspberry Pi -om istim daljinskim upravljačem: Za upravljanje Raspberry Pi -om s infracrvenim daljinskim upravljačem koristili smo se LIRC. To je radilo sve do Kernela 4.19.X, kada je postalo puno izazovno natjerati LIRC da radi. U ovom projektu imamo Raspberry Pi 3 B+ spojen na televizor i mi
Veliki Arduino LCD sat sa dva alarma i monitorom temperature kontroliran daljinskim upravljačem za IR TV: 5 koraka
Veliki Arduino LCD sat s dva alarma i monitorom temperature kontroliranim daljinskim upravljačem za IR TV: Kako izgraditi LCD sat zasnovan na Arduinu s dva alarma i monitorom temperature kojim upravlja daljinski upravljač za TV
Animatronic oči s daljinskim upravljačem: 5 koraka
Animatronic Eyes s daljinskim upravljačem: Ovo je uputa kako stvoriti Animatronic Eyes kojima se može daljinski upravljati s računala putem WiFi -a. Koristi minimalne elektroničke komponente, nema PCB -a i zahtijeva minimalno lemljenje. Njime možete upravljati s tipkovnice računala pa vam ne treba e