فهرست مطالب:

مکث Chromcast با کنترل از راه دور: 5 مرحله
مکث Chromcast با کنترل از راه دور: 5 مرحله

تصویری: مکث Chromcast با کنترل از راه دور: 5 مرحله

تصویری: مکث Chromcast با کنترل از راه دور: 5 مرحله
تصویری: لزبازی لیلا اوتادی چه لبی میگیره (نبینی از دستت رفته) 2024, جولای
Anonim
Image
Image
تجهیز
تجهیز

من یک ریموت هارمونی Logitech دارم و Home Home را روی تمشک pi اجرا می کنم.

من می خواستم بتوانم chromecast را از راه دور خود متوقف کنم ، اما یک تلویزیون قدیمی دارم که از طریق hdmi از آن پشتیبانی نمی کند. ایده من این بود که از NodeMcu برای گرفتن سیگنال ir و مکث استفاده کنم.

اگر نمی توانید آن را کار کنید یا س haveالی دارید ، لطفاً در زیر نظر دهید

مرحله 1: تجهیز

تجهیز
تجهیز
تجهیز
تجهیز

تجهیزات مورد نیاز:

نودمکو (https://www.ebay.com/sch/i.html؟_from=R40&_trksid=…

گیرنده گیرنده (مانند این:

سیم های دوپونت

کابل میکرو USB (power nodemcu)

من از Logitech Harmony -hub استفاده می کنم

برای رویکرد من شما نیاز به یک Raspberry pi با hass.io Installed و Nodered دارید. من قصد ندارم در اینجا به تنظیم وسایل homeassistant بپردازم. اگر از چیزی به غیر از homeassistant استفاده می کنید ، باید خودتان موارد را تنظیم کنید.

شما باید بتوانید از Nodemcu در Arduino IDE استفاده کنید زیرا در اینجا به آن نمی پردازم

مرحله 2: سیگنال از راه دور

سیگنال از راه دور
سیگنال از راه دور
سیگنال از راه دور
سیگنال از راه دور
سیگنال از راه دور
سیگنال از راه دور
سیگنال از راه دور
سیگنال از راه دور

روشی که من انجام دادم این بود که یک سیگنال را از راه دور که از آن استفاده نمی کنم در کنترل از راه دور هماهنگ کنم.

من از ریموت تلویزیون پاناسونیک مدل TXL32C3E استفاده کردم زیرا در طبقه اول من با تجهیزات من تداخل ندارد. این یک تلویزیون است که من در طبقه بالا دارم.

اگر از هارمونی استفاده نمی کنید ، می توانید از این کار صرف نظر کنید.

بنابراین برای پیدا کردن سیگنال از این اسکچ استفاده کردم:

/ * * IRremoteESP8266: IRrecvDumpV2 - ریختن جزئیات کدهای IR با IRrecv * یک آشکارساز/دمودولاتور IR باید به RECV_PIN ورودی متصل شود. * * حق چاپ 2009 کن شیرف ، https://arcfn.com * حق چاپ 2017 دیوید کانران * * نمونه نمودار مدار: * https://arcfn.com * * تغییرات: * نسخه 0.3 نوامبر 2017 * - پشتیبانی از سیستم تهویه مطبوع رمزگشایی برای برخی از پروتکل ها * نسخه 0.2 آوریل 2017 * - رمزگشایی از یک کپی از داده ها تا بتوانیم سریعتر شروع به ضبط کنیم در نتیجه * احتمال وقوع اشتباه را کاهش دهید. * بر اساس نسخه IrsendDemo کن شریریف 0.1 ژوئیه 2009 ، */

#ifndef UNIT_TEST

#شامل #endif #include #include #include #if

// =================== شروع پارامترهای TUNEABLE ====================

// یک آشکارساز IR/demodulator به پین GPIO 14 وصل شده است // به عنوان مثال D5 بر روی برد NodeMCU. #تعریف RECV_PIN 14

// نرخ سریال Baud اتصال سریال.

// به عنوان مثال پیام وضعیت با این سرعت بالا به رایانه ارسال می شود. // سعی کنید از سرعتهای کند مانند 9600 اجتناب کنید ، زیرا پیامها را از دست خواهید داد و // مشکلات دیگری ایجاد خواهید کرد. 115200 (یا سریعتر) توصیه می شود. // توجه: مطمئن شوید که Serial Monitor خود را با همان سرعت تنظیم کرده اید. #BAUD_RATE 115200 را تعریف کنید

// از آنجا که این برنامه یک ضبط/رمزگشای خاص است ، اجازه دهید از بزرگتر استفاده کنیم

// نسبت به بافر معمولی ، بنابراین می توانیم کدهای راه دور تهویه مطبوع را کنترل کنیم. #تعریف CAPTURE_BUFFER_SIZE 1024

// TIMEOUT شماره N است. میلی ثانیه بدون اطلاعات بیشتر قبل از در نظر گرفتن a

// پیام به پایان رسید // این پارامتر یک معامله جالب است. هرچه زمان وقفه بیشتر باشد ، پیامی پیچیده تر // می تواند ضبط کند. به عنوان مثال، برخی از پروتکل های دستگاه // بسته های پیام متعددی را پی در پی ارسال می کنند ، مانند کنترل از راه دور تهویه مطبوع. // پروتکل های Air Coniditioner اغلب بین بسته ها // فاصله قابل توجهی (20-40 میلی ثانیه) دارند. // نقطه ضعف یک مقدار زمان زیاد ، پروتکلهای پیچیده تر است // وقتی دکمه ریموت را نگه دارید ، چندین پیام ارسال کنید. فاصله بین // آنها اغلب در حدود 20+ms است. این می تواند منجر به این شود که داده های خام 2-3+ // برابر بیشتر از مقدار مورد نیاز باشد زیرا 2-3 پیام را در یک // ضبط واحد ضبط کرده است. با تعیین مقدار زمان کم می توان این مشکل را برطرف کرد. // بنابراین ، انتخاب بهترین مقدار TIMEOUT برای استفاده خاص شما // بسیار ظریف است. موفق باشید و شکار شاد. // توجه: از MAX_TIMEOUT_MS تجاوز نکنید. به طور معمول 130 میلی ثانیه #if DECODE_AC #TIMEOUT 50U را تعریف کنید // برخی از واحدهای تهویه مطبوع در پروتکل های خود 40 میلیون پوند فاصله دارند. // به عنوان مثال. Kelvinator // مقداری به این بزرگی ممکن است تکرار برخی از پروتکل ها را بلعیده باشد #دیگر // DECODE_AC #تعریف TIMEOUT 15U // برای اکثر پیام ها مناسب است ، در حالی که بسیاری از تکرارها را بلع نمی کند. #endif // DECODE_AC // گزینه های دیگر: // #definine TIMEOUT 90U // مناسب پیام هایی با شکاف بزرگ مانند XMP-1 و برخی از واحدهای aircon // است ، اما می تواند به طور تصادفی پیامهای تکراری را در خروجی rawData ببلعد. / مقادیر بسیار بالا مشکل ساز هستند // زیرا تقریباً مرز معمولی است // جایی که اکثر پیامها تکرار می شوند. // به عنوان مثال. رمزگشایی یک پیام متوقف می شود و // ارسال آن به سریال را دقیقاً // زمانی که پیام بعدی احتمالاً // منتقل می شود شروع می کند و ممکن است آن را از دست بدهد.

// کوچکترین اندازه بسته های پیام "ناشناخته" را که ما واقعاً به آن اهمیت می دهیم تنظیم کنید.

// این مقدار به کاهش نرخ تشخیص کاذب مثبت پس زمینه IR // نویز به عنوان پیام واقعی کمک می کند. احتمال تشخیص نویز IR پس زمینه // به عنوان یک پیام با طول مقدار TIMEOUT افزایش می یابد. (به بالا مراجعه کنید) // نکته منفی بزرگنمایی این پیام این است که می توانید برخی از پیامهای کوتاه معتبر // را برای پروتکل هایی که این کتابخانه هنوز رمزگشایی نکرده است از دست بدهید. // // اگر تعداد زیادی پیام کوتاه ناشناس ناشناخته دریافت می کنید در صورتی که هیچ چیزی // نباید پیامی ارسال کند ، آن را بالاتر تنظیم کنید. // اگر مطمئن هستید که راه اندازی شما کار می کند ، اما پیام های // از دستگاه شما را نمی بیند ، تنظیمات پایین تری انجام دهید. (به عنوان مثال سایر دستگاه های کنترل از راه دور IR کار می کنند.) // توجه: این مقدار را بسیار بالا تنظیم کنید تا به طور م deteثر تشخیص ناشناخته خاموش شود. #تعریف MIN_UNKNOWN_SIZE 12 // ==================== پایان پارامترهای TUNEABLE ===================

// برای پوشش کامل تر ضبط ، از ویژگی ذخیره بافر ذخیره استفاده کنید.

IRrecv irrecv (RECV_PIN ، CAPTURE_BUFFER_SIZE ، TIMEOUT ، درست) ؛

decode_results results؛ // جایی برای ذخیره نتایج

// در صورت امکان وضعیت قابل خواندن پیام های A/C را برای انسان نمایش دهیم.

void dumpACInfo (decode_results *results) {String description = ""؛ #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0)؛ ac.setRaw (results-> state) ؛ توضیحات = ac.toString ()؛ } #endif // DECODE_DAIKIN #اگر DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0)؛ ac.setRaw (results-> state ، results-> bit / 8) ؛ توضیحات = ac.toString ()؛ } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0)؛ ac.setRaw (results-> state) ؛ توضیحات = ac.toString ()؛ } #endif // DECODE_KELVINATOR #اگر DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0)؛ ac.setRaw (results-> state) ؛ توضیحات = ac.toString ()؛ } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0)؛ ac.setRaw (results-> value) ؛ // Midea به جای حالت از مقدار استفاده می کند. توضیحات = ac.toString ()؛ } #endif // DECODE_MIDEA // اگر توصیفی قابل خواندن برای پیام داریم ، آن را نمایش دهید. if (توضیحات! = "") Serial.println ("Mesg Desc.:" + توضیحات) ؛ }

// بخش کد فقط یکبار در هنگام راه اندازی اجرا می شود.

void setup () {Serial.begin (BAUD_RATE، SERIAL_8N1، SERIAL_TX_ONLY) ؛ تأخیر (500) ؛ // کمی صبر کنید تا اتصال سریال برقرار شود.

#در صورت رمزگشایی_هش

// پیام هایی را که تعداد ضربان آنها کمتر از حداقل روشن یا خاموش است نادیده بگیرید. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE) ؛ #endif // DECODE_HASH irrecv.enableIRIn ()؛ // گیرنده را راه اندازی کنید}

// قسمت تکراری کد

// void loop () {// بررسی کنید که آیا کد IR دریافت شده است یا خیر. if (irrecv.decode (& results)) {// نمایش یک مهر زمان خام. uint32_t در حال حاضر = millis ()؛ Serial.printf ("مهلت زمانی:٪ 06u.٪ 03u / n" ، اکنون / 1000 ، اکنون٪ 1000) ؛ if (results.overflow) Serial.printf ("هشدار: کد IR برای بافر بسیار بزرگ است (> =٪ d)" "تا زمانی که این مشکل حل نشود نباید به این نتیجه اعتماد کرد." "ویرایش و افزایش CAPTURE_BUFFER_SIZE. / n "، CAPTURE_BUFFER_SIZE) ؛ // خروجی اولیه آنچه پیدا کردیم را نمایش دهید. Serial.print (resultToHumanReadableBasic (& results))؛ dumpACInfo (& نتایج)؛ // در صورت داشتن اطلاعات اضافی تهویه مطبوع ، نمایش داده می شود. بازده()؛ // WDT را تغذیه کنید زیرا خروجی متن ممکن است مدتی طول بکشد تا چاپ شود.

// نمایش نسخه کتابخانه ای که پیام با آن ضبط شده است.

Serial.print ("Library: v") ؛ Serial.println (_IRREMOTEESP8266_VERSION_)؛ Serial.println ()؛

// خروجی اطلاعات زمان بندی RAW از نتیجه.

Serial.println (resultToTimingInfo (& نتایج))؛ بازده()؛ // تغذیه WDT (دوباره)

// خروجی نتایج به عنوان کد منبع

Serial.println (resultToSourceCode (& نتایج)) ؛ Serial.println ("")؛ // خط خالی بین عملکرد ورودی () ؛ // تغذیه WDT (دوباره)}}

هنگامی که این طرح بارگذاری می شود و با نمایشگر سریال باز می شود ، کد دکمه را فشار می دهد (تصویر را ببینید)

کدهایی را که می خواهید برای استفاده بعدی استفاده کنید بنویسید. از Excel برای یادداشت کردن آنچه برای دکمه هایی که می خواستم استفاده کنم استفاده کردم (تصویر را ببینید)

من دکمه های فعالیت Netflix خود را برای ارسال سیگنال مکث از راه دور پاناسونیک ویرایش کردم. (تصویر را ببینید)

مرحله 3: نوشتن کد ارسال به Nodered

نوشتن کد ارسال به Nodered
نوشتن کد ارسال به Nodered

#ifndef UNIT_TEST #شامل #endif #شامل شود

#عبارتند از

#عبارتند از

#عبارتند از

#عبارتند از

#عبارتند از

const char* ssid = ""؛ // SSID را اینجا وارد کنید char* password = ""؛ // رمز عبور را در اینجا وارد کنید char char *host = ""؛ // آدرس IP #تعریف USE_SERIAL سریال ESP8266WiFiMulti WiFiMulti ؛ uint16_t RECV_PIN = 14 ؛ IRrecv irrecv (RECV_PIN) ؛ decode_results results؛ void setup () {irrecv.enableIRIn ()؛ // راه اندازی گیرنده USE_SERIAL.begin (115200) ؛ // USE_SERIAL.setDebugOutput (درست) ؛ USE_SERIAL.println ()؛ USE_SERIAL.println ()؛ USE_SERIAL.println ()؛

برای (uint8_t t = 4؛ t> 0؛ t--) {

USE_SERIAL.printf ("[SETUP] صبر کنید٪ d… / n" ، t) ؛ USE_SERIAL.flush ()؛ تاخیر (1000) ؛ } WiFi.mode (WIFI_STA) ؛ WiFiMulti.addAP (ssid ، رمز عبور) ؛ } void loop () {if (irrecv.decode (& results)) {

// این مقدار سیگنال را برای چیزی که دریافت کرده اید تغییر دهید

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("سیگنال مکث دریافت شد") ؛ wifisend (مکث) ؛ تاخیر (1000) ؛

} if (results.value == 0x400401007273) {

USE_SERIAL.println ("قبلی") ؛

wifisend ("قبلی") ؛ تاخیر (1000) ؛ } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("بعدی") ؛ wifisend ("بعدی") ؛ تاخیر (1000) ؛ }

irrecv.resume ()؛ // دریافت مقدار بعدی} تاخیر (100)؛ } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http؛ USE_SERIAL.print ("[HTTP] شروع … / n")؛ // پیکربندی سرور تراژدی و آدرس اینترنتی http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause؟ data =" + data) ؛ USE_SERIAL.print ("[HTTP] GET … / n")؛ // شروع اتصال و ارسال سرصفحه HTTP int httpCode = http. GET ()؛ // httpCode در صورت منفی بودن (httpCode> 0) {// سرصفحه HTTP ارسال شده و سربرگ پاسخ سرور USE_SERIAL.printf ("[HTTP] GET … code:٪ d / n"،

// فایل در سرور یافت شد

if (httpCode == HTTP_CODE_OK) {String payload = http.getString ()؛ USE_SERIAL.println (بار)؛ }} else {USE_SERIAL.printf ("[HTTP] GET … نشد ، خطا:٪ s / n" ، http.errorToString (httpCode).c_str ()) ؛ } http.end ()؛ تأخیر (100) ؛ }}

