紅外線發射與接收

紅外線遙控器是家中常見的控制電器的裝置,開發板如果裝上紅外線LED以及紅外線接收器,便可以發射以及接收紅外線訊號,進而控制其他的東西,或是用紅外線來控制開發板。一般家中使用的紅外線大部份是38KHZ頻率的紅外線,因此必須購買的接收器也必須是38KHZ頻率的才行。紅外線發射以及接收都是利用紅外線的脈衝送出0或是1的訊號,因此,發射紅外線就是把數字訊號編碼成二進位,然後以脈衝的型式發送出去。

接收時,也是由接收器吸收紅外線脈衝,然後要寫程式將這些脈衝解碼成為數字訊號,不同的家電廠商的紅外線訊號格式都不一樣,NEC、SONY、JVC等等不同的廠商,訊號編碼都不同,目前來說,NEC算是比較廣泛運用的編碼,許多arduino自走車所附的遙控器也大部份是NEC的格式,這中間的編碼及解碼的動作有些複雜,一般人可能處理不來,為了讓入門的使用者有更好的使用體驗,所以我設計了BlocklyDuino使用的積木,可以很方便的控制紅外線的編碼及解碼,而且這些積木全都適用於Arduino、7697、ESP32以及ESP8266。

這些積木使用的函數我有修改,所以,如果要使用這些積木,務必更新吉哥積木到20201023的版本。

吉哥積木的安裝方法

我編寫的紅外線積木都可適用Arduino、7697、ESP32以及ESP8266。


只要有紅外線接收器及發射器,便能控制紅外線的編碼及解碼


我編寫的紅外線控制的積木

紅外線的編碼與解碼

範例一:如何接收紅外線訊號並解碼

接收紅外線及解碼的積木程式適用7697、Arduino、ESP32及ESP8266,積木都一樣,差別是在初始化時需要選擇你的開發板類型。將紅外線接收器接到適當的腳位上,並在積木中設定腳位即可使用。以下的積木將接收到的訊號解析為「接收到的紅外線編碼類型」以及「接收到的紅外線編碼」。「接收到的紅外線編碼類型」會將紅外線編碼的廠牌解析出來,例如NEC、SONY....等等;「接收到的紅外線編碼」則會將紅外線亮、滅之間產生的二進位編碼轉成十六進位顯示出來,例如,SONY電視遙控器的電源開關的十六進位編碼是「a90」。解析出來的結果透過序列埠顯示在電腦上。

程式結果:

請開啟序列埠監控收到的紅外線類型及編碼。

範例二:發射紅外線訊號

開發板如果接上紅外線LED,透過適當的編碼,便能將訊號以紅外線脈衝的方式發送出去。7697以及ESP32因為Timer的問題,紅外線LED只能接到固定的腳位,7697必須接到P3,ESP32必須接到GPIO5的腳位;但是ESP8266則可以接到想要指定的腳位上;所以,我寫的紅外線積木,7697以及ESP32的紅外線發射積木上面沒有腳位的設定,但是ESP8266則必須要在初始化時指定紅外線LED所連接的腳位。發射紅外線訊號的積木,紅外線類型使用下拉型態或是自行輸入編碼類型都可以,但是自行輸入編碼類型的話,請務必注意,編碼類型都是大寫,紅外線訊號則請用小寫16進位的寫法。以下的範例,在開發板啟動之後,便自動循環發射NEC、SONY以及JVC的三個編碼訊號。

請注意,7697的紅外線發射LED要接到P3;ESP32的發射器要接到GPIO5。

ICShop的EZ Starter KIT擴展板上在P17腳位便連接了一個紅外線接收器,如果以這個東西來接收以上紅外線發射的訊號,程式積木可以拉成這樣如以下的範例,但是如果沒有這個擴展板,便請自行將紅外線接收器接上P17腳位,並如同範例一將解碼之後的結果顯示在序列埠上。

紅外線發射器連接的是ESP32,紅外線接收器則是7697,接收到紅外線解碼後,便會將紅外線編碼類型以及訊號呈現在OLED上

範例三:遙控LED燈

用範例一將電器用品的遙控器解碼記錄下來後,再編寫程式,判斷如果是某個特定按鈕被按下時,便讓某個燈泡亮起。

程式執行結果:

範例四:如何快速使用積木控制,而不用去管紅外線編碼或解碼

mBot在台灣有很多學校擁有,所以許多學校也都有MakeBlock公司的紅外線遙控器,因此,為了大家不用去對紅外線解碼、編碼,我特地做了一個積木,將這些過程簡化,編寫這個遙控器的過程會更簡單。高雄凱斯電子也有一款遙控器,它上面的按鍵以及每個按鍵的編碼和MakeBlock公司是一樣的,因此,這二款遙控器都可以使用這個積木。如果你有以上二款遙控器的話,我將範例三的範例,再修改成以下供使用上的參考:

參考範例:

程式結果:

延伸的應用:

可以利用我所設計的MQTT的功能,將紅外線訊號透過MQTT傳送到遠端的開發板,控制遠方的電器用品。

用網路傳送紅外線訊號遠端遙控家電