Përmbajtje:
- Hapi 1: Pajisja
- Hapi 2: Sinjali në distancë
- Hapi 3: Shkrimi i Kodit për Dërgimin në Nodered
- Hapi 4: Krijimi i një Rrjedhe në Nodered
- Hapi 5: Alexa Opsionale Ndaloni Chromecast
Video: Ndalo Chromcast me një telekomandë: 5 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
Unë kam një telekomandë të harmonisë Logitech dhe drejtoj Home asistent në një pi mjedër.
Doja të isha në gjendje të ndaloja chromecast nga telekomanda ime, por kam një televizor të vjetër që nuk e mbështet këtë përmes HDMI. Ideja ime ishte atëherë të përdorja një NodeMcu për të kapur sinjalin ir dhe pauzën.
Nëse nuk mund ta përdorni ose keni pyetje, ju lutemi komentoni më poshtë
Hapi 1: Pajisja
Pajisjet e nevojshme:
Nodemcu (https://www.ebay.com/sch/i.html?_from=R40&_trksid=…
Marrës Ir (si ky:
telat dupont
Kabllo mikro usb (nodemcu e energjisë)
Unë përdor Logitech Harmony -hub
Për qasjen time Ju keni nevojë për një Raspberry pi me hass.io të instaluar dhe të koduar. Unë nuk do të hyj në vendosjen e gjërave ndihmëse këtu. Nëse përdorni diçka tjetër përveç ndihmësit të shtëpisë, duhet t'i përshtatni gjërat vetë.
Ju duhet të jeni në gjendje të përdorni Nodemcu në Arduino IDE pasi nuk do të hyj në këtë këtu
Hapi 2: Sinjali në distancë
Mënyra se si e bëra ishte të kopjoja një sinjal nga një telekomandë që nuk e përdor në harmoni me telekomandën.
Kam përdorur një telekomandë për modelin televizor panasonic TXL32C3E pasi nuk ndërhyn me pajisjet e mia në katin tim të parë. Ky është një televizor që kam lart.
Nëse nuk përdorni harmoninë, mund ta kaloni këtë.
Pra, për të gjetur sinjalin, unë përdor këtë skicë:
/ * * IRremoteESP8266: IRrecvDumpV2 - detajet e hedhjes së kodeve IR me IRrecv * Një detektor/demodulator IR duhet të jetë i lidhur me hyrjen RECV_PIN. * * E drejta e autorit 2009 Ken Shirriff, https://arcfn.com * E drejta e autorit 2017 David Conran * * Shembull diagrami i qarkut: * https://arcfn.com * * Ndryshimet: * Versioni 0.3 Nëntor, 2017 * - Mbështetje për A/C deshifrim për disa protokolle. * Versioni 0.2 Prill, 2017 * - Dekodoni nga një kopje e të dhënave në mënyrë që të fillojmë të kapim më shpejt kështu * zvogëloni gjasat e keqpërdorimeve. * Bazuar në Versionin IrsendDemo të Ken Shirriff 0.1 Korrik, 2009, */
#ifndef UNIT_TEST
#përfshi #ndif #përfshi #përfshi #përfshi #nëse DEKODO_AC #përfshi #përfshi #përfshi #përfshi #përfshi #endif // DEKODO_AC
// ==================== Fillimi i Parametrave TUNEABLE =====================
// Një detektor IR/demodulator është i lidhur me pin GPIO 14 // p.sh. D5 në një bord NodeMCU. #përcaktoni RECV_PIN 14
// Shkalla e baudit të lidhjes serike.
// dmth. Mesazhi i statusit do t'i dërgohet kompjuterit me këtë ritëm të mirë. // Mundohuni të shmangni shpejtësitë e ngadalta si 9600, pasi do të humbisni mesazhet dhe // do të shkaktoni probleme të tjera. Rekomandohet 115200 (ose më shpejt). // SHENIM: Sigurohuni që e keni vendosur Monitorin tuaj Serial në të njëjtën shpejtësi. #përcaktoni BAUD_RATE 115200
// Meqenëse ky program është një kapje/dekodues me qëllim të veçantë, le të përdorim një më të madh
// sesa tampon normal, kështu që ne mund të trajtojmë kodet e largëta të Kondicionerit. #përcakto CAPTURE_BUFFER_SIZE 1024
// TIMEOUT është Nr. prej mili-sekondash të të dhënave jo më shumë para se të shqyrtojmë a
// mesazhi mbaroi. // Ky parametër është një kompromis interesant. Sa më i gjatë të jetë koha, aq më // komplekse mund të kapë një mesazh. p.sh. Disa protokolle të pajisjes do të dërgojnë // pako mesazhesh të shumëfishta njëra pas tjetrës, si telekomandat e kondicionerit. // Protokollet e Air Coniditioner shpesh kanë një hendek të konsiderueshëm (20-40+ms) midis // paketave. // Ana negative e një vlere të madhe të afatit është shumë protokolle më pak komplekse // dërgoni mesazhe të shumta kur butoni i telekomandës mbahet i shtypur. Hendeku midis // tyre shpesh është gjithashtu rreth 20+ms. Kjo mund të rezultojë që të dhënat e papërpunuara të jenë 2-3+ // herë më të mëdha se sa nevojiten pasi ka kapur 2-3+ mesazhe në një // kapje të vetme. Vendosja e një vlere të ulët të afatit mund ta zgjidhë këtë. // Pra, zgjedhja e vlerës më të mirë TIMEOUT për rastin tuaj të veçantë është // mjaft e nuancuar. Fat i mirë dhe gjueti e lumtur. // SHENIM: Mos e kaloni MAX_TIMEOUT_MS. Zakonisht 130ms. #nëse DEKODO_AC #përcaktoni KOHN 50U // Disa njësi të A/C kanë boshllëqe në protokollet e tyre prej 40ms. // p.sh. Kelvinator // Një vlerë kaq e madhe mund të gëlltisë përsëritjet e disa protokolleve #të tjera // DECODE_AC #përcakto TIMEOUT 15U // I përshtatet shumicës së mesazheve, duke mos gëlltitur shumë përsëritje. #endif // DECODE_AC // Alternativat: // #define TIMEOUT 90U // Përshtaten mesazhe me boshllëqe të mëdha si XMP-1 dhe disa njësi ajri //, por aksidentalisht mund të gëlltisin mesazhe të përsëritura // në daljen e rawData . // #define TIMEOUT MAX_TIMEOUT_MS // Kjo do ta vendosë atë në maksimumin tonë të lejuar aktualisht //. Vlerat kaq të larta janë problematike // sepse është afërsisht kufiri tipik // ku shumica e mesazheve përsëriten. // p.sh. Ai do të ndalojë deshifrimin e një mesazhi dhe // do të fillojë ta dërgojë atë në serial pikërisht // në kohën kur mesazhi tjetër ka të ngjarë të transmetohet // dhe mund ta humbasë atë.
// Vendosni paketat më të vogla të mesazheve "PANJOHUR" për të cilat ne në të vërtetë kujdesemi.
// Kjo vlerë ndihmon në zvogëlimin e shkallës së zbulimit pozitiv të rremë të sfondit IR // zhurmës si mesazhe reale. Shanset që zhurma IR e sfondit të zbulohet // si mesazh rritet me gjatësinë e vlerës TIMEOUT. (Shih më lart) // Ana negative e vendosjes së këtij mesazhi shumë të madh është se mund të humbasësh disa mesazhe të vlefshme // të shkurtra për protokollet që kjo bibliotekë ende nuk i deshifron. // // Vendoseni më lart nëse merrni shumë mesazhe të shkurtra të panjohura të rastit kur asgjë // nuk duhet të dërgojë një mesazh. // Vendoseni më poshtë nëse jeni të sigurt që konfigurimi juaj po funksionon, por nuk sheh mesazhe // nga pajisja juaj. (p.sh. telekomandat e tjera IR.) // SHENIM: Vendoseni këtë vlerë shumë të lartë për të fikur në mënyrë efektive zbulimin e PANJOHUR. #përcakto MIN_UNKNOWN_SIZE 12 // ==================== fundi i PARAMETRAVE TUNEABLE =====================
// Përdorni aktivizimin e veçorisë ruajtëse të ruajtjes për mbulim më të plotë të kapjes.
IRrecv irrecv (RECV_PIN, CAPTURE_BUFFER_SIZE, KOHA, e vërtetë);
rezultatet e deshifrimit të rezultateve; // Diku për të ruajtur rezultatet
// Shfaqni gjendjen e lexueshme nga njeriu të një mesazhi A/C nëse mundemi.
void dumpACInfo (deshifro_rezultatet *rezultatet) {Përshkrimi i vargut = ""; #nëse DEKODO_DAIKIN nëse (rezultate-> lloji i deshifrimit == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (rezultatet-> gjendja); përshkrim = ac.toString (); } #endif // DECODE_DAIKIN #nëse DECODE_FUJITSU_AC nëse (rezultate-> lloji i dekodimit == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (rezultatet-> gjendja, rezultatet-> bit / 8); përshkrim = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR nëse (rezultate-> lloji i dekodimit == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (rezultatet-> gjendja); përshkrim = ac.toString (); } #endif // DECODE_KELVINATOR #nëse DECODE_TOSHIBA_AC nëse (rezultate-> lloji i deshifrimit == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (rezultatet-> gjendja); përshkrim = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA nëse (rezultate-> lloji i dekodimit == MIDEA) {IRMideaAC ac (0); ac.setRaw (rezultatet-> vlera); // Midea përdor vlerën në vend të gjendjes. përshkrim = ac.toString (); } #endif // DECODE_MIDEA // Nëse kemi një përshkrim të lexueshëm nga njeriu të mesazhit, shfaqeni atë. nëse (përshkrimi! = "") Serial.println ("Mesg Desc.:" + përshkrim); }
// Seksioni i kodit ekzekutohet vetëm një herë gjatë fillimit.
void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); vonesë (500); // Prisni pak që lidhja serike të vendoset.
#nëse DEKODO_HASH
// Injoroni mesazhet me më pak se minimum impulse ndezëse ose fikëse. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DEKODO_HASH irrecv.enableIRIn (); // Nis marrësin}
// Seksioni i përsëritur i kodit
// void loop () {// Kontrolloni nëse kodi IR është marrë. if (irrecv.decode (& results)) {// Shfaq një afat kohor të papërpunuar. uint32_t tani = millis (); Serial.printf ("Vula kohore: %06u. %03u / n", tani / 1000, tani %1000); if (results.overflow) Serial.printf ("PARALAJMRIM: Kodi IR është shumë i madh për tampon (> = %d)." "Ky rezultat nuk duhet besuar derisa të zgjidhet kjo." "Redakto dhe rris CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Shfaq daljen bazë të asaj që gjetëm. Serial.print (resultToHumanReadableBasic (& rezultatet)); dumpACInfo (& rezultatet); // Shfaqni çdo informacion shtesë të A/C nëse e kemi. rendimenti (); // Ushqeni WDT pasi dalja e tekstit mund të marrë pak kohë për t'u printuar.
// Shfaq versionin e bibliotekës me të cilin u kap mesazhi.
Serial.print ("Biblioteka: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Serial.println ();
// Dalja e informacionit të kohës RAW të rezultatit.
Serial.println (resultToTimingInfo (& rezultatet)); rendimenti (); // Ushqeni WDT (përsëri)
// Nxjerr rezultatet si kod burimi
Serial.println (resultToSourceCode (& rezultatet)); Serial.println (""); // Linja bosh midis rendimentit të shënimeve (); // Ushqeni WDT (përsëri)}}
Kur kjo skedë të ngarkohet dhe të funksionojë me monitor serial të hapur, do të dalë kodi për shtypjen e butonit (shiko figurën)
Shkruani kodet që dëshironi të përdorni për përdorim të mëvonshëm. Kam përdorur excel për të shënuar atë që kam për butonat që doja të përdorja (shiko foton)
Kam redaktuar butonat në aktivitetin tim Netflix për të dërguar sinjal pauzë nga telekomanda panasonic.. (shiko foton)
Hapi 3: Shkrimi i Kodit për Dërgimin në Nodered
#ifndef UNIT_TEST #përfshijnë #endif #include
#përfshi
#përfshi
#përfshi
#përfshi
#përfshi
const char* ssid = ""; // Fut SSID këtu char* password = ""; // Fut fjalëkalimin këtu const char *host = ""; // Ip adresa #përcaktoni USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); rezultatet e deshifrimit të rezultateve; void setup () {irrecv.enableIRIn (); // Filloni marrësin USE_SERIAL.filloni (115200); // USE_SERIAL.setDebugOutput (e vërtetë); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();
për (uint8_t t = 4; t> 0; t--) {
USE_SERIAL.printf ("[SETUP] PRIT %d… / n", t); USE_SERIAL.flush (); vonesa (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, fjalëkalim); } void loop () {if (irrecv.decode (& results)) {
// Ndryshoni këtë vlerë sinjali për atë që keni marrë
if (results.value == 0x40040D00606D) {USE_SERIAL.println ("pauzë Sinjali i marrë"); wifisend (pauzë); vonesa (1000);
} nëse (results.value == 0x400401007273) {
USE_SERIAL.println ("e mëparshme");
wifisend ("më parë"); vonesa (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("tjetër"); wifisend ("tjetër"); vonesa (1000); }
irrecv.resume (); // Merr vlerën tjetër} vonesë (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] fillon… / n"); // konfiguroni serverin e tragjedisë dhe url -në http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + të dhëna); USE_SERIAL.print ("[HTTP] MERR… / n"); // filloni lidhjen dhe dërgoni kokën HTTP int httpCode = http. GET (); // httpCode do të jetë negativ në gabim nëse (httpCode> 0) {// Koka e HTTP është dërguar dhe titulli i përgjigjes së serverit është trajtuar USE_SERIAL.printf ("[HTTP] GET… kodi: %d / n", // skedari i gjetur në server
nëse (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (ngarkesë); }} else {USE_SERIAL.printf ("[HTTP] GET … dështoi, gabim: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); vonesë (100); }}
Ky është kodi që kam përdorur në nodemcu tim. Ju do të keni nevojë të keni ato biblioteka të instaluara.
Ju mund të testoni duke përdorur monitor serik dhe shtypni butonat e telekomandës që keni shtuar në kod për të parë përgjigjen..
Në rresht:
http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + të dhëna);
Ju duhet të ndryshoni [përdoruesin] në përdoruesin tuaj dhe kështu me radhë. PA kllapa. kllapat janë atje për të treguar ndryshimin e fushave të shtrigave.
Ajo linjë gjithashtu nuk do të funksionojë derisa të konfigurojmë rrjedhën tonë në nyje.
Hapi 4: Krijimi i një Rrjedhe në Nodered
Siç u përmend në fillim unë përdor hass.io me nodered. Nëse drejtoni një konfigurim tjetër, do t'ju duhet ta bëni këtë ndryshe! Ju mund të shihni në imazh që kur të shtypni një buton shfaqet në dritaren e korrigjimit …
Nyja e ngarkesës së ndryshimit ndoshta do të ishte anashkaluar nëse do të kisha zgjedhur diçka të ndryshme nga ato të dhëna = në hapin e mëparshëm. Nyja ndërruese që përdor është shumë më e madhe se sa vetëm një pauzë, por vetëm kështu mund të shtoj më shumë sinjale ir për të përdorur chromecast për stacionet radio etj.
Për të luajtur pauzë, mund të përdorni rrjedhën në figurën tjetër.
[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "metodë": "merrni", "ngarkoni": false, "swaggerDoc": "", "x": 133, "y": 98, "tela":
Unë hoqa emrin e përdoruesit dhe url -në nga kjo, kështu që ju mund të keni nevojë ta modifikoni atë.
shtoni një nyje ndërprerëse nëse doni të reagoni në më shumë se vetëm një pauzë (shiko foton për shembull)
Në nyjen e ndihmësit në shtëpi për përdorim pauzë:
emri: luaj pauzë chromecastdomain: media_playerShërbimi: media_play_pausedata: {"unit_id": "media_player. [chromecast juaj këtu]"}
për pjesën tjetër thjesht kopjoni atë nyje dhe modifikoni shërbimin në: media_next_track dhe emrin në: chromecast tjetër
Hapi 5: Alexa Opsionale Ndaloni Chromecast
Komanda opsionale shtoni alexa për pauzën e chromecast:
Këtu ka opsione.. Ju mund të bëni një nyje alexa të quajtur pause chromecast që ndalon chromecast, ose mund të bëni një të quajtur pause tv që kontrollon aktivitetin aktual të harmonisë dhe bëni pauzë në varësi të kësaj.
Do ta shtoj këtu më vonë..
Recommended:
IRduino: Telekomandë Arduino - Imitoni një telekomandë të humbur: 6 hapa
IRduino: Telekomandë Arduino - Imitoni një telekomandë të humbur: Nëse e keni humbur ndonjëherë telekomandën për televizorin ose DVD player -in tuaj, e dini sa frustruese është të ecësh, të gjesh dhe të përdorësh butonat në vetë pajisjen. Ndonjëherë, këto butona nuk ofrojnë as të njëjtin funksionalitet si telekomanda. Merr
Ndalo shikimin pa programim: 5 hapa
Ndalo shikimin pa programim: Hej djema, Për të gjithë fillestarët, këtu është një projekt i mrekullueshëm që mund të krijoni pa programim. Simpleshtë e thjeshtë dhe gjithashtu me kosto efektive. Para se të filloni, le të hedhim një vështrim në listën e pjesëve: IC të përdorura: 1) 555 timer- x12) CD 4081BE (DHE g
Ndalo Rants With the Rant Buddy: 8 hapa (me fotografi)
Stop Rants With the Rant Buddy: Në shtëpinë time gjejmë shumë për t'u ankuar: Autobusi ishte vonë, ftohësi i ujit në punë nuk ishte aq i ftohtë, ushqimi u mbyll herët. Por të mbetura të pakontrolluara, këto murmurima të vogla mund të spiralizohen në kërcime të plota. Aty është ky ndalim i dobishëm për të folur
Roboti me telekomandë duke përdorur Arduino dhe T.V. Telekomandë: 11 hapa
Roboti me telekomandë duke përdorur Arduino dhe TV Telekomandë: Kjo makinë me telekomandë mund të lëvizet duke përdorur praktikisht çdo lloj telekomande si TV, AC etj. Përdor faktin që telekomanda lëshon IR (infra të kuqe). Kjo pronë përdoret duke përdorur një marrës IR, i cili është një sensor shumë i lirë. Në
Pan dhe telekomandë me telekomandë: 7 hapa
Pan i kontrolluar nga distanca dhe koka e pjerrët: Unë gjithmonë kam dashur një tigan të kontrolluar nga distanca dhe kokë të pjerrët. Ndoshta ishte për kamerën time video, një gjuajtës i gomës ose një gjuajtës me armë uji. Nuk ka shumë rëndësi se çfarë vendosni në kuvertën e sipërme (përderisa nuk është shumë e rëndë), me këtë projekt të vogël ju