این کدی است که در nodemcu خود استفاده کردم. شما باید آن کتابخانه ها را نصب کنید.

می توانید با استفاده از مانیتور سریال تست کنید و دکمه های راه دور که در کد اضافه کرده اید را فشار دهید تا پاسخ را مشاهده کنید.

در خط:

http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause؟ data =" + data)؛

شما باید [کاربر] را به کاربر خود و غیره تغییر دهید. بدون براکت. براکت ها برای نشان دادن زمینه های جادوگر برای تغییر وجود دارند.

تا زمانی که جریان خود را بصورت nodered تنظیم نکنیم ، آن خط نیز کار نخواهد کرد.

مرحله 4: ایجاد جریان در Nodered

ایجاد جریان در Nodered
ایجاد جریان در Nodered
ایجاد جریان در Nodered
ایجاد جریان در Nodered
ایجاد جریان در Nodered
ایجاد جریان در Nodered
ایجاد جریان در Nodered
ایجاد جریان در Nodered

همانطور که در ابتدا ذکر شد ، من از hass.io با nodered استفاده می کنم. اگر تنظیمات دیگری را اجرا می کنید ، باید این را متفاوت کنید! در تصویر می بینید که وقتی دکمه ای فشار داده می شود در پنجره اشکال زدایی نشان داده می شود…

اگر چیزی متفاوت از آن داده ها = در مرحله قبل انتخاب می کردم ، گره بار تغییر احتمالاً رد می شد. گره سوئیچی که من استفاده می کنم بسیار بزرگتر است و فقط مکث می شود ، اما به همین دلیل می توانم سیگنال های IR بیشتری برای استفاده از chromecast برای ایستگاه های رادیویی و غیره اضافه کنم.

فقط برای مکث بازی می توانید از جریان موجود در تصویر دیگر استفاده کنید.

[{"id": "e6440c30.4a35a"، "type": "http in"، "z": "869ceb74.0275c8"، "name": ""، "url": "chromecastpause"، "method": "دریافت" ، "بارگذاری": نادرست ، "swaggerDoc": "" ، "x": 133 ، "y": 98 ، "سیم":

نام کاربر و آدرس اینترنتی را از این قسمت حذف کردم ، بنابراین ممکن است نیاز به ویرایش آن داشته باشید.

اگر می خواهید به بیش از مکث واکنش نشان دهید ، یک گره سوئیچ اضافه کنید (برای مثال به تصویر مراجعه کنید)

در گره دستیار خانگی برای استفاده مکث:

نام: پخش مکث chromecastdomain: media_player خدمات: media_play_pausedata: {"unit_id": "media_player. [chromecast شما در اینجا]"}

برای آهنگ بعدی فقط آن گره را کپی کنید و سرویس را در: media_next_track و نام را به: chromecast بعدی ویرایش کنید

مرحله 5: Alexa اختیاری مکث Chromecast را انجام دهید

دستور اختیاری افزودن alexa برای مکث chromecast:

در اینجا گزینه هایی وجود دارد.. می توانید یک گره alexa به نام pause chromecast ایجاد کنید که chromecast را متوقف می کند ،

یا می توانید تلویزیونی به نام pause TV بسازید که فعالیت هارمونی فعلی را بررسی کرده و بسته به آن مکث کنید.

بعداً این را در اینجا اضافه می کنم..

توصیه شده: