紅外篇
硬件:紅外發射和接收管。軟件:lirc 系統:raspbian(2017-04-10-raspbian-jessie版,2017-11-29-raspbian-stretch不成功)
關於樹莓派紅外搖控器搖控碼的學習接收與發射網上已經有很多教程並且多數都很成熟,本人也是根據衆多大神的教程中學習並經過自己實踐總結。所以在這裏我對於紅外的架設部分只簡單介紹,對於其中的坑做詳細說明,幫助有興趣的同學少走些彎路。
一、硬件選擇及連接。
之所以這單獨講一下硬件的選擇,是因爲我紅外的發射管和接收管共買了5套,各有不同的問題,這些問題都會導致不同的麻煩,影響效果,也可能是我人品不好,遇到了這些問題,但畢竟是有這些問題,希望大家注意。
接收管只有一個問題,就是不穩定,在用mode2 -d /dev/lirc0(該命令後面有介紹)的時候,不按搖控鍵也有代碼出來,非常影響搖控碼的製作,所以建議買稍好點的,儘量不要買只有一個接收管的。(聽朋友說1838T也不會出現誤碼,但我的會。)我用的是這種(下圖)比較穩定,而且有一個led有數據的時候led會閃。
發射管毛病就比較多了,多數是發射距離問題,從20釐米到3米,下圖是我買到的比較好,功率比較大,幾乎360度無死角如圖
接法可用麪包板,也可以不用,只要不接錯正負級問題不大,不過要注意管子所使用的電壓,3.3V的千萬不要接到5V上,不然肯定壞,5V接到3.3V上到是沒問題,但功率會下降,甚至不工作。全部接完如下圖:(具體接GPIO腳後面介紹)
二、軟件篇
我用的是系統是raspbian系統,我原來用的是centos7,但centos沒有lirc軟件,沒辦法改用raspbian系統。
lirc軟件下載安裝(我用的是命令行,習慣了): sudo apt-get install lirc (如果已啓用root用戶,不用輸入sudo)直到命令行再現,安裝完成。
lirc環境設置(重要),如下文件我都是用vim編輯,nano不會:
1、vim /boot/config.txt增加如下代碼:
dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=27
(BCM編碼27,物理13腳)(BCM編碼18,物理12腳),默認是接收腳爲GPIO18,發射腳爲GPIO17,將發射腳改爲GPIO27(物理13腳),因爲後面的315發射器默認是用GPIO17腳,且無法更改(至少我沒改成功)。
GPIO對應圖如下:
接好後用:sudo systemctl start lirc 啓動服務。再輸入sudo mode2 -d /dev/lirc0, 按遙控上的任何鍵,查看是否有輸出,有輸出,如下圖,有輸出證明接收管和軟件安裝正常。
2、修改hardware.conf文件:vim /etc/lirc/hardware.conf 只修改如下兩行即可,其他不要改。(黃色爲修改後內容)
# Run "lircd --driver=help" for a list of supporteddrivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
3、搖控碼錄製:
方法一:irrecord -d /dev/lirc0 ~/tv.conf 回車後會再現Press RETURN to continue.回車,按搖控器按鍵會出現小點,直到停止。再出現Press RETURN to continue.回車後用相同的方法按鍵,直到停止。然後給要錄製的按鍵取名字,不是瞎取的,名字必須在irrecord--list-namespace | grep -i key 內,可用irrecord--list-namespace | grep -i key >list將所有可用名字導出到list文件內用vim list查看。名字雖然是大寫的,但小寫也可以用。
錄製好的tv.conf文件暫時存放在~目錄下。具體放在哪個目錄下,根據自己喜歡,不過在改下一個文件的時候要把路徑寫對,不然該文件無法生效。vim ~/tv.conf 打開該文件,有一個name字段,後面應該是tv.conf,改成tv或別的自己能記住的,錄製生成的其他設備的搖控器碼這個字段也改成tv,爲以後發射寫代碼的時候方便。vim tv.conf文件內容如下圖,紅框內爲修改的name字段:
key_power 等按鍵內容不一樣沒關係,可能是一堆數字,一樣用,不影響。
方法二:如上只是錄製一般搖控器時的方法,有些搖控器(電視機頂盒等)會出現其他的問題這種方法錄製不成功要用如下方法:
irrecord -f -d /dev/lirc0 ~/leshi.conf 這樣錄製出來的是原始碼,所有的key都是一堆數字,一樣可以用。也要改name字段。如上兩種方法基本可以錄製成功80%的搖控器。我在用irrecord -d /dev/lirc0 ~/tv.conf 錄製深圳天威機頂盒搖控器的時候出現下面錯誤:
用irrecord -f -d /dev/lirc0 ~/leshi.conf 可錄製成功。
方法3:有些搖控器用irrecord -f -d /dev/lirc0 ~/leshi.conf 也無法錄製(樂視盒子搖控器就無法錄製),按鍵後根本沒反映,沒有小點出現。還有空調搖控器也不可以用以上的方法錄製。必須用如下終極方法錄製:
用如上方法一或二隨便錄製搖控器內容,做爲模板,並刪除所有按鍵內容(該碼無法使用)。(如果小點根據就不動就算了,可用其他搖控器的conf文件做模板,本人實測有效。)
用mode2 -d /dev/lirc0 >list命令把原始碼錄製到list文件內(建議一個鍵一個鍵錄製,不容易出錯),因爲錄製的內容很多沒用且不符合conf的文件要求,所以要如下操作:用vim list打開文件,刪除最前面最長的數字。並用如下三個命令:(1):%s/^.\{5}(去掉開頭的5個字母)(2):%s/^/ /(功能是在行首加空格。)(3):%s/\n/(多行改成一行).(注:見正則表達式)。保存。同時打開list和conf文件(vim list tv.conf,顯示的是list文件,shift+:輸入v,用方向鍵選擇後按y複製,shift+:再按n,切換到tv.conf文件中按p粘貼。),把list中的數據全部自制到conf文件中的key中。比如:你錄製的是開機鍵。則在conf文件的key_power後面粘貼list中的數字。其他鍵也如此操作即可。
4、vim /etc/lirc/lircd.conf,添加如下內容(重要):
include "/etc/lirc/remotes/tv.conf"(雙引號爲conf文件存放的路徑。)
5、至此錄製搖控器搖控碼的工作完成,下面就可以進行發送實驗了。
輸入irw並回車,紅外接收管準備接收,按下搖控器按鍵,會顯示如下信息:
表示一切正常。現在可以用代碼控制設備了,命令如下:
sudo irsend send_once tv key_power 解釋:send_once表示發射一次,tv就是上面要修改的name名字,key_powre這按鍵名。其他按鍵只要改key就可以了。
特別說明:
有時候我們並不是只有一個搖控器,如果有多個搖控器要實現搖控就要記住所有搖控器的name字段,還要改lirc.conf內文件名,否則irsend會出如下錯誤:
因爲找不到tianwei這個name.
所以我們所有的文件都不用改,只要把name字段都改成一樣的,控制不同設備的時候,把需要的conf文件改名覆蓋tv.conf即可。比如我上面lirc.conf內容爲include "/etc/lirc/remotes/tv.conf"表示系統只認tv.conf配置文件,而我要使用樂視的配置文件leshi.conf,我只需要cp leshi.conf tv.conf,把樂視的文件改名覆蓋tv.conf文件,因爲name字段都一樣,所以發送代碼都不變,但代碼內容實際上是搖控樂視盒子的,就可以搖控樂視盒子了。其他的搖控器也樣操作就可以了。注意:換了conf文件以後要輸入如下代碼纔可生效:
rm /var/run/lirc/*
systemctl restart lirc
lircd -d /dev/lirc0第一行主要爲了刪除lirc. pid文件,這個文件是保存conf文件的UID,不刪除的話新conf文件不會生效。第二行重啓lirc服務。第三行重新使conf生效。如上代碼可以編輯成sh腳本文件運行。
其實這樣還是比較麻煩,畢竟要不停的輸入代碼,後面將介紹如何使用菜單的方式使用腳搖控,方便了很多。後面還有使用其他搖控器進行多設備控制。
根據大神們的經驗本人實踐總結,隨便轉載,註明出處,歡迎討論!謝謝!