前言 本案例為機智云平臺中級應用開發實例,開發者通過使用機智云AIoT自助開發平臺、機智云的GoKit開發板,實現紅外遙控器遠程開關,實現手機APP等功能。
方案選擇 基于空調遙控器的特點,基于機智云的Gokit,通過機智云的物聯網平臺,能夠滿足我的需求,那么怎么來做呢?根據經驗所得,需要對這個工作拆分為幾部分:
- 機智云平臺數據點定義(啥是數據點,點擊查閱);
這里我定了兩個核心功能,一個是開關,一個是溫度調節;(當然,你也可以定義更多的數據點,如,模式,風向等等); - MCU開發,MCU開發需要細分為紅外遙控器的協議解碼和編碼;解碼簡單來說就是需要通過工具,來分析遙控器發出來的紅外波形,什么波形對應著開,什么波形對應著光和溫度設置。編碼就是要把我們下發的命令轉換成和空調能識別的紅外波形;
方案實施
1. 數據點定義
很簡單,兩個數據點,溫度設置和空調開關,如下圖;

2. 紅外解碼
對于紅外解碼,有兩種方法,一種是找到空調廠商的紅外協議,然后根據紅外協議,直接編寫就可以了,不過很不幸的是,我手頭這款空調,我找了很久都沒找到對應的空調協議,于是只能另辟途徑。也就是第二種方法,紅外波形拷貝。
那么波形拷貝我采用的是,用邏輯分析儀對遙控器進行波形分析,然后使用紅外波形拷貝的方法,把對應功能的波形拷貝下來。
決定了使用紅外波形拷貝,那么就需要先要搭建波形捕捉電路,翻開了壓箱底多年的紅外探頭接收器和面板(⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄),步驟如下。
2.1 硬件環境搭建紅外接收頭型號 HS0038B 
HS0038B 電路圖搭建
原理圖

面包板搭建實物圖


抓波形

紅外解碼程序編寫
對紅外波形有一個大概的認識之后,就要編寫MCU端的代碼,把波形轉成紅外碼。這里我的思路是,對STM32的某個IO,設置為輸入下降沿捕捉,然后通過計算每一個高低電平的持續時間,進而把波形轉成數組;具體的實現可以看代碼,Talk is cheap, show me the code.(主要是懶(/ω\)~哈哈)
3. 紅外編碼
經過前面的紅外拷貝之后并存儲了,幾個功能點的紅外碼,分別是開關,和溫度設置(16度到27度);
紅外的發送原理(主要是網上已經有很多這方面的教程了),首先上面抓到的紅外波形,并不是紅外發送器真正發送的波形,紅外發送的波形一般是要發送的命令“加”在一個38K 的一個波形上;因為接收端有一個波形過濾器,如果不是38K紅外波形范圍內會被過濾掉。所以一般會以38K的PWM作為一個紅外載波;
那么發送的時候,對STM32的PA5引腳做為輸出PWM為38K的引腳,然后后根據機智云定義好的數據點,拿到對應的串口協議文檔,進行命令提前,主要是APP控制和MCU狀態上報,這兩條協議,(當然還有進入WiFi配網和串口握手等,不過這些在MCU代碼自動生成的時候已經幫我們實現好了)串口協議格式如下圖:


那么后面的就是根據協議編程了。
插播一條idea,實現發送的時候,開始我想使用機智云的Gokit上的紅外來作為發送,不過后面發現發送的距離比較短,后面就自己焊接了紅外發射頭;當時我對Gokit的改造如下,如果小伙伴要控制的距離不遠的話,我想是可以的,具體我的改造如下:
◆Gokit引腳修改

最后真實的紅外發送搭建如下


end..把Gokit 都接上紅外了,就可以喜滋滋的去開空調啦~~

演示視頻
|