本作品由安信可社區(qū)用戶(hù)
WildboarG制作
使用
連接 wifi
訂閱 MQTT 服務(wù)
接入 HOMEASSISTANT
材料準(zhǔn)備
紅外發(fā)射模塊原理圖
原理
空調(diào)遙控器簡(jiǎn)單來(lái)講就是通過(guò)紅外發(fā)射管的亮滅來(lái)承載編碼信息,對(duì)應(yīng)的空調(diào)設(shè)備上有一個(gè)接收管,它接收到發(fā)射管的光信號(hào)來(lái)解析協(xié)議獲取數(shù)據(jù),然后對(duì)空調(diào)進(jìn)行對(duì)應(yīng)指令的控制
例如:將溫度設(shè)置為 16° 冷風(fēng) 風(fēng)速 1 級(jí)
既然要控制燈的亮滅,那么就只需要一個(gè) IO 口控制就可以了(除去 VCC 和 GND),手上剛好有一個(gè)
M61 板子剛好用上了。一般的控制紅外遙控器使用的 38KHZ 頻率,所以只要模擬 GPIO 產(chǎn)生 38KHZ 的高低電平就可以控制紅外發(fā)射管發(fā)送數(shù)據(jù)了。
紅外編碼
借助 esp8266+ 紅外接收模塊,用你的遙控器懟著接收模塊按鍵,讀取紅外發(fā)射的原始數(shù)據(jù),arduino 有對(duì)應(yīng)的示例代碼(IRremoteESP8266/IRrecvDumpV2.ino),連接好線(xiàn),刷入示例程序,手動(dòng)按你的遙控器,從串口讀取 rawData 數(shù)組。
獲取的數(shù)據(jù)大概是這樣的:
uint16_t rawData[279] = { 9000, 4442, 608, 1624, 584, 494, 610, 496, 608, 1600, 608, 1602, 608, 494, 608, 496, 608, 496, 608, 496, 608, 494, 610, 520, 584, 1624, 586, 498, 606, 518, 586, 496, 608, 518, 586, 496, 608, 494, 610, 494, 610, 496, 608, 518, 586, 1624, 586, 494, 610, 494, 610, 496, 606, 498, 608, 496, 608, 498, 606, 1600, 610, 520, 584, 1624, 584, 496, 608, 496, 608, 1602, 608, 518, 638, 20150, 606, 496, 608, 496, 608, 496, 608, 496, 608, 1602, 606, 494, 610, 518, 586, 494, 610, 494, 610, 518, 586, 518, 586, 496, 608, 494, 610, 1602, 608, 494, 608, 496, 608, 494, 610, 520, 584, 496, 608, 498, 606, 496, 608, 498, 606, 496, 608, 518, 586, 518, 586, 496, 608, 494, 610, 494, 610, 494, 610, 1600, 608, 1600, 608, 1602, 660, 40406, 9158, 4440, 610, 1602, 608, 496, 608, 496, 608, 1602, 608, 1600, 608, 494, 610, 494, 610, 494, 610, 496, 608, 518, 584, 496, 608, 1602, 608, 518, 584, 496, 608, 496, 608, 496, 608, 496, 608, 496, 608, 496, 608, 494, 610, 498, 606, 1600, 610, 494, 610, 518, 586, 494, 610, 518, 586, 494, 610, 496, 608, 1600, 608, 1600, 608, 1624, 584, 496, 608, 520, 584, 1600, 608, 520, 664, 20150, 608, 518, 584, 496, 608, 496, 608, 496, 608, 520, 584, 496, 608, 496, 608, 494, 610, 518, 586, 496, 608, 496, 608, 498, 606, 496, 608, 494, 610, 496, 608, 496, 608, 494, 610, 496, 608, 496, 606, 496, 608, 1624, 584, 496, 608, 496, 608, 520, 584, 496, 608, 496, 608, 498, 606, 496, 608, 520, 584, 494, 610, 1602, 608, 1600, 608 }; // 24 度
只需要借助 GPIO 連接的紅外燈亮滅對(duì)應(yīng)的時(shí)長(zhǎng)就將數(shù)據(jù)發(fā)送出去了。具體的協(xié)議高低電平起始不同,以我的格力空調(diào)為例子,它的起始數(shù)據(jù)是高電平 第一個(gè)數(shù)據(jù)是 9000 也就是說(shuō) 需要我的 GPIO 輸出 9000us 的高電平,(這里說(shuō)的高電平不是真正的高電平 1,而是需要以 38KHZ 載波的高電平,也就是說(shuō)需要用 38khz 頻率一直高低翻轉(zhuǎn)的電平),而第二個(gè)數(shù)據(jù)是 4442,這就需要真正的低電平延時(shí) 4442us,以此類(lèi)推奇數(shù)需要電平反轉(zhuǎn),偶數(shù)需要真正的低電平。直到將這 279 個(gè)數(shù)據(jù)發(fā)送完。就完成了控制部分。
參考了zzbinfo 的這篇帖子用 Ai-M61 實(shí)現(xiàn)物聯(lián)網(wǎng)開(kāi)發(fā)(2)---實(shí)現(xiàn)遠(yuǎn)程開(kāi)機(jī)、無(wú)線(xiàn)控制、紅外遙控"
和 wxlinus 的這篇帖子Ai-M61-32S-Kit 開(kāi)發(fā)板 mqtt 調(diào)試
邏輯實(shí)現(xiàn)
采用 pwm 輸出 38Khz 頻率。
pwm 配置:
#if 0 // 定時(shí)器配置 struct bflb_timer_config_s cfg0; cfg0.counter_mode = TIMER_COUNTER_MODE_PROLOAD; cfg0.clock_source = TIMER_CLKSRC_XTAL;//外部時(shí)鐘為40M cfg0.clock_div = 39; //預(yù)分頻后 1M cfg0.trigger_comp_id = TIMER_COMP_ID_0; cfg0.comp0_val = 13; //計(jì)數(shù)13us 約等于38kHz cfg0.preload_val = 0; timer0 = bflb_device_get_by_name("timer0"); bflb_timer_init(timer0, &cfg0); bflb_irq_attach(timer0->irq_num, timer0_isr, NULL); bflb_irq_enable(timer0->irq_num); #endif
// PWM配置
pwm = bflb_device_get_by_name("pwm_v2_0"); //給外設(shè)接口賦名pwm_v2_0 /* period = .XCLK / .clk_div / .period = 40MHz / 7 / 150 ≈ 38KHz */ struct bflb_pwm_v2_config_s cfg = { .clk_source = BFLB_SYSTEM_XCLK, .clk_div = 7, .period = 150, }; //設(shè)置PWM的頻率,選擇時(shí)鐘,分頻,和周期。根據(jù)上面的公式算出最終的頻率。 /*初始化PWM輸出*/ bflb_pwm_v2_init(pwm, &cfg); bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH0,0, 75); //占空比50% 發(fā)送配置: void Send_IR(uint16_t *buf,uint8_t len) { // printf("Sending IR code...n"); bflb_pwm_v2_channel_positive_start(pwm, PWM_CH0); //開(kāi)啟正向通道 for (uint16_t i = 0; i < len; i++) { if (i%2==0) { //bflb_timer_start(timer0); // 啟用38kHz載波的定時(shí)器 bflb_pwm_v2_start(pwm); //開(kāi)啟pwm bflb_mtimer_delay_us(buf[i]); // 高電平(脈沖時(shí)間) //bflb_timer_stop(timer0); // 停止38kHz載波 bflb_pwm_v2_start(pwm); //關(guān)閉pwm } else { bflb_gpio_reset(gpio, IR); bflb_mtimer_delay_us(buf[i]); // 低電平(空閑時(shí)間) } } }
使用
克隆倉(cāng)庫(kù)AirCondition
首先需要獲取你家空調(diào)遙控對(duì)應(yīng)的紅外編碼(上邊給了兩種方法)
修改本例程
配置 wifi ,mqtt 訂閱主題 (/state/user_state.h)
獲取空調(diào)遙控器的 RawData 以數(shù)組的形式存放 user_aric.c 目錄下
燒錄
使用
克隆倉(cāng)庫(kù)AirCondition
首先需要獲取你家空調(diào)遙控對(duì)應(yīng)的紅外編碼(上邊給了兩種方法)
修改本例程
配置 wifi ,mqtt 訂閱主題 (/state/user_state.h)
獲取空調(diào)遙控器的 RawData 以數(shù)組的形式存放 user_aric.c 目錄下
燒錄
接入 HOMEASSISTANT
1.在 HACS 中下載 Lovelace Thermostat 組件,按照說(shuō)明配置
2.修改 configuration.yaml 文件
3.添加設(shè)備發(fā)現(xiàn)
mqtt:
- climate:
name: AC
temperature_command_topic: "home/ac"
precision: 1.0
代碼
4.然后更新配置,再到概覽中添加 UI 卡片,類(lèi)型為恒溫器
備注
1.定時(shí)器模擬載波已經(jīng)更新為 PWM 控制更準(zhǔn)確
2.更新了 WB2 版本的,在同一倉(cāng)庫(kù)下
帖子鏈接:【DIY 電子作品】WB2 復(fù)刻一個(gè)空調(diào)遙控器
下載:
git clone -b wb2 https://github.com/WildboarG/AirCondition.git
上圖:
獲取紅外編碼的 esp8266+ 淘寶不知名的紅外接收模塊
以前畫(huà)的一個(gè)紅外發(fā)射模塊,淘寶買(mǎi)的沒(méi)有三極管放大,距離太近了
視頻演示
https://www.bilibili.com/video/BV1nevPefE5E/?t=19.532662&spm_id_from=333.1350.jump_directly&vd_source=54c5db21948db2378659b7e8e42bafbf
審核編輯 黃宇
-
紅外
+關(guān)注
關(guān)注
8文章
716瀏覽量
94611 -
模組
+關(guān)注
關(guān)注
6文章
1346瀏覽量
29866 -
空調(diào)遙控器
+關(guān)注
關(guān)注
0文章
18瀏覽量
7250
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論