【參考資料】
樹莓派學(xué)習(xí)筆記——UART使用
linux下串口調(diào)試(只用shell)
本文的目的是在上一篇文章(樹莓派紅外遙控測試)的基礎(chǔ)上狈涮,用紅外控制樹莓派,向藍牙模塊發(fā)送串口指令硕噩,進而控制藍牙模塊的音樂播放吹零。
【準備材料】
- 樹莓派一個
- 紅外接收器(本文用的是VS1838B)
- 紅外遙控器
- 藍牙模塊(BK8000L)
- 杜邦線若干條
【詳細步驟】
1.將所有配件連接起來
這是上次用到的遙控器和紅外接收器(VS1838B):
還有本次用到的藍牙模塊(BK8000L):
樹莓派引腳編號參考:
將藍牙模塊的串口接到樹莓派的串口上面,TX接RX铐望,RX接TX楚昭,VCC接3.3V栖袋,GND接GND,所有配件連接起來后:
2.修改樹莓派系統(tǒng)文件
因為樹莓派的串口默認用來遠程登錄用抚太,所有先修改系統(tǒng)文件塘幅,將其功能恢復(fù)昔案。
【1】修改 /boot/cmdline.txt
執(zhí)行
sudo leafpad /boot/cmdline.txt
刪除加粗部分:
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
最終變?yōu)?
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
網(wǎng)上還說要修改 /etc/inittab,不過在我的系統(tǒng)里面沒有這個文件晌块,不知道為什么爱沟。
網(wǎng)上說要注釋掉最后一行內(nèi)容:
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
最后重啟樹莓派。
2.測試藍牙模塊串口通信
根據(jù)模塊資料:
控制指令格式:AT+<CMD>[<param>]\r\n
數(shù)據(jù)反饋格式:<IND>[<param>]\r\n
說明:控制指令是控制主機給藍牙的控制命令匆背,以“AT+”開始后面緊跟<CMD>控制
指令呼伸,如果該指令帶參數(shù),則緊跟指令后繼續(xù)傳輸<param>參數(shù)钝尸,最后以”\r\n”結(jié)束括享。
數(shù)據(jù)反饋是藍牙把各種狀態(tài)和數(shù)據(jù)信息反饋給主機,<IND>是反饋指令珍促,如果需要帶參
數(shù)铃辖,則緊跟<IND>之后繼續(xù)傳輸<param>參數(shù)。
注意:
\r\n:字符型為 換行猪叙,十六進制為 0x0D 娇斩,0x0A。
樹莓派上串口通信可以用Python的serial模塊穴翩,這里只做測試用犬第,為了方便就用shell直接發(fā)送命令了。
樹莓派中打開終端芒帕,輸入:
# echo -e 可以發(fā)送回車等特殊字符
echo -e "AT+MN\r" >/dev/ttyAMA0
cat /dev/ttyAMA0
第一條指令為向藍牙模塊發(fā)送串口指令"AT+MN\r"歉嗓,即請求藍牙模塊的名稱。"ttyAMA0"為樹莓派的串口設(shè)備名字
第二條指令為接收來自串口設(shè)備"ttyAMA0"的數(shù)據(jù)背蟆,例如上述命令執(zhí)行完畢后鉴分,如果順利的話,終端會返回藍牙模塊的名字:
NA: BK8000L
表示串口通信沒有問題带膀。
3.實現(xiàn)紅外控制藍牙模塊
要想實現(xiàn)對應(yīng)功能志珍,只需要通過樹莓派向藍牙模塊發(fā)送串口指令即可,如要向?qū)崿F(xiàn)播放/暫停功能本砰,需要通過串口想藍牙模塊發(fā)送:
AT+MA\r
#\r為換行符
在上篇文章(樹莓派紅外遙控測試)中已經(jīng)實現(xiàn)了紅外控制樹莓派執(zhí)行相應(yīng)的命令碴裙,其中按鍵與對應(yīng)命令的配置文件存儲在 /home/pi/.lircrc 文件中。所以這次打開這個文件并編輯
sudo leafpad /home/pi/.lircrc
添加如下代碼并保存:
begin
prog = irexec
button = KEY_PLAY
config = sudo echo -e "AT+MA\r" > /dev/ttyAMA0; cat /dev/ttyAMA0
end
begin
prog = irexec
button = KEY_NEXT
config = sudo echo -e "AT+MD\r" > /dev/ttyAMA0; cat /dev/ttyAMA0
end
begin
prog = irexec
button = KEY_PREVIOUS
config = sudo echo -e "AT+ME\r" > /dev/ttyAMA0; cat /dev/ttyAMA0
end
begin
prog = irexec
button = KEY_VOLUMEUP
config = sudo echo -e "AT+CK\r" > /dev/ttyAMA0; cat /dev/ttyAMA0
end
begin
prog = irexec
button = KEY_VOLUMEDOWN
config = sudo echo -e "AT+CL\r" > /dev/ttyAMA0; cat /dev/ttyAMA0
end
編輯完畢后保存退出点额,重啟紅外控制服務(wù),然后執(zhí)行 irexec:
sudo /etc/init.d/lirc restart
irexec
最后手機連接藍牙模塊(BK8000L)并播放音樂莺琳,用遙控器的按鍵進行測試还棱。
以上代碼只寫了五個鍵(上一曲、下一曲惭等、播放/暫停珍手、增加音量、降低音量),更多功能以后再繼續(xù)添加琳要。