树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤
本笔记基于树莓派 3B+(同事买的,拿来玩玩的)的原生蓝牙,实现与手机之间的SPP服务的通讯功能,截至本笔记,未发现同类的笔记/文章。本人主要参考了后面的两个链接,经过大半天(严格说不到一周,主要一开始一直使用苹果手机的蓝牙,苹果比较封闭,耽误了太多的时间)的摸索链路上基本OK,草做个笔记以备查阅。
调试的手机也是借同事的 嘿嘿
**主要参考链接:**
https://www.raspberrypi.org/forums/viewtopic.php?p=919420
http://jasiek.me/2014/10/04/bluetooth-console-on-a-raspberry-pi-using-a-usb-adapter.html
主要相关的依赖库库,网上的介绍的方法还是比较多,就不记录在此列;另外,树莓派和手机(android)上的调试助手/工具,请自行安装/下载,都比较简单。
下面是本人的详细的操作记录,希望对大家有所帮助。
**启动/增加SPP:**
修改在文件内修改如下:

图1
第二句有错,懒的再截图啦,正确的应该如下:
```
ExecStartPost=/usr/bin/sdptool add SP
```
重启树莓派
**查看蓝牙服务:**
#hciconfig
结果如下:

图2
# Sdptool browse local
**结果如下:**
```
Browsing FF:FF:FF:00:00:00 ...
Service RecHandle: 0x10000
Service Class ID List:
"PnP Information" (0x1200)
Profile Descriptor List:
"PnP Information" (0x1200)
Version: 0x0103
Browsing FF:FF:FF:00:00:00 ...
Service Search failed: Invalid argument
Service Name: Generic Access Profile
Service Provider: BlueZ
Service RecHandle: 0x10001
Service Class ID List:
"Generic Access" (0x1800)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 31
"ATT" (0x0007)
uint16: 0x0001
uint16: 0x0008
Service Name: Generic Attribute Profile
Service Provider: BlueZ
Service RecHandle: 0x10002
Service Class ID List:
"Generic Attribute" (0x1801)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 31
"ATT" (0x0007)
uint16: 0x0010
uint16: 0x0010
Service Name: AVRCP CT
Service RecHandle: 0x10003
Service Class ID List:
"AV Remote" (0x110e)
"AV Remote Controller" (0x110f)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 23
"AVCTP" (0x0017)
uint16: 0x0103
Profile Descriptor List:
"AV Remote" (0x110e)
Version: 0x0105
Service Name: AVRCP TG
Service RecHandle: 0x10004
Service Class ID List:
"AV Remote Target" (0x110c)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 23
"AVCTP" (0x0017)
uint16: 0x0103
Profile Descriptor List:
"AV Remote" (0x110e)
Version: 0x0104
Service Name: Serial Port
Service Description: COM Port
Service Provider: BlueZ
Service RecHandle: 0x10005
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Serial Port" (0x1101)
Version: 0x0100
Service Name: Serial Port
Service Description: COM Port
Service Provider: BlueZ
Service RecHandle: 0x10006
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Serial Port" (0x1101)
Version: 0x0100
Service Name: Serial Port
Service Description: COM Port
Service Provider: BlueZ
Service RecHandle: 0x10007
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Serial Port" (0x1101)
Version: 0x0100
Service Name: Serial Port
Service Description: COM Port
Service Provider: BlueZ
Service RecHandle: 0x10008
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 3
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Serial Port" (0x1101)
Version: 0x0100
```
# rfcomm watch hci0
**结果如下:**

图3
至此,可以用串口调试工具进行测试,手机上的SPP测试工具也可以通过蓝牙连接树莓派板子了。
首先,树莓派上启动调试串口助手,该工具可以参考其安装方法的笔记。
新打开一个控制台,并做如下操作:
查看虚拟蓝牙串口:
#ls /dev
**结果如下:**

图4
注:在手机和树莓派建立连接后,才能查看到虚拟串口的标识”rfcomm0”,后续用串口调试助手打开上图中红圈里的rfcomm0即可,看后面的详细# xgcom开一个图形界面的调试窗口,如下所示:

图5
配置参数:
点击配置,弹出一个配置参数对话框,在对话框输入树莓派蓝牙虚拟出来的串口,即:
```
/dev/rfcomm0
```

图6
保存,对话框关闭。
**打开串口:**
接上一步,点击”open com“(该按钮功能复用),即可看到最下面的状态栏提示的相关信息。

图7
**数据双向收发:**
树莓派发数据到手机,如上图所示,在发送文本框输入”2222“,输入内容随意。
然后点击”send Data“
此时手机上的助手软件就可以收到树莓派发出的数据啦,手机端内容如下:

图8
注:手机是同事淘汰的ANDROID机,主要苹果手机应用的圈相对封闭,尝试了建立连接,但是一直未成功连接;调试助手是安卓应用市场下的,调试助手里面还带了广告...
同样,手机端发送数据”hello\r\n“,此时树莓派的串口助手截图如下:

图9
手机端发送界面如下所示:

图10
至此,树莓派和手机之家通过蓝牙建立通讯的功能基本完成,都是用的第三方的调试工具,物理链路上打通了,在开发、调试软件时,就可以用第三方的工具来助力排查bug。
首发地址:https://blog.csdn.net/wanyeye/article/details/52909869,截图不显示的话可以到这里浏览。