樹莓派4b 紅外發射與接收


硬件:樹莓派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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM