蓝牙串口实现

13 篇文章 2 订阅
8 篇文章 0 订阅

我们说蓝牙串口,一般是用于手机App 和嵌入式设备之间通信。有两种实现方式

  • Bluetooth SPP
  • BLE GATT

BLE GATT 并没有定义标准的Profile用于串口通信。但是BLE相对嵌入式设备更常见,因此基于GATT的串口通信更常见。
https://developer.nordicsemi.com/nRF51_SDK/nRF51_SDK_v7.x.x/doc/7.2.0/s110/html/a00061.html
如上链接中是个nordic 的例子
例子中定了一个Nordic UART Service (UUID: 0x0001) service
改service有两个characteristics,

  • TX Characteristic
    使用“notify" 进行通信
  • RX Characteristic
    支持"write" request 或者command

另外一个方式是基于经典蓝牙的RFCOMM + SPP

  • SPP(Serial Port Profile)定义了一系列协议和过程,蓝牙设备通过该协议实现RS232串行线缆的仿真。很多老式设备都工作在串行模块下面,使用SPP协议可以帮组连接这些老式设备。
  • RFCOMM提供了基于L2CAP协议的串行(9针RS-232)模拟,支持在两个蓝牙设备间高达60路的通信连接。

下面是RFCOMM以及SPP的框图
在这里插入图片描述
注意图中除了transport 层的RFCOMM,session层的SPP,还有一个标红的SDP。RFCOMM是通过不同的频道(channel)来提供不同的Profile的,所以需要找到要用的服务在设备上的哪个频道上,这是通过SDP,服务发现协议,来完成的。

SPP按角色分为DevA和DevB,其中DevA是连接的发起者(initiator),DevB是等待连接的到来。从应用层角度看,SPP涉及到三个主要的过程:建立链路并设置虚拟串口连接、接收链路和建立虚拟串口连接、本地SDP数据库注册服务记录,其中第一项对DevA来说是强制实现的,后两项对DevB是强制实现的。
在这里插入图片描述
来看看典型的连接过程涉及到的消息交互流程图。DevA通过调用SppConnectRequest ()开启连接过程,DevB在接收到SPP_CONNECT_IND消息时决定是否接受该连接,并作出响应SppConnectResponse()。在DevA收到SPP_CLIENT_CONNECT_CFM,DevB收到SPP_SERVER_CONNECT_CFM后,表示SPP通信会话正式建立。
在这里插入图片描述
看下图中树莓派上wireshark对应的抓包。SPP 应用是网上找到的一个blueSPP工具,装在我一个快淘汰的小米平板上

  • service search attribute request
  • service search attribute response

在这里插入图片描述
接着是

  • connection request
  • connection response

在这里插入图片描述
在树莓派上通过python 发送字符串到平板上的蓝牙串口app, 树莓派上的wireshark log如下
在这里插入图片描述
L2CAP 报文如下,从树莓派本地发往remote的字符串“hello just test"
在这里插入图片描述

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值