树莓派 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:
修改在文件内修改如下:
树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤_第1张图片
图1
第二句有错,懒的再截图啦,正确的应该如下:

ExecStartPost=/usr/bin/sdptool add SP

重启树莓派

查看蓝牙服务:

hciconfig

结果如下:
树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤_第2张图片
图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

结果如下:
树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤_第3张图片
图4
注:在手机和树莓派建立连接后,才能查看到虚拟串口的标识”rfcomm0”,后续用串口调试助手打开上图中红圈里的rfcomm0即可,看后面的详细# xgcom开一个图形界面的调试窗口,如下所示:
树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤_第4张图片
图5
配置参数:
点击配置,弹出一个配置参数对话框,在对话框输入树莓派蓝牙虚拟出来的串口,即:

/dev/rfcomm0

树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤_第5张图片
图6
保存,对话框关闭。

打开串口:
接上一步,点击”open com“(该按钮功能复用),即可看到最下面的状态栏提示的相关信息。
树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤_第6张图片
图7

数据双向收发:
树莓派发数据到手机,如上图所示,在发送文本框输入”2222“,输入内容随意。
然后点击”send Data“
此时手机上的助手软件就可以收到树莓派发出的数据啦,手机端内容如下:
树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤_第7张图片
图8
注:手机是同事淘汰的ANDROID机,主要苹果手机应用的圈相对封闭,尝试了建立连接,但是一直未成功连接;调试助手是安卓应用市场下的,调试助手里面还带了广告…

同样,手机端发送数据”hello\r\n“,此时树莓派的串口助手截图如下:
树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤_第8张图片
图9
手机端发送界面如下所示:
树莓派 3B+ 原生蓝牙与手机通讯(BlueTooth SPP)方法和步骤_第9张图片
图10

至此,树莓派和手机之家通过蓝牙建立通讯的功能基本完成,都是用的第三方的调试工具,物理链路上打通了,在开发、调试软件时,就可以用第三方的工具来助力排查bug。

你可能感兴趣的:(玩转树莓派,树莓派,bluetooth,SPP,蓝牙,手机)