硬件:樹莓派4b 1G
系統:2020-02-13-raspbian-buster
內核:4.19.97
安裝lirc:
sudo apt-get update sudo apt-get install lirc
修改confi.txt:
sudo vim /boot/config.txt
找到 infrared module 的部分,按需要修改接收引腳和發射引腳
樹莓派默認17對應GPIO17(紅外接收),18對應GPIO18(紅外發射),但我修改紅外的發射和接收引腳,測試正常使用
config.txt相關文件內容:
# Uncomment this to enable infrared communication. dtoverlay=gpio-ir,gpio_pin=17 dtoverlay=gpio-ir-tx,gpio_pin=18
我的配置:
修改驅動文件/etc/lirc/lirc_options.conf :
sudo vim /etc/lirc/lirc_options.conf
# 把: driver = devinput device = auto # 修改為: driver = default device = /dev/lirc0
將device設置為/dev/lirc1也可以,但我測試發現這樣只能接收紅外信號,而且device無論設置為/dev/lirc0還是/dev/lirc1,接收紅外時只能使用/dev/lirc1,故我認為lirc0應該是紅外發射設備,lirc1是紅外接收設備
我的配置:
重啟樹莓派:
sudo reboot
紅外信號接收測試 :
mode2 -d /dev/lirc1
1.如果提示以下信息,請檢查mode2 -d /dev/lirc1,紅外接收應該是/dev/lirc1
Trying device: /dev/lirc0
Please use the --raw option to access the device directly instead through the abstraction layer
2.如果失敗可能是必須停止lircd服務才能進入接收紅外信號模式,可以先運行sudo service lircd stop再運行紅外接收命令
紅外發射配置(樹莓派可以通過lirc庫發射接收紅外信號,所以我們可以通過lirc庫進行紅外信號的發射):
1.生成遙控器配置文件的樣板:
lirc有一個自動錄入紅外信號、生成遙控器文件的功能,但該方法只適於簡單的設備
# 請cd到有讀寫權限的目錄下,因為需要創建一個遙控器配置文件
# 參數-f --force 表示 Force raw mode
運行:
irrecord -f -d /dev/lirc1
認真閱讀提示信息,根據提示按Enter、輸入 遙控器名稱 、按Enter、按照要求隨機按遙控器、輸入 按鈕名稱 、按對應的遙控器按鈕。由於只是為了生成樣板,可以只錄制一個按鈕。
# 提示 Press RETURN to continue. --> 回車等待
# 提示 Enter name of remote (only ascii, no spaces) --> 輸入配置文件的名字 (只能輸入ASCII字符,不能輸入空格)
# 提示 Press RETURN now to start recording. --> 回車開始錄入
# 這一步操作時間較長,嫌麻煩的可以直接使用模板修改
# 官方要求是按不同的遙控器鍵,至少出現1個點,但不超過10個點,直到出現提示,由於我們只是為了獲取配置文件格式,我們可以只錄制一兩個鍵,但不管怎樣需要錄滿兩行點才能出現下一步的提示
# 提示 Please enter the name for the next button (press <ENTER> to finish recording --> 輸入按鈕名稱,然后按住該按鈕
# 這一步操作忽略則可以在 irrecord 命令后加 --disable-spacename
# 建議用 KEY_1、KEY_2 類似的名字,由於他默認是對鍵名格式有要求的,也可以通過irrecord -l命令查看可用鍵名
# 提示 Press RETURN to continue --> 回車后會在當前目錄生成一個配置文件,文件名格式:遙控器名稱.lirc.conf
# 復制模板到 /etc/lirc/lircd.conf目錄下
樣板模板:該模板文件對於空格要求比較嚴格,每個字段為右對齊
begin remote name 遙控器名稱(配置文件名) flags RAW_CODES(有些是這樣的-->RAW_CODES|CONST_LENGTH,但建議RAW_CODES) eps 30 aeps 100 gap 19991(一般默認的便可以) begin raw_codes name 按鈕名稱 9042 4438 700 1602 705 526 678 528 681 531 674 527 679 528 679 528 677 527 677 528 679 528 678 528 677 1632 676 529 676 531 676 531 649 556 672 532 650 558 654 552 652 553 649 558 648 1661 650 558 648 558 648 1661 649 562 644 558 647 558 648 1657 651 558 647 1659 650 557 653 553 648 1660 648 557 649 9056 2212 593 9056 2245 587 end raw_codes end remote
2.錄入紅外信號 :
mode2 -d /dev/lirc1
對着紅外接收器按下紅外遙控器,控制台會輸出如下形式的數字:
16777215 9059 4432 706 1604 706 528 679 524 681 1603 703 526 680 1602 715 1596 704 526 679 527 679 527 680 527 679 1604 705 530 673 530 674 529 682 529 675 530 674 532 674 532 650 557 648 556 654 1653 676 533 649 559 647 1667 639 559 648 558 656 553 647 1658 648 558 650 1659 649 559 647 559 648 1659 648 558 646 19991 648 558 648 558 650 567 638 557 648 1668 640 557 649 558 650 558 646 1660 650 556 649 557 649 559 654 552 648 1657 651 558 647 554 660 549 649 559 647 557 649 559 648 559 647 557 644 561 648 559 648 556 647 560 648 556 652 563 642 1658 648 1661 649 1660 646 1658 650
除去第一行很大的那個數,把其他數據全部復制,粘貼到配置文件的 name 按鈕名稱 的下方,注意這些字段都是右對齊,第一個數要與原數位置對應,一般第一個數字在name的字符e下開始
我的配置:
3.重啟lirc服務:
sudo service lircd restart
測試 :
sudo irw
對着紅外接收器按下之前錄制的按鍵。控制台會出現如下形式字段:
00000000xxxxxxxx xx 按鈕名稱 遙控器名稱
紅外發射測試:
# 發射命令:irsend SEND_ONCE 遙控器名稱 按鈕名稱
irsend SEND_ONCE orange_scale_ir KEY_16
1.如果前面的步驟一切正常,但在發射信號時報錯“transmission failed”。請檢查生成的遙控器配置文件,查看flags項,若是flags RAW_CODES|CONST_LENGTH,請嘗試將其修改成flags RAW_CODES並重啟lircd服務。再測試能否發射信號
2.如果發射信號時報錯以下信息,請查看驅動文件/etc/lirc/lirc_options.conf中是否修改為device=/dev/lirc0或者檢查config.txt中發射引腳和硬件連接引腳是否一致:
hardware does not support sending
Error running command: Input/output error
3.如果發射信號時報錯以下信息,分別是/etc/lirc/lircd.conf目錄下沒有該配置文件或該配置文件中沒有該按鈕信息
unknown remote: "遙控器名稱"
Error running command: Input/output error
或
unknown command: "按鈕名稱"
Error running command: Input/output error
4.還有要注意的是,如果配置文件中的按鈕信息不准確也會報"Error running command"錯誤,比如我測試時少復制一行內容或者接收的紅外數據中有一行空格我復制到配置文件卻刪除了,這可能會導致報錯,具體解決方法還是要看報錯信息
參考:
https://blog.csdn.net/weixin_30896727/article/details/116803129?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242
https://segmentfault.com/a/1190000014135418
https://www.jianshu.com/p/abdcd3e06726
https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=235256