參考自
https://www.raspberrypi.org/forums/viewtopic.php?p=953141#p953141
之前沒有用,關掉了。
以下命令打開
sudo systemctl enable hciuart sudo systemctl start hciuart
VNC連接,看到藍牙圖標又活躍了
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是基於歐洲電信標準協會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
新建服務
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服務經常起不來。