查看: 249|回复: 0

[应用笔记] WB81蓝牙普通传输应用指南

[复制链接]

185

主题

204

帖子

596

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
596
发表于 2024-2-4 10:20:37 | 显示全部楼层 |阅读模式
  1 引言

  1.1 概述

  利尔达WB81模组支持wifi/蓝牙透传,如果在WB81设备上需要同时开启这两个模式,传输方式只支持普通模式。因为忽略这一要求,用户在调试的时候可能会遇到以下情况:
  1、开启了Wi-Fi透传,蓝牙初始化失败,蓝牙功不能正常使用;
  2、同时开启Wi-Fi和蓝牙之后,Wi-Fi和蓝牙设置透传模式都会失败。

  为了满足这一要求,本文档主要介绍 BLE 普通传输的使用方法,并提供在WB81设备上运行这些命令的详细示例。

  2 示例

  以下示例同时使用两块WB81开发板,其中一块作为 BLE主机(扫描-连接),另一块作为 BLE从机(广播-被连接)。这个例子展示了应如何使用AT命令读写服务特征值(收发数据),完成数据通信。

  在以下步骤中以WB81-从机开头的操作只需要在WB81 BLE从机端执行即可,以WB81-主机开头的操作只需要在WB81 BLE主机端执行即可。

  2.1 设置BLE初始化角色

  从机端:设置为从机模式
  AT+BLEINIT=2 //设置模组为从机模式
  ok

  AT+BLEGATTSSRVCRE //创建服务
  ok

  AT+BLEGATTSSRVSTART //开启服务
  ok

  主机端:设置为主机模式
  AT+BLEINIT=1 //设置模组为主机模式
  ok

  2.2 广播-扫描

  从机端:开启广播
  AT+BLEADVPARAM=50,50,0,0,7,0,, //设置广播参数:最小间隔;最大间隔;广播类型;本机地址类型;广播信道;过滤规则;
  ok

  AT+BLEADVDATA="0201060A09457370726573736966030302A0" //设置广播数据。数据内容参考广播数据详解
  ok

  AT+BLEADVSTART //开启广播
  ok

  AT+BLEADDR? //查询本机MAC地址
  +BLEADDR:"b0:b2:1c:f4:53:e6"
  OK

  主机端:开启扫描
  AT+BLESCAN=1,3,1,"b0:b2:1c:f4:53:e6" //扫描MAC地址为"b0:b2:1c:f4:53:e6"的广播包
  +BLESCAN:"b0:b2:1c:f4:53:e6",-34,0201060a09457370726573736966030302a0,,0

  2.3 连接

  主机端:发起连接
  AT+BLECONN=0,"b0:b2:1c:f4:40:da" //建立连接号为0,从机MAC地址为"b0:b2:1c:f4:40:da"的连接
  OK

  从机端:连接响应
  +BLECONN:0,"54:43:b2:6e:dc:6a" //连接号为0,主机MAC地址为 "54:43:b2:6e:dc:6a"

  2.4 查询本地服务/特征值

  查询服务
  ①主机端:
  AT+BLEGATTCPRIMSRV=0 //查询连接号为0的服务
  +BLEGATTCPRIMSRV:0,1,0x1801,1
  +BLEGATTCPRIMSRV:0,2,0x1800,1
  +BLEGATTCPRIMSRV:0,3,0xA002,1
  +BLEGATTCPRIMSRV:0,4,0xA003,1
  OK
  ②从机端:
  AT+BLEGATTSSRV? //查询本地服务
  +BLEGATTSSRV:1,1,0xA002,1
  +BLEGATTSSRV:2,1,0xA003,1
  OK

  查询特征值
  ③主机端:
  AT+BLEGATTCCHAR=0,3
  +BLEGATTCCHAR:"char",0,3,1,0xC300,0x02
  +BLEGATTCCHAR:"desc",0,3,1,1,0x2901
  +BLEGATTCCHAR:"char",0,3,2,0xC301,0x02
  +BLEGATTCCHAR:"desc",0,3,2,1,0x2901
  +BLEGATTCCHAR:"char",0,3,3,0xC302,0x08
  +BLEGATTCCHAR:"desc",0,3,3,1,0x2901
  +BLEGATTCCHAR:"char",0,3,4,0xC303,0x04
  +BLEGATTCCHAR:"desc",0,3,4,1,0x2901
  +BLEGATTCCHAR:"char",0,3,5,0xC304,0x08
  +BLEGATTCCHAR:"char",0,3,6,0xC305,0x10
  +BLEGATTCCHAR:"desc",0,3,6,1,0x2902
  +BLEGATTCCHAR:"char",0,3,7,0xC306,0x20
  +BLEGATTCCHAR:"desc",0,3,7,1,0x2902
  +BLEGATTCCHAR:"char",0,3,8,0xC307,0x02
  +BLEGATTCCHAR:"desc",0,3,8,1,0x2901
  OK
  ④从机端:
  AT+BLEGATTSCHAR?
  +BLEGATTSCHAR:"char",1,1,0xC300,0x02
  +BLEGATTSCHAR:"desc",1,1,1,0x2901
  +BLEGATTSCHAR:"char",1,2,0xC301,0x02
  +BLEGATTSCHAR:"desc",1,2,1,0x2901
  +BLEGATTSCHAR:"char",1,3,0xC302,0x08
  +BLEGATTSCHAR:"desc",1,3,1,0x2901
  +BLEGATTSCHAR:"char",1,4,0xC303,0x04
  +BLEGATTSCHAR:"desc",1,4,1,0x2901
  +BLEGATTSCHAR:"char",1,5,0xC304,0x08
  +BLEGATTSCHAR:"char",1,6,0xC305,0x10
  +BLEGATTSCHAR:"desc",1,6,1,0x2902
  +BLEGATTSCHAR:"char",1,7,0xC306,0x20
  +BLEGATTSCHAR:"desc",1,7,1,0x2902
  +BLEGATTSCHAR:"char",1,8,0xC307,0x02
  +BLEGATTSCHAR:"desc",1,8,1,0x2901
  +BLEGATTSCHAR:"char",2,1,0xC400,0x02
  +BLEGATTSCHAR:"desc",2,1,1,0x2901
  +BLEGATTSCHAR:"char",2,2,0xC401,0x02
  +BLEGATTSCHAR:"desc",2,2,1,0x2901
  OK

  WB81的典型服务通道:
  注意:
  1. 主机使用查询本地服务/特征,需要先建立 Bluetooth LE 连接
  2. 主机查询服务的结果,比从机查询服务的结果多两个默认服务(UUID: 0x1800和0x1801),这是正常现象。正因如此,对于同一服务,主机查询的<srv_index>值等于从机查询的<srv_index>值+2。例如上述示例中的服务0xA002,当前在主机端查询到的<srv_index>为3,再从机端查询则是1。

  2.5 收发数据

  2.5.1 从机 NOTIFY 服务特征值给主机端 (0xc305)

  1. 主机使能NOTIFY

  主机只有使能成功后,才能收到从机的notify数据

  //主机使能 NOTIFY 通道
  AT+BLEGATTCWR=0,3,6,1,2 //固定参数
  >
  12 //任意2字节数据,取消回车换行发送
  OK

  //使能成功,从机端返回
  +WRITE:0,1,6,1,2,\0

  2. 从机发送数据

  将len换成自己需要发送的数据长度,例如示例1,发送10个字节给从机,从机收到数据会返回如下打印

  AT+BLEGATTSNTFY=1 0,1,6,len

  3. 示例1

  从机端notify数据:
  AT+BLEGATTSNTFY=0,1,6,10
  >
  1234567890
  ok

  主机端接收打印:
  +NOTIFY:0,3,6,10,1234567890

  2.5.2 从机 indicate 服务特征值给主机端(0xc306)

  1. 主机使能 indicate 通道

  只有主机使能成功,才能收到从机的indicate数据

  //主机使能 INDICATE 通道
  AT+BLEGATTCWR=0,3,7,1,2 //固定参数
  >
  12 //任意2字节数据,取消回车换行发送
  OK

  //使能成功,从机端返回
  +WRITE:0,1,7,1,2,\0

  2. 从机发送数据

  将len换成自己需要发送的数据长度,例如示例2,发送4个字节给主机,主机收到数据会返回如下打印

  AT+BLEGATTSIND=1 0,1,7,len

  3. 示例2

  从机端incidate数据:
  AT+BLEGATTSIND=0,1,7,4
  >
  1234
  OK

  主机端接收打印:
  +INDICATE:0,3,7,4,1234

  2.5.3 主机写数据给从机(0xc304)

  1. 主机发送数据

  将len换成自己需要发送的数据长度,最大支持512,例如示例3,发送6个字节给从机,从机收到数据会返回如下打印

  AT+BLEGATTCWR=0,3,5,,len

  2. 示例3:

  主机端发送数据:
  AT+BLEGATTCWR=0,3,5,,6
  >
  456789
  OK

  从机端接收打印:
  +WRITE:0,1,5,,6,456789

  2.5.4 主机读取特征值(0xc301)

  0xc301这个通道的值,只有主机主动去读才会获取

  1. 从机写入数据

  将len换成自己需要发送的数据长度,最大支持512,例如示例4,发送3个字节给主机

  AT+BLEGATTSSETATTR=1 1,2,,len

  2. 主机读取

  发送指令AT+BLEGATTCRD=0,3,2 读取特征值,读取成功会有如示例4的打印

  AT+BLEGATTCRD=0,3,2

  3. 示例4:

  从机端写入特征值:
  AT+BLEGATTSSETATTR=1,2,,3
  >
  333
  ok
  +READ:0,"b0:b2:1c:f4:40:da"

  主机端读取特征值:
  AT+BLEGATTCRD=0,3,2
  +BLEGATTCRD:0,3,333
  OK

  3、详解

  1. 服务/特征值指令

  ①AT+BLEGATTCPRIMSRV=<conn_index>
  +BLEGATTCPRIMSRV:<conn_index>,<srv_index>,<srv_uuid>,<srv_type>

  ②+BLEGATTSSRV:<srv_index>,<start>,<srv_uuid>,<srv_type>

  ③AT+BLEGATTCINCLSRV=<conn_index>,<srv_index>
  +BLEGATTCCHAR:"char",<conn_index>,<srv_index>,<char_index>,<char_uuid>,<char_prop>
  +BLEGATTCCHAR:"desc",<conn_index>,<srv_index>,<char_index>,<desc_index>,<desc_uuid>

  ④+BLEGATTSCHAR:"char",<srv_index>,<char_index>,<char_uuid>,<char_prop>
  +BLEGATTSCHAR:"desc",<srv_index>,<char_index>,<desc_index>,<desc_uuid>

  •<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
  •<srv_index>:服务序号,从 1 开始递增。
  •<srv_uuid>:服务的 UUID。
  •<srv_type>:服务的类型:
   0: 次要服务;
   1: 首要服务。
  •<start>:
   0: 服务未开始;
   1: 服务已开始。
  •<char_index>:服务特征的序号,从1起始递增。
  •<char_uuid>:服务特征的UUID。
  •<char_prop>:服务特征的属性。
  •<desc_index>:特征描述符序号。
  •<desc_uuid>:特征描述符的UUID。

  2. char_prop特征值权限
表1 特征值权限

  3. char_prop和特征值对应关系

  例如从机 发送NOTIFY (0xc305)服务特征值给主机端 ,是通过如下命令实现:

  AT+BLEGATTSNTFY=1 0,1,6,len

  原始命令参数格式: AT+BLEGATTSNTFY=<conn_index>,<srv_index>,<char_index>,<length>

  我们是如何确定指令中的参数的呢,具体操作如下:
  1) conn_index ,是【2.3 连接】中主机端发起连接时设置的连接号
  2)查看 表-1 特征值权限,找到权限对应的char_prop,例如notify权限的char_prop为0x10
  3)在【2.4 查询本地服务/特征值】中的④从机端 数据可以获取char_prop为0x10的特征参数如下图3.1
     特征参数格式如图3.2,其中<srv_index> :1; <char_index> :6;
图3.1 从极端特征值参数

图3.2 +BLEGATTSCHAR返回参数格式

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表