驅動紅外線接收器實作過程影片
紅外線發射器模擬遙控器實驗過程影片
紅外線接收器,正面面向自己,如下圖
最右邊接腳3.3V Pin1
中間GND Pin6
最左邊Pin12(GPIO18)
紅外線發射器,如下圖,兩個腳的長度不同,長腳Pin11,短腳接地Pin9
(一)紅外線接收器錄製遙控器
Step1)編輯/boot/firmware/config.txt,新增以下兩行
#sudo nano /boot/firmware/config.txt
dtoverlay=gpio-ir,gpio_pin=18 #接收器在GPIO18(Pin12)
dtoverlay=gpio-ir-tx,gpio_pin=17 #發射器在GPIO17(Pin11)
#sudo reboot
#dmesg |grep lirc
[ 10.583305] rc rc0: lirc_dev: driver gpio-ir-tx registered at minor = 0, no receiver, raw IR transmitter
[ 10.664799] rc rc1: lirc_dev: driver gpio_ir_recv registered at minor = 1, raw IR receiver, no transmitter
在dev資料夾下多出lirc0與lirc1,嘗試後獲知/dev/lirc1為接收器、/dev/lirc0為發送器
Step2)安裝lirc,啟動lircd
#sudo apt update
#sudo apt install lirc
編輯設定檔/etc/lirc/lirc_options.conf
#sudo nano /etc/lirc/lirc_options.conf
driver = default
device = /dev/lirc1
#sudo systemctl restart lircd.service
Step3)測試遙控器
關閉lircd
#sudo systemctl stop lircd.service
測試樹莓派,是否可以讀取到遙控器資料,如果有讀取到螢幕會出現一堆數字,如下。
#sudo mode2 -d /dev/lirc1
pulse 9143
space 4537
pulse 593
space 569
pulse 565
Step4)錄製按鍵
列出所有按鍵名稱
#irrecord -l
錄製按鍵,本範例按下遙控器的數字0到4,五個按鍵,remote name設定為re。
#sudo systemctl restart lircd.service
#irrecord -d /dev/lirc1 ~/lircd.conf
將錄製結果取代/etc/lirc/lircd.conf
#sudo cp ~/re.lircd.conf /etc/lirc/lircd.conf
/etc/lirc/lircd.conf的內容如下,需要修改
#sudo nano /etc/lirc/lircd.conf
刪除每一個按鍵後方的0x00000000,修改後如下
Step5)重新啟動服務,測試是否有接收到遙控器訊號
#sudo systemctl restart lircd.service
測試是否有接收到遙控器訊號,按下遙控器,數字0到4,測試成功會出現irrecord所輸入的按鍵名稱,如下
#irw
0000000000ff6897 00 KEY_0 re
0000000000ff6897 01 KEY_0 re
0000000000ff30cf 00 KEY_1 re
0000000000ff30cf 01 KEY_1 re
0000000000ff18e7 00 KEY_2 re
0000000000ff18e7 01 KEY_2 re
0000000000ff7a85 00 KEY_3 re
0000000000ff7a85 01 KEY_3 re
0000000000ff10ef 00 KEY_4 re
Step6)列出所有按鍵
#sudo systemctl restart lircd.service
列出所有remote name
#irsend LIST "" ""
列出某個remote name下的所有按鍵,假設remote name為re
#irsend LIST re ""
0000000000ff30cf KEY_1
0000000000ff6897 KEY_0
0000000000ff18e7 KEY_2
0000000000ff7a85 KEY_3
0000000000ff10ef KEY_4
(二)紅外線發射器模擬遙控器
Step1)使用紅外線發射器模擬遙控器
按下數字0
#irsend SEND_ONCE re KEY_0
出現錯誤
hardware does not support sending
Error running command: Input/output error
irsend也會使用到lircd,在設定檔/etc/lirc/lirc_options.conf設定device = /dev/lirc1,是紅外線接收器,無法發送。
Step2)關閉lircd,使用指令lircd啟動,指定設備為/dev/lirc0紅外線發射設備,就沒有出現錯誤
#sudo systemctl stop lircd.service
#sudo lircd --device /dev/lirc0
#irsend SEND_ONCE re KEY_0
Step3)手動關閉lircd,使用指令ps查詢lircd的pid
#ps -ax|grep lircd
1756 ? Ss 0:02 lircd --device /dev/lirc0
關閉 lircd,1756為lircd的pid,每次不同,需要使用ps查詢
#sudo kill -9 1756
參考資料
(1)Raspberry Pi OS IR Remote 設定 (LIRC)
https://zwindr.blogspot.com/2020/06/raspberry-pi-raspberry-pi-os-ir-remote.html
(2)LIRC no output from irw
https://raspberrypi.stackexchange.com/questions/37579/lirc-no-output-from-irw