树莓派+Pixhawk之四:通过蓝牙在手机上控制
参考自
https://www.raspberrypi.org/forums/viewtopic.php?p=953141#p953141
打开树莓派的蓝牙
之前没有用,关掉了。
以下命令打开
sudo systemctl enable hciuart
sudo systemctl start hciuart
VNC连接,看到蓝牙图标又活跃了
配置蓝牙串口协议SPP
SPP不做深入探讨。
编辑文件 /lib/systemd/system/bluetooth.service
sudo nano /lib/systemd/system/bluetooth.service
把这行改下
ExecStart=/usr/lib/bluetooth/bluetoothd
改成
ExecStart=/usr/lib/bluetooth/bluetoothd -C --noplugin=sap
ExecStartPost=/usr/bin/sdptool add SP
有时候SAP会有错误,据说这个也没什么用,先disable掉。
有的文章里写这地方改成
ExecStart=/usr/lib/bluetooth/bluetoothd -E
ExecStartPost=/usr/bin/sdptool add SP
我试了下,用“-E”参数启动有可能找不到手机。
保存后再执行
sudo systemctl daemon-reload
sudo systemctl restart bluetooth
sudo hciconfig hci0 up
第三条命令打开和初始化蓝牙设备。hciconfig还有一些功能,详见《Android blueZ HCI(一):hciconfig实现及常用方法》 中的插图
手机配对的过程略过。
使用rfcomm 工具
RFCOMM是基于欧洲电信标准协会ETSI07.10规程的串行线性仿真协议。此协议提供RS232控制和状态信号。
RFCOMM是一个简单传输协议,其目的为了解决如何在两个不同设备上的应用程序之间保证一条完整的通信路径,并在它们之间保持一通信段的问题。
RFCOMM是为了兼容传统的串口应用,同时取代有线的通信方式,蓝牙协议栈需要提供与有线串口一致的通信接口而开发出的协议。
rfcomm工具在在蓝牙设备上监听,当有设备接入后模拟出 /dev/rfcomm0来。
用法:
sudo rfcomm watch hci0
在命令窗口内敲入后开始监听。
安卓手机上安装一个“蓝牙串口”,连接树莓派
连接成功后树莓派的界面出现信息:
在树莓派上打开一个新的命令行窗口,输入:
echo "This is from RaspBerry Pi" > /dev/rfcomm0 | cat /dev/rfcomm0
手机能正常收发信息了。
查看串口波特率
stty -F /dev/rfcomm0
嗯,9600
speed 9600 baud; line = 0;
min = 1; time = 0;
-brkint -imaxbel
-icanon
貌似设成115200也没问题
stty -F /dev/ttyS0 ispeed 115200 ospeed 115200
建RFCOMM服务随系统运行
新建服务
sudo nano /etc/systemd/system/rfcomm.service
内容为
[Unit]
Description=RFCOMM service
After=bluetooth.service
Requires=bluetooth.service
[Service]
ExecStart=/usr/bin/rfcomm watch hci0
[Install]
WantedBy=multi-user.target
保存后运行
sudo systemctl enable rfcomm
sudo systemctl start rfcomm
服务打开。
P.S.
树莓派的蓝牙功能十分不靠谱。原因是bluetooth服务经常起不来。