查看: 812|回复: 0

[技术交流] 手机APP远程修改E66从机透传模组参数的方法

[复制链接]

108

主题

163

帖子

618

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
618
发表于 2022-9-16 10:49:15 | 显示全部楼层 |阅读模式
  本文主要是对《LSD4BT-E66ALSP001_使用说明书》的“4.4 远程指令通道”小节展开详细阐述。

  一、使用说明书4.4小节“远程指令通道”章节

  1、服务及通道列表

  智能终端通过标准 GATT 协议与模组进行通信,表 7 所示的是模组所用的 GATT 服务及特征通道列表。
  2、远程指令通道

  远程指令通道的 UUID 是 0xFE63,该通道用于远程指令的收发,智能终端通过该通道以 Write Command 的形式下发查询或设置指令,蓝牙模组收到指令后进行解析、执行,最后将执行的结果以 Notify 的形式发给智能终端。
远程指令通道的指令帧和响应帧都必须满足一定的格式, 具体如表 8 和表 9 所示,同时还要满足“2.3分帧规则”。
  字节数:表示按“2.3分帧规则”进行拆包后,指令帧剩下还未发送的字节数,16进制格式。
  指令 ID:含义同串口指令 ID,各个指令的详细信息请参考串口指令帧列表。
  指令参数:指令执行所需的参数。

  二、分帧规则详解

  由于BLE通信单帧字节最大限制是20个字节,所以当指令帧字节数加起来超过20字节时,需要对该指令帧进行分帧处理。
  具体规则如下:
  假设有一条 M+2字节的指令帧cmd[字节数 指令ID X1 X2 ... XM],X1~XM是指令参数,那么拆分情况如下所示:
  第一帧=[ M-18 指令ID X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18]
  第二帧=[ M-37 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31 X32 X33 X34 X35 X36 X37]
  ...
  倒数第2帧=[ M-N+1 XN-19 XN-18 XN-17 XN-16 XN-15 XN-14 XN-13 XN-12 XN-11 XN-10 XN-9 XN-8 XN-7 XN-6 XN-5 XN-4 XN-3 XN-2 XN-1]
  最后帧=[0 XN ... XM]
  同理, 模组向智能终端发送的反馈数据包也会按照此规则进行分包。
  注:为方便介绍,本小节中字节数都是10进制格式。

  示例

  在本示例中,“智能终端”均代表手机端APP nRFconnect 。

  举以下2个例子来具体描述,分别是设备名称设置指令(帧字节数≤20字节)、广播数据设置指令(帧字节数>20)。

  ●设备名称设置
图1 设备名称设置指令

  具体以“设备名称设置”指令{ 01 FC 07 0C 54 41 4e 43 59 20 34 31 34 45 37 31 }来举例,那么手机端按表8指令帧格式来组帧,具体如下所示:

  指令帧=[00 07 54 41 4e 43 59 20 34 31 34 45 37 31 ]

  注:该指令帧字节数是14字节,因为小于20字节无需进行拆包,所以字节数=00。

  打开“nRFconnect APP”扫描到待测设备,设备名称是“BLE Device 284E71”,建立连接,在0xFE63通道下打开notify按钮,在发送通道输入指令帧并点击发送,右滑APP界面打开debug窗口,可看到模块回复了正确的应答帧[00 07 00],断开连接再次扫描周围设备,可看到此E66从机模块的设备名称已改变成“TANCY 414E71”。
图2 APP扫描到BLE Device 284E71从机模块
图3 debug窗口
图4 从机模块名称变成TANCY 414E71

  ●广播数据设置
图5 广播数据设置指令

  以“广播数据设置”指令{01 FC 0D 19 01 03 02 60 FE 13 FF 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 }来举例,那么主机端按表8指令帧格式来组帧,该指令帧字节数是29字节,因为大于20字节需要进行拆包,具体拆包后的指令帧如下所示:
  第一帧=[07 0D 01 03 02 60 FE 13 FF 31 31 32 32 33 33 34 34 35 35 36 ];
  第二帧=[00 36 37 37 38 38 39 39 ];
  注:
  1.因为指令参数(SaveFlag ADVData)共25bytes,大于20bytes,所以字节数+指令ID+指令参数的前18个字节组成第一帧;25bytes-18bytes=7bytes,所以第一帧字节数=7(0x07)。
  2.由于第二帧指令参数(ADVData)共7bytes,小于20bytes,所以第二帧字节数=00。
  打开“nRFconnect APP”扫描到待测设备,打开广播数据查看界面“Raw data”,可看到原始广播数据是“02 01 06 03 02 60 FE”,建立连接,在0xFE63通道下打开notify按钮,在发送通道依次输入上述2条指令帧并点击发送,右滑APP界面打开debug窗口,可看到模块回复了正确的应答帧[00 0D 00],断开连接再次扫描周围设备,打开广播数据查看界面“Raw data”,可看到此时E66从机模块的广播数据已修改为“02 01 06 03 02 60 FE 13 FF 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39”。
图6 从机模块原始广播数据
图7 debug窗口
图8  从机模块修改后的广播数据

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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