樹莓派+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服務經常起不來。