Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-23 14:58
Turiu „Logitech“harmonijos nuotolinio valdymo pultą ir paleidžiu namų asistentą su aviečių pi.
Norėjau, kad galėčiau pristabdyti „Chromecast“iš savo nuotolinio valdymo pulto, bet turiu seną televizorių, kuris to nepalaiko per hdmi. Tada mano idėja buvo naudoti „NodeMcu“, kad sugautų ir signalą ir pristabdytų.
Jei jums nepavyksta to padaryti arba turite klausimų, pakomentuokite žemiau
1 žingsnis: įrengimas
Reikalinga įranga:
„Nodemcu“(https://www.ebay.com/sch/i.html?_from=R40&_trksid=…
Ir imtuvas (pvz., Tai:
dupontiniai laidai
Mikro USB kabelis (maitinimo nodemcu)
Aš naudoju „Logitech Harmony -hub“
Mano požiūriu, jums reikia Raspberry pi su hass.io įdiegta ir modifikuota. Aš čia nesiruošiu kurti namų pagalbos. Jei naudojate ką nors kitą nei namų asistentas, turite patys pritaikyti daiktus.
Turite mokėti naudoti „Nodemcu“„Arduino IDE“, nes čia aš to nesileisiu
2 žingsnis: nuotolinis signalas
Aš tai padariau kopijuodamas signalą iš nuotolinio valdymo pulto, kurio nenaudoju, į nuotolinio valdymo pultą.
„Panasonic“televizoriaus modeliui TXL32C3E naudojau nuotolinio valdymo pultą, nes tai netrukdo mano pirmame aukšte esančiai įrangai. Tai televizorius, kurį turiu viršuje.
Jei nenaudojate harmonijos, galite tai praleisti.
Taigi, norėdamas rasti signalą, naudoju šį eskizą:
/ * * IRremoteESP8266: IRrecvDumpV2 - išsami informacija apie IR kodus su IRrecv * Prie įvesties RECV_PIN turi būti prijungtas IR detektorius/demoduliatorius. * * Autorių teisės 2009 Ken Shirriff, https://arcfn.com * Autorių teisės 2017 David Conran * * Pavyzdinė schema: * https://arcfn.com * * Pakeitimai: * 2017 m. Lapkričio 3 d. Versija * - A/C palaikymas kai kurių protokolų dekodavimas. * 2017 m. Balandžio mėn. 0.2 versija * - iššifruokite iš duomenų kopijos, kad galėtume greičiau užfiksuoti, taip * sumažindami klaidingų gaudymų tikimybę. * Remiantis Ken Shirriff „IrsendDemo“versija, 2009 m. Liepos 0,1 d., */
#ifndef UNIT_TEST
#include #endif #include #include #include #if DECODE_AC #include #include #include #include #include #endif // DECODE_AC
// ==================== TUNEABLE PARAMETRŲ pradžia ====================
// Prie GPIO kištuko 14 prijungtas IR detektorius/demoduliatorius // pvz. D5 „NodeMCU“plokštėje. #define RECV_PIN 14
// Serijinio ryšio perdavimo sparta.
// t.y. būsenos pranešimas bus siunčiamas į kompiuterį tokiu perdavimo greičiu. // Stenkitės vengti lėto greičio, pavyzdžiui, 9600, nes praleisite pranešimus ir // sukelsite kitų problemų. Rekomenduojama 115200 (arba greitesnė). // PASTABA: įsitikinkite, kad serijinį monitorių nustatėte tokiu pačiu greičiu. #define BAUD_RATE 115200
// Kadangi ši programa yra specialios paskirties fiksavimo/dekodavimo priemonė, naudokime didesnę
// nei įprastas buferis, kad galėtume tvarkyti oro kondicionieriaus nuotolinius kodus. #define CAPTURE_BUFFER_SIZE 1024
// TIMEOUT yra Nr. milisekundžių be duomenų, prieš svarstydami a
// pranešimas baigtas. // Šis parametras yra įdomus kompromisas. Kuo ilgesnis laikas, tuo // sudėtingesnis pranešimas, kurį jis gali užfiksuoti. pvz. Kai kurie įrenginių protokolai, pvz., Oro kondicionieriaus nuotolinio valdymo pultai, greitai išsiųs // kelis pranešimų paketus. // „Air Coniditioner“protokolai dažnai turi didelį tarpą (20–40+ms) tarp paketų. // Didelės skirtojo laiko vertės minusas yra daug mažiau sudėtingų protokolų // siunčia kelis pranešimus, kai nuotolinio valdymo pulto mygtukas yra nuspaustas. Tarpas tarp // dažnai taip pat yra apie 20+ms. Dėl to neapdoroti duomenys gali būti 2–3+ // kartus didesni nei reikia, nes jie užfiksavo 2–3+ pranešimus vienu // fiksavimu. Nustačius mažą skirtojo laiko reikšmę, tai gali būti išspręsta. // Taigi, pasirinkti tinkamiausią TIMEOUT vertę konkrečiam atvejui yra // gana niuansuota. Sėkmės ir laimingos medžioklės. // PASTABA: neviršykite MAX_TIMEOUT_MS. Paprastai 130 ms. #if DECODE_AC #define TIMEOUT 50U // Kai kurių oro kondicionavimo įrenginių protokoluose yra ~ 40 ms spragų. // pvz. Kelvinator // Tokia didelė vertė gali praryti kai kurių protokolų kartojimus #else // DECODE_AC #define TIMEOUT 15U // Tinka daugumai pranešimų, tačiau nepraryja daug kartojimų. #endif // DECODE_AC // Alternatyvos: // #define TIMEOUT 90U // Tinka žinutėms su didelėmis spragomis, tokiomis kaip XMP-1 ir kai kurie oro kondicionieriai //, tačiau gali netyčia nuryti pasikartojančius pranešimus // į rawData išvestį. // #define TIMEOUT MAX_TIMEOUT_MS // Tai nustatys didžiausią šiuo metu leidžiamą //. Tokios didelės vertės yra problematiškos // nes tai yra maždaug tipinė riba //, kur kartojasi dauguma pranešimų. // pvz. Jis nustos iššifruoti pranešimą ir // pradės jį siųsti į serijinį tiksliai // tuo metu, kai greičiausiai // bus perduotas kitas pranešimas, ir gali jo nepastebėti.
// Nustatykite mažiausio dydžio „UNKNOWN“pranešimų paketus, kurie mums iš tikrųjų rūpi.
// Ši vertė padeda sumažinti klaidingai teigiamą IR fono aptikimo dažnį // triukšmą kaip tikrus pranešimus. Fono IR triukšmo aptikimo tikimybė // kaip pranešimas didėja ilgėjant TIMEOUT reikšmei. (Žr. Aukščiau) // Šio pranešimo nustatymo per didelis trūkumas yra tai, kad galite praleisti keletą galiojančių // trumpųjų pranešimų protokolams, kurių ši biblioteka dar neiššifruoja. // // Nustatykite aukščiau, jei gausite daug atsitiktinių trumpų nežinomų pranešimų, kai niekas // neturėtų siųsti pranešimo. // Nustatykite žemesnę, jei esate tikri, kad jūsų sąranka veikia, bet ji nemato pranešimų // iš jūsų įrenginio. (pvz., veikia kiti IR nuotolinio valdymo pulteliai.) // PASTABA: nustatykite šią vertę labai didelę, kad veiksmingai išjungtumėte NEPATIKTĄ aptikimą. #define MIN_UNKNOWN_SIZE 12 // ==================== Derinamųjų parametrų pabaiga ====================
// Norėdami įjungti išsamesnę fiksavimo aprėptį, naudokite įjungimo buferio funkciją.
IRrecv irrecv (RECV_PIN, CAPTURE_BUFFER_SIZE, TIMEOUT, true);
decode_results rezultatai; // Kažkur išsaugoti rezultatus
// Jei galime, parodykite žmonėms skaitomą oro kondicionavimo pranešimo būseną.
void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (rezultatai-> būsena); aprašymas = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (rezultatai-> būsena, rezultatai-> bitai / 8); aprašymas = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (rezultatai-> būsena); aprašymas = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (rezultatai-> būsena); aprašymas = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (rezultatai-> vertė); // „Midea“vietoj būsenos naudoja vertę. aprašymas = ac.toString (); } #endif // DECODE_MIDEA // Jei gavome žmonėms suprantamą pranešimo aprašymą, parodykite jį. if (description! = "") Serial.println ("Mesg Desc.:" + aprašymas); }
// Kodo dalis paleidžiama tik vieną kartą paleidžiant.
void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); vėlavimas (500); // Šiek tiek palaukite, kol bus sukurtas nuoseklusis ryšys.
#jei DECODE_HASH
// Ignoruoti pranešimus, kurių įjungimo arba išjungimo impulsai yra mažesni nei minimalūs. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Paleiskite imtuvą}
// Pasikartojantis kodo skyrius
// void loop () {// Patikrinkite, ar gautas IR kodas. if (irrecv.decode (& rezultatai)) {// Rodyti neapdorotą laiko žymą. uint32_t dabar = milis (); Serial.printf ("Laiko žyma: %06u. %03u / n", dabar / 1000, dabar %1000); if (results.overflow) Serial.printf ("ĮSPĖJIMAS: IR kodas per didelis buferiui (> = %d)." "Šis rezultatas neturėtų būti patikimas, kol tai nebus išspręsta." "Redaguoti ir padidinti CAPTURE_BUFFER_SIZE. / n “, CAPTURE_BUFFER_SIZE); // Rodyti pagrindinius rezultatus, kuriuos radome. Serial.print (resultToHumanReadableBasic (& rezultatai)); dumpACInfo (& rezultatai); // Rodyti bet kokią papildomą oro kondicionavimo informaciją, jei ją turime. išeiga (); // Pateikite WDT, nes teksto išvestis gali užtrukti.
// Rodyti bibliotekos versiją, su kuria buvo užfiksuotas pranešimas.
Serial.print ("Biblioteka: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Serial.println ();
// Išveskite rezultato RAW laiko informaciją.
Serial.println (resultToTimingInfo (& rezultatai)); išeiga (); // Pateikite WDT (dar kartą)
// Išveskite rezultatus kaip šaltinio kodą
Serial.println (resultToSourceCode (& rezultatai)); Serial.println (""); // Tuščia eilutė tarp įrašų return (); // Pateikite WDT (dar kartą)}}
Kai šis eskizas bus įkeltas ir paleistas atidarius serijinį monitorių, jis išves mygtuko paspaudimo kodą (žr. Paveikslėlį)
Užsirašykite kodus, kuriuos norite naudoti vėliau. Aš naudoju „Excel“, kad užrašyčiau, ką gavau už mygtukus, kuriuos norėjau naudoti (žr. Paveikslėlį)
Redagavau „Netflix“veiklos mygtukus, kad galėčiau siųsti pauzės signalą iš „Panasonic“nuotolinio valdymo pulto. (Žr. Paveikslėlį)
3 veiksmas: siuntimo į „Nodered“kodo rašymas
#ifndef UNIT_TEST #include #endif #include
#įtraukti
#įtraukti
#įtraukti
#įtraukti
#įtraukti
const char* ssid = ""; // Čia įveskite SSID char* password = ""; // Čia įveskite slaptažodį const char *host = ""; // IP adresas #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results rezultatai; void setup () {irrecv.enableIRIn (); // Paleiskite imtuvą USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (tiesa); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();
už (uint8_t t = 4; t> 0; t--) {
USE_SERIAL.printf ("[SETUP] PALAUKITE %d… / n", t); USE_SERIAL.flush (); vėlavimas (1000); } „WiFi.mode“(WIFI_STA); WiFiMulti.addAP (ssid, slaptažodis); } void loop () {if (irrecv.decode (ir rezultatai)) {
// Pakeiskite šią signalo vertę tam, kurį gavote
if (results.value == 0x40040D00606D) {USE_SERIAL.println ("pauzė signalas gautas"); wifisend (pauzė); vėlavimas (1000);
} if (results.value == 0x400401007273) {
USE_SERIAL.println ("ankstesnis");
wifisend („ankstesnis“); vėlavimas (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("kitas"); wifisend („kitas“); vėlavimas (1000); }
irrecv.resume (); // Kitos vertės gavimas} delay (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print („[HTTP] prasideda… / n“); // sukonfigūruoti tragedijos serverį ir URL http.begin ("https:// [vartotojas]: [leidimas]@[ip]: [prievadas]/chromecastpause? data =" + duomenys); USE_SERIAL.print („[HTTP] GET… / n“); // pradėti ryšį ir siųsti HTTP antraštę int httpCode = http. GET (); // httpCode bus neigiamas klaidos atveju, jei (httpCode> 0) {// HTTP antraštė buvo išsiųsta ir serverio atsakymo antraštė buvo apdorota USE_SERIAL.printf ("[HTTP] GET… code: %d / n", // failas rastas serveryje
if (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (naudingoji apkrova); }} else {USE_SERIAL.printf ("[HTTP] GET … nepavyko, klaida: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); vėlavimas (100); }}
Tai kodas, kurį naudoju savo „nodemcu“. Jums reikės įdiegti šias bibliotekas.
Galite išbandyti naudodami nuoseklųjį monitorių ir paspausdami nuotolinius mygtukus, kuriuos pridėjote kodu, kad pamatytumėte atsakymą.
Eilutėje:
http.begin ("https:// [vartotojas]: [leidimas]@[ip]: [prievadas]/chromecastpause? data =" + duomenys);
Turite pakeisti [user] į savo vartotoją ir pan. BE skliaustų. skliausteliuose yra raganų laukai, kuriuos reikia keisti.
Ši linija taip pat neveiks, kol nenustatysime savo srauto.
4 žingsnis: sukurkite srautą „Nodered“
Kaip minėta pradžioje, aš naudoju hass.io su nodered. Jei vykdysite kitą sąranką, turėsite tai padaryti kitaip! Paveikslėlyje galite pamatyti, kad paspaudus mygtuką, jis rodomas derinimo lange …
Pakeisti naudingosios apkrovos mazgą tikriausiai būtų buvę galima praleisti, jei ankstesniame žingsnyje būčiau pasirinkęs kažką kitokio, nei tie duomenys =. Mano naudojamas jungiklio mazgas yra daug didesnis, o tik pertrauka, bet tai tik tam, kad galėčiau pridėti daugiau signalų, kad galėčiau naudoti „Chromecast“radijo stotims ir pan.
Norėdami paleisti žaidimą, galite naudoti kitame paveikslėlyje pateiktą srautą.
[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "method": "get", "upload": false, "swaggerDoc": "", "x": 133, "y": 98, "laidai":
Aš pašalinau vardą userpass ir url iš to, todėl gali tekti jį redaguoti.
pridėkite jungiklio mazgą, jei norite reaguoti ne tik į pristabdymą (žr., pavyzdžiui, paveikslėlį)
Namų asistento mazge, skirtame pristabdyti:
name: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [jūsų chromecast čia]"}
kitam takeliui tiesiog nukopijuokite tą mazgą ir redaguokite paslaugą į: media_next_track ir pavadinkite: next chromecast
5 veiksmas: pasirinktinai „Alexa“pristabdykite „Chromecast“
Neprivaloma pridėti komandą „alexa“pristabdyti „Chromecast“:
Čia yra parinkčių.. Galite sukurti vieną alexa nnode, pavadintą pause chromecast, kuri pristabdo chromecast, arba galite sukurti pauzės televizorių, kuris patikrins dabartinę harmonijos veiklą ir pristabdys, priklausomai nuo to.
Tai vėliau pridėsiu čia..
Rekomenduojamas:
Įsižiebkite šviesos diodus naudodami televizoriaus nuotolinio valdymo pultą: 3 žingsniai
Įsižiebkite šviesos diodus naudodami televizoriaus nuotolinio valdymo pultą: Šiame projekte mes galime užsidegti šviesos diodus naudodami mūsų televizoriaus nuotolinio valdymo pultą arba bet kurį nuotolinio valdymo pultą. Tokiu būdu, kaip tai darome naudodami nuotolinio valdymo pultą, šis IR signalas turi unikalų kodą, šį unikalų kodą gauna IR imtuvas ir ką nors darykite šiuo atveju
„IRduino“: „Arduino“nuotolinio valdymo pultas - imituokite pamestą nuotolinio valdymo pultą: 6 žingsniai
„IRduino“: „Arduino“nuotolinio valdymo pultas - imituokite pamestą nuotolinio valdymo pultą: jei kada nors pametėte televizoriaus ar DVD grotuvo nuotolinio valdymo pultą, žinote, kaip apmaudu, kai tenka vaikščioti, ieškoti ir naudoti paties įrenginio mygtukus. Kartais šie mygtukai net nesuteikia tokių funkcijų kaip nuotolinio valdymo pultas. Gauti
Įprastas nuotolinio valdymo rinkinys transformuotas į keturių kanalų RC žaislinį nuotolinio valdymo pultą: 4 žingsniai
Įprastas nuotolinio valdymo rinkinys transformuotas į keturių kanalų RC žaislinį nuotolinio valdymo pultą: 62 将 通用 遥控 转换 转换 为 为 玩具 模型 中 使用 的 四方法 非常 简单。 只需 准备 一些 瓦楞纸 板 , 然后 按照 视频 教程 完成 这个 电子 项目 并 并 为 视频 教程 完成 这个 电子 项目 并 并 为
Konvertuokite savo IR nuotolinio valdymo pultą į RF nuotolinio valdymo pultą: 9 žingsniai (su paveikslėliais)
Konvertuokite savo IR nuotolinio valdymo pultą į RF nuotolinio valdymo pultą: Šiandienos instrukcijoje aš jums parodysiu, kaip galite naudoti bendrą RF modulį be mikrovaldiklio, kuris galiausiai paskatins mus sukurti projektą, kuriame bet kurio įrenginio IR nuotolinio valdymo pultą galima paversti RF Nuotolinis. Pagrindinis privalumas konvertuojant
„Olympus Evolt E510“nuotolinio kabelio išleidimas (2 versija su automatiniu fokusavimu į nuotolinio valdymo pultą): 6 žingsniai (su nuotraukomis)
„Olympus Evolt E510“nuotolinio kabelio išleidimas (2 versija su automatiniu fokusavimu į nuotolinio valdymo pultą): vakar aš pastatiau paprastą vieno mygtuko nuotolinio valdymo pultą savo „Olympus E510“. Dauguma fotoaparatų turi užrakto atleidimo mygtuką (tą, kurį paspaudžiate fotografuodami), kuris turi du režimus. Jei mygtukas švelniai paspaudžiamas, fotoaparatas automatiškai fokusuoja ir matuoja šviesą