【参考资料】
树莓派学习笔记——UART使用
linux下串口调试(只用shell)
本文的目的是在上一篇文章(树莓派红外遥控测试)的基础上,用红外控制树莓派,向蓝牙模块发送串口指令,进而控制蓝牙模块的音乐播放。
【准备材料】
- 树莓派一个
- 红外接收器(本文用的是VS1838B)
- 红外遥控器
- 蓝牙模块(BK8000L)
- 杜邦线若干条
【详细步骤】
1.将所有配件连接起来
这是上次用到的遥控器和红外接收器(VS1838B):
还有本次用到的蓝牙模块(BK8000L):
树莓派引脚编号参考:
将蓝牙模块的串口接到树莓派的串口上面,TX接RX,RX接TX,VCC接3.3V,GND接GND,所有配件连接起来后:
2.修改树莓派系统文件
因为树莓派的串口默认用来远程登录用,所有先修改系统文件,将其功能恢复。
【1】修改 /boot/cmdline.txt
执行1
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
最终变为:1
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
网上还说要修改 /etc/inittab,不过在我的系统里面没有这个文件,不知道为什么。
网上说要注释掉最后一行内容:
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
最后重启树莓派。
2.测试蓝牙模块串口通信
根据模块资料:1
2
3
4
5
6
7
8控制指令格式:AT+<CMD>[<param>]\r\n
数据反馈格式:<IND>[<param>]\r\n
说明:控制指令是控制主机给蓝牙的控制命令,以“AT+”开始后面紧跟<CMD>控制
指令,如果该指令带参数,则紧跟指令后继续传输<param>参数,最后以”\r\n”结束。
数据反馈是蓝牙把各种状态和数据信息反馈给主机,<IND>是反馈指令,如果需要带参
数,则紧跟<IND>之后继续传输<param>参数。
注意:
\r\n:字符型为 换行,十六进制为 0x0D ,0x0A。
树莓派上串口通信可以用Python的serial模块,这里只做测试用,为了方便就用shell直接发送命令了。
树莓派中打开终端,输入:1
2
3# echo -e 可以发送回车等特殊字符
echo -e "AT+MN\r" >/dev/ttyAMA0
cat /dev/ttyAMA0
第一条指令为向蓝牙模块发送串口指令“AT+MN\r”,即请求蓝牙模块的名称。“ttyAMA0”为树莓派的串口设备名字
第二条指令为接收来自串口设备“ttyAMA0”的数据,例如上述命令执行完毕后,如果顺利的话,终端会返回蓝牙模块的名字:1
NA: BK8000L
表示串口通信没有问题。
3.实现红外控制蓝牙模块
要想实现对应功能,只需要通过树莓派向蓝牙模块发送串口指令即可,如要向实现播放/暂停功能,需要通过串口想蓝牙模块发送:1
2AT+MA\r
#\r为换行符
在上篇文章(树莓派红外遥控测试)中已经实现了红外控制树莓派执行相应的命令,其中按键与对应命令的配置文件存储在 /home/pi/.lircrc 文件中。所以这次打开这个文件并编辑1
sudo leafpad /home/pi/.lircrc
添加如下代码并保存:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25begin
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
编辑完毕后保存退出,重启红外控制服务,然后执行 irexec:1
2sudo /etc/init.d/lirc restart
irexec
最后手机连接蓝牙模块(BK8000L)并播放音乐,用遥控器的按键进行测试。
以上代码只写了五个键(上一曲、下一曲、播放/暂停、增加音量、降低音量),更多功能以后再继续添加。