
Tartalomjegyzék:
2025 Szerző: John Day | [email protected]. Utoljára módosítva: 2025-01-23 14:47



Van egy Logitech harmónia távirányítóm, és futtatom a Home asszisztenst egy málna pi -n.
Szerettem volna szüneteltetni a chromecastot a távirányítómról, de van egy régi tévém, ami nem támogatja ezt hdmi -n keresztül. Az én ötletem az volt, hogy egy NodeMcu segítségével elkapom az ir jelet és szüneteltetem.
Ha nem tudja működésbe hozni, vagy kérdése van, kérjük, tegye meg az alábbi megjegyzést
1. lépés: Felszerelés


Szükséges felszerelés:
Nodemcu (https://www.ebay.com/sch/i.html?_from=R40&_trksid=…
Irányító (mint például ez:
dupont vezetékek
Micro usb kábel (tápcsatlakozó)
Logitech Harmony -hub -ot használok
Az én megközelítésemhez szüksége van egy Raspberry pi -re hass.io -val, telepítve és csomózva. Nem fogok itt háziasszisztenseket beállítani. Ha a házi asszisztensen kívül mást használ, akkor magának kell alkalmazkodnia.
Tudnia kell használni a Nodemcu -t az Arduino IDE -n, mivel ebbe nem szoktam belemenni
2. lépés: Távoli jel




Én úgy csináltam, hogy egy jelet másoltam egy nem használt távirányítóból a harmónia távirányítóba.
A Panasonic TXL32C3E tv -készülékéhez távirányítót használtam, mivel ez nem zavarja az első emeleti felszereléseimet. Ez a TV van fent.
Ha nem használ harmóniát, akkor ezt kihagyhatja.
Tehát a jel megtalálásához ezt a vázlatot használtam:
/ * * IRremoteESP8266: IRrecvDumpV2 - az IR -kódok részletei az IRrecv -vel * IR -érzékelőt/demodulátort kell csatlakoztatni a RECV_PIN bemenethez. * * Copyright 2009 Ken Shirriff, https://arcfn.com * Copyright 2017 David Conran * * Példa kapcsolási rajzra: * https://arcfn.com * * Változások: * 2017. november 0.3 verzió * - A/C támogatása egyes protokollok dekódolása. * 2017. április 02. verzió * - Dekódoljon az adatok másolatából, hogy gyorsabban elkezdhessük a rögzítést, így * csökkentsük a hibás rögzítések valószínűségét. * Ken Shirriff IrsendDemo 2009. július 0,1 -i verziója alapján, */
#ifndef UNIT_TEST
#include #endif #include #include #include #if DECODE_AC #include #include #include #include #include #endif // DECODE_AC
// ==================== A TUNEABLE PARAMÉTEREK kezdete ====================
// IR érzékelő/demodulátor csatlakozik a GPIO 14 tűhöz // pl. D5 a NodeMCU táblán. #define RECV_PIN 14
// A soros kapcsolat átviteli sebessége.
// azaz az állapotüzenet ezen a sebességgel kerül elküldésre a számítógépre. // Próbálja meg elkerülni a lassú sebességeket, például a 9600 -at, mert hiányoznak az üzenetek, és // egyéb problémákat okoz. 115200 (vagy gyorsabb) ajánlott. // MEGJEGYZÉS: Győződjön meg arról, hogy a soros monitort azonos sebességre állította be. #define BAUD_RATE 115200
// Mivel ez a program speciális célú rögzítés/dekódoló, használjunk nagyobbat
// mint a normál puffer, hogy kezelni tudjuk a légkondicionáló távoli kódjait. #define CAPTURE_BUFFER_SIZE 1024
// A TIMEOUT a Nr. milli-másodpercnyi nincs adat, mielőtt a
// az üzenet véget ért. // Ez a paraméter érdekes kompromisszum. Minél hosszabb az időtúllépés, annál // összetettebb üzenetet tud rögzíteni. például. Egyes eszközprotokollok több üzenetcsomagot // küldenek gyorsan egymás után, például a légkondicionáló távirányítóit. // Az Air Coniditioner protokollok gyakran jelentős rést (20-40+ms) tartalmaznak a // csomagok között. // A nagy időtúllépési érték hátránya a sok kevésbé összetett protokoll // több üzenet küldése, ha a távvezérlő gombját lenyomva tartja. A // közötti rés gyakran szintén 20+ms körül van. Ez azt eredményezheti, hogy a nyers adatok a szükségesnél 2-3-szor nagyobbak lehetnek, mivel 2-3+ üzenetet rögzítettek egyetlen // rögzítésben. Az alacsony időtúllépési érték beállítása megoldhatja ezt. // Tehát a legjobb TIMEOUT érték kiválasztása az adott esethez // meglehetősen árnyalt. Sok sikert és jó vadászatot. // MEGJEGYZÉS: Ne lépje túl a MAX_TIMEOUT_MS időt. Általában 130 ms. #if DECODE_AC #define TIMEOUT 50U // Néhány légkondicionáló egység protokollja ~ 40 ms -os. // például. Kelvinator // Egy ekkora érték lenyelheti egyes protokollok ismétléseit #else // DECODE_AC #define TIMEOUT 15U // A legtöbb üzenethez illeszkedik, miközben nem ismétel sok ismétlést. #endif // DECODE_AC // Alternatívák: // #define TIMEOUT 90U // Alkalmas a nagy résekkel rendelkező üzenetekre, mint például az XMP-1 és néhány légkondicionáló // egység, de véletlenül lenyelheti az ismétlődő üzeneteket // a rawData kimenetben. // #define TIMEOUT MAX_TIMEOUT_MS // Ez beállítja a jelenleg engedélyezett // maximumra. Az ilyen magas értékek problematikusak //, mert nagyjából ez a tipikus határ // ahol a legtöbb üzenet ismétlődik. // például. Leállítja az üzenet dekódolását, és // pontosan akkor kezdi el küldeni a sorosnak, amikor a következő üzenet valószínűleg // továbbításra kerül, és elmaradhat.
// Állítsa be a legkisebb méretű "ISMERETLEN" üzenetcsomagokat, amelyek valóban érdekelnek minket.
// Ez az érték segít csökkenteni az infravörös háttér hamis pozitív észlelési arányát // a valós üzeneteket. A háttér infravörös zaj észlelésének esélye // üzenetként nő a TIMEOUT érték hosszával. (Lásd fent) // Az üzenet túl nagy beállításának hátránya, hogy kihagyhat néhány érvényes // rövid üzenetet a protokollokhoz, amelyeket ez a könyvtár még nem dekódol. // // Állítsa magasabbra, ha sok véletlenszerű, ismeretlen üzenetet kap, amikor semmi // nem küld üzenetet. // Állítsa alacsonyabbra, ha biztos abban, hogy a beállítás működik, de nem látja az üzeneteket // az eszközről. (pl. Más infravörös távirányítók működnek.) // MEGJEGYZÉS: Állítsa ezt az értéket nagyon magasra az ISMERETLEN felismerés hatékony kikapcsolásához. #define MIN_UNKNOWN_SIZE 12 // ==================== A TUNEABLE PARAMETERS vége ====================
// Használja a mentési puffer funkció bekapcsolását a teljesebb rögzítés érdekében.
IRrecv irrecv (RECV_PIN, CAPTURE_BUFFER_SIZE, TIMEOUT, true);
decode_results eredmények; // Valahol az eredmények tárolására
// Ha lehetséges, jelenítse meg egy légkondicionáló üzenet ember által olvasható állapotát.
void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (eredmények-> állapot); leírás = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (eredmények-> állapot, eredmények-> bit / 8); leírás = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (eredmények-> állapot); leírás = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (eredmények-> állapot); leírás = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (eredmények-> érték); // A Midea értéket használ az állapot helyett. leírás = ac.toString (); } #endif // DECODE_MIDEA // Ha ember által olvasható leírást kaptunk az üzenetről, jelenítse meg. if (description! = "") Serial.println ("Mesg Desc.:" + leírás); }
// A kódrész csak egyszer fut az indításkor.
void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); késleltetés (500); // Várjon egy kicsit, amíg létrejön a soros kapcsolat.
#ha DECODE_HASH
// A minimálisnál kisebb be- és kikapcsolási impulzusokkal rendelkező üzenetek figyelmen kívül hagyása. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Indítsa el a vevőkészüléket}
// A kód ismétlődő szakasza
// void loop () {// Ellenőrizze, hogy megkapta -e az IR -kódot. if (irrecv.decode (& results)) {// Nyers időbélyeg megjelenítése. uint32_t most = millis (); Serial.printf ("Időbélyeg: %06u. %03u / n", most / 1000, most %1000); if (results.overflow) Serial.printf ("FIGYELMEZTETÉS: Az IR -kód túl nagy a pufferhez (> = %d)." "Ezt az eredményt addig nem szabad bízni, amíg ezt nem oldják meg." "Szerkesztés és növelés CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Megjeleníti az alapkimenetet, amit találtunk. Serial.print (resultToHumanReadableBasic (& eredmények)); dumpACInfo (& eredmények); // Jelenítsen meg minden további légkondicionáló információt, ha megvan. hozam(); // Töltse be a WDT -t, mivel a szövegkimenet eltarthat egy ideig.
// Az üzenet rögzítésének könyvtári verziójának megjelenítése.
Serial.print ("Könyvtár: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Sorozat.println ();
// Az eredmény RAW időzítési információinak kiadása.
Serial.println (resultToTimingInfo (& results)); hozam(); // Adja meg a WDT -t (újra)
// Az eredményeket forráskódként adja ki
Serial.println (resultToSourceCode (& results)); Serial.println (""); // A bejegyzések közötti üres sor hozam (); // Adja meg a WDT -t (ismét)}}
Amikor ezt a vázlatot feltöltik, és nyitott soros monitorral fut, a gombnyomás kódját adja ki (lásd a képet)
Írja le azokat a kódokat, amelyeket később használni szeretne. Az excellel jegyeztem fel, hogy mit kaptam a használni kívánt gombokhoz (lásd a képet)
Szerkesztettem a Netflix tevékenységem gombjait, hogy szüneteltetési jelet küldjenek a Panasonic távirányítójáról. (Lásd a képet)
3. lépés: A kódolás megírása a Nodered -be küldéshez

#ifndef UNIT_TEST #include #endif #include
#befoglalni
#befoglalni
#befoglalni
#befoglalni
#befoglalni
const char* ssid = ""; // Írja be az SSID -t itt: char* password = ""; // Itt írja be a jelszót const char *host = ""; // Ip -cím #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results eredmények; void setup () {irrecv.enableIRIn (); // Indítsa el a vevőt USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (igaz); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();
mert (uint8_t t = 4; t> 0; t--) {
USE_SERIAL.printf ("[SETUP] WAIT %d… / n", t); USE_SERIAL.flush (); késleltetés (1000); } WiFi.mód (WIFI_STA); WiFiMulti.addAP (ssid, jelszó); } void loop () {if (irrecv.decode (és eredmények)) {
// Módosítsa ezt a jelértéket a kapott értékhez
if (results.value == 0x40040D00606D) {USE_SERIAL.println ("szünetelteti a jelzést"); wifisend (szünet); késleltetés (1000);
} if (results.value == 0x400401007273) {
USE_SERIAL.println ("előző");
wifisend ("előző"); késleltetés (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("next"); wifisend ("következő"); késleltetés (1000); }
irrecv.resume (); // A következő érték fogadása} delay (100); } void wifisend (String adatok) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] kezdődik… / n"); // tragédiaszerver és URL beállítása http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] GET… / n"); // indítsa el a kapcsolatot és küldjön HTTP fejlécet int httpCode = http. GET (); // A httpCode negatív lesz, ha (httpCode> 0) {// A HTTP fejléc el lett küldve, és a kiszolgáló válaszfejléce meg lett kezelve USE_SERIAL.printf ("[HTTP] GET… code: %d / n", // fájl található a szerveren
if (httpCode == HTTP_CODE_OK) {String hasznos terhelés = http.getString (); USE_SERIAL.println (hasznos terhelés); }} else {USE_SERIAL.printf ("[HTTP] GET… nem sikerült, hiba: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); késleltetés (100); }}
Ezt a kódot használtam a nodemcu -n. Telepítenie kell ezeket a könyvtárakat.
Tesztelhet a soros monitor használatával, és megnyomhatja a kódban hozzáadott távoli gombokat a válasz megjelenítéséhez.
A sorban:
http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + data);
Módosítania kell a [user] felhasználót, és így tovább. Konzolok NÉLKÜL. zárójelek vannak a változó boszorkánymezők megjelenítéséhez.
Ez a vonal sem fog működni, amíg nem állítjuk be az áramlást bólogatva.
4. lépés: Folyamat létrehozása csomópontban




Amint az elején említettem, hass.io -t használok bólogatva. Ha más beállítást futtat, akkor ezt másként kell tennie! A képen látható, hogy amikor megnyom egy gombot, az megjelenik a hibakeresési ablakban …
A változó hasznos terhelés csomópont valószínűleg kihagyható lett volna, ha az előző lépésben valami mást választottam, mint az adatok =. Az általam használt kapcsoló csomópont sokkal nagyobb, csak szünet, de ez csak azért van, hogy még több jelzést adhassak hozzá a chromecast használatához rádióállomásokhoz stb.
A játék szüneteltetéséhez használhatja a másik képen látható folyamatot.
[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "method": "get", "upload": false, "swaggerDoc": "", "x": 133, "y": 98, "vezetékek":
Eltávolítottam innen a userpass és url nevet, így lehet, hogy módosítania kell.
adjon hozzá kapcsolócsomópontot, ha nem csak a szünetre szeretne reagálni (lásd például a képet)
Az otthoni asszisztens csomópontjában szüneteltetésre:
név: lejátszás szüneteltetése chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [a chromecast itt]"}
a következő műsorszámhoz csak másolja ezt a csomópontot, és szerkessze a szolgáltatást a következőre: media_next_track, és neve: next chromecast
5. lépés: Opcionális Alexa Szüneteltesse a Chromecastot
Opcionális alexa parancs hozzáadása a chromecast szüneteltetéséhez:
Itt vannak lehetőségek.. Készíthet egy alexa nnode -t, amelyet pause chromecast -nak hívnak, és amely szünetelteti a chromecast -ot, vagy készíthet egy úgynevezett szünet tv -t, amely ellenőrzi az aktuális harmóniatevékenységet és attól függően szünetet.
Ezt később ide is beírom..
Ajánlott:
Arduino autó L293D -vel és távirányítóval: 5 lépés

Arduino autó L293D -vel és távirányítóval: Véletlenül van L293D chipem és IR távirányítóm és vevőm. Szeretnék egy Arduino autót építeni anélkül, hogy sok dolgot vásárolnék, ezért csak az Arduino négykerekű autó alvázát hoztam. Mivel a Tinkercad rendelkezik L293D és IR vevővel és Arduino -val, létrehoztam a vázlatot
ESP8266 - Kerti öntözés időzítővel és távirányítóval interneten keresztül / ESP8266: 7 lépés (képekkel)

ESP8266 - Kerti öntözés időzítővel és távirányítóval Interneten keresztül / ESP8266: ESP8266 - Távirányítású öntözés, időzítéssel veteményeskertekhez, virágoskertekhez és gyepekhez. ESP-8266 áramkört és hidraulikus / elektromos szelepet használ az öntözőbetápláláshoz. Előnyök: Alacsony költségű (~ 30,00 USD) gyors hozzáférésű parancsok
Hogyan vezérelhető egy 4dof nagy teljesítményű nagyméretű robotkar Arduino és Ps2 távirányítóval?: 4 lépés

Hogyan vezérelhető egy 4dof nagy teljesítményű nagyméretű robotkar Arduino és Ps2 távirányítóval?: Ez a készlet nagyteljesítményű motort (mg996) használ, nagy áramra van szüksége, sok árambevitelt tesztelünk. Csak az 5v 6a adapter fog működni. És a arduino tábla a 6dof robotkaron is. vége: írjon vásárlás SINONING A bolt DIY játékhoz
A TV és a csatlakoztatott Raspberry Pi vezérlése ugyanazzal a távirányítóval: 4 lépés

A TV és a csatlakoztatott Raspberry Pi vezérlése ugyanazzal a távirányítóval: A Raspberry Pi infravörös távirányítóval történő vezérléséhez korábban használhattuk a LIRC -t. Ez a Kernel 4.19.X -ig működött, amikor sokkal nehezebbé vált a LIRC működtetése. Ebben a projektben egy Raspberry Pi 3 B+ van csatlakoztatva a TV -hez, és
Animatronic szemek távirányítóval: 5 lépés

Animatronic Eyes távirányítóval: Ez az utasítás Animatronic Eyes létrehozására szolgál, amelyek WiFi -n keresztül távolról vezérelhetők a számítógépről. Minimális elektronikus alkatrészeket használ, PCB -t nem igényel, és minimális forrasztást igényel. A számítógép billentyűzetéről vezérelheti, így nincs szüksége