Skip to content

3.4 通信协议 ​

通信协议分为通用AT指令协议和功能协议,通用AT指令协议请参考《探频TPL3138模组AT使用说明》。功能指令协议在完成第二章产品定义后,可在平台通信协议流程里导出当前协议。

3.4.1 通用指令协议 ​

通用指令协议是模组自身支持的协议,对应《探频TPL3138模组AT使用说明》,接下来演示下通用协议,示例使用的是TPL3138模组,其他模组也相同或者类似。

先将蓝牙模组接上USB-TTL工具,然后USB插入电脑,PC端使用的串口助手和测试的指令也存放在文档里面。

**模组的串口参数:**奇偶检验位: 无,数据位:8 位,停止位: 1 位,默认波特率 9600。

硬件接线:USB-TTL工具的3V3 TX RX GND 分别对应模块的VCC RX TX GND ,串口需要交叉连接,使用邮票孔贴片的设计参考TPL3138模块规格书。

如下图

/img/3-4-1.jpg

<1>:AT指令使用测试 ​

打开串口助手,我们设置合适的波特率,默认9600,然后给模块掉电重新上电,会上电打印“+ATReaday”。

我们发送基础的AT测试指令“AT”,会返回"+OK” 。完成此步骤代表我们硬件接线以及测试环境搭建成功。

注意:串口助手测试务必勾选附加位回车换行,单片机测试附加位 16进制,0D 0A。

备注:使用串口助手是方便我们演示,实际产品指令实现还需要开发者在MCU内完成。

/img/3-4-1-1.png

<2>:蓝牙广播名称设置 ​

进入平台,产品定义->基础配置里面3.3.1,我们筋膜枪项目名称“TP-MG-10004550001”。其中后四位可以随机,用以区分不同设备。

我们发送AT指令:“AT+BLENAME=TP-MG-10004550001”, 串口收到更改成功回复:

“+BLENAME:TP-MG-10004550001 OK”

这样我们就已经更改名称成功了。

/img/3-4-1-2.png

<3>:推荐安卓手机第三方BLE蓝牙调试工具 ​

注意:这部分内容是碰到问题调试建议,和项目开发没有关系,可以不关注。

安卓手机建议使用NRF connect调试软件,可以在手机浏览器搜索软件名字下载,或者PC电脑上下载安装到手机。

安装好后图标如下:

/img/3-4-1-3.png

安卓手机安装好NRF connect调试软件后,进入主页搜索,搜索到我们设置的蓝牙广播名,点击Connect链接,PC串口助手显示连接成功指令,然后打开蓝牙的FFF0服务,点击FFF1右边的向下的三箭头图标,这样我们从PC串口助手发送数据,就可以看到手机调试软件上收到的信息。我们用HEX形式发送 AA BB CC DD 11 22,注意连接成功后发送数据不需要再添加附加位。

/img/3-4-1-32.png

/img/3-4-1-31.jpg

​

然后我们点击FFF2右边的向上箭头,写入一串数据,我们写12345678abcd,点击Send发送,这时候我们可以在PC串口调试助手看到我们APP下单发的数据。注意接收也要选择HEX形式,要不然显示的数据会变成乱码。这样我们上报数据和下发数据都验证成功了。

关于UUID说明: 我们模块用的是16位UUID, 服务的UUID为FFF0,上报数据Notify 为FFF1,写数据Write 为FFF2,不懂的也没关系,按照说明来使用就行。

/img/3-4-1-34.jpg

<4>:推荐苹果手机第三方BLE蓝牙调试工具 ​

注意:这部分内容是碰到问题调试建议,和项目开发没有关系,可以不关注。

苹果手机建议使用LightBlue调试软件,这个直接到苹果的应用商店下载即可。安装好后图标如下:

使用方法和安卓软件类似,

/img/3-4-1-4.jpg

苹果手机安装好LightBlue调试软件后,进入主页搜索,搜索到我们设置的蓝牙广播名,点击Connect链接,PC串口助手显示连接成功指令,点击FFF1选项,在点击里面的Subscribe ,使其变成Subscribe,老的版本写的是Notify, 同样的点击打开就行,这样我们从PC串口助手发送数据,就可以看到手机调试软件上收到的信息。我们用HEX形式发送 AA BB CC DD 11 22,注意连接成功后发送数据不需要再添加附加位。

/img/3-4-1-35.png

然后我们点击FFF2,再点击Write new value 写入一串数据,我们写12345678abcd,点击Send发送,这时候我们可以在PC串口调试助手看到我们APP下单发的数据。注意接收也要选择HEX形式,要不然显示的数据会变成乱码。这样我们上报数据和下发数据都验证成功了。

/img/3-4-1-36.jpg

3.4.2 功能协议 ​

第二章产品定义后,可在通信协议流程里导出当前协议,注意功能协议是针对当前产品定义的功能实现协议,需要在APP连接状态下来测试。

/img/19.png

导出协议后在第一个表格里是《协议格式》,第二个表格是《协议举例》,第三个表格是《功能协议》,也就是我们开发APP对应的协议。

<1>:《协议格式》 ​

这个是介绍协议总的格式,如下截图。

/img/21.png

了解了总的协议之后,先看下MCU主动给APP上报的协议:

正常做带APP产品的逻辑,设备会一直给APP上报当前的数据,因为设备也会有按键或者其他操作之后改变状态,需要一直上报同步状态给APP。比如:说筋膜枪用按键操作加了个挡位,APP当然也需要显示出来。MCU上报数据协议是将所有的功能组成一个包上报,就是说不管功能或者状态有没有改变,都是一个完整的数据包上报。

如下是MCU主动上报的协议,很简单,有效数据是从第五个字节开始。不明白可以看下一章节的《协议举例》

/img/22.png

接下来我们看下APP下发数据到设备的指令,下发数据独立的,仅发送改变的功能点,假如APP加大一个挡位,那就只发送当前挡位,不发送其他无关的数据,具体的指令码会在在《功能协议》里。

/img/23.png

<2>:《协议举例》 ​

这个是做的一个简单的说明,我用线将对应的数据拉在一起了,看起来会比较明了,先看下MCU主动上报的指令协议,具体的数据和数据位在第三个表格《功能协议》里面。

起始码:0X55 固定为0X55 。

指令码:0X01 上报数据的指令码固定为0X01。

功能码:0X00 上报数据的功能码固定为0X00。

数据长度: 我们数下截图DADA区域,大灯1个字节,电量1个字节,速度挡位1个字节,车辆速度2字节,共计5个字节,也就是0x05。

大灯设置数据:假设是开,所以是 0x01。

电量数据:假设是80%,也就是0x50。

速度挡位:假设是2档,也就是0x02。

车辆速度:假设60Km/h, 占用两个字节,也就是0x00, 0x3C, 小端在前,大端在后,变成0x3C,0x00。

校验码:指令码到数据内容所有字节按位异或生成,长度为 1 字节,我们列举下需要校验的收据。01 00 05 01 50 02 3C 00,得到校验数据为0x6B。(校验方法如下)

​ 校验码协议为XOR-8/BCC,我们在串口助手里面进入校验计算页面,复制数据内容进行计算,可以看到计算结果为34。校验协议 C 语言代码在协议格式最下面有写,客户直接放到单片机代码引用即可。

/img/3-4-2-2.png

结束码:0x56。

我们得到最终的完整数据包:55 01 00 05 01 50 02 3C 00 6B 56。

/img/24.png

再看下APP下发的协议举例,具体的数据和数据位在第三个表格《功能协议》里面,请下载后查看,这里我们看这个示例,我们将APP大灯打开。

起始码:0X55 固定为0X55 。

指令码:0X03 平台生成的协议会体现,在功能协议表格。

功能码:0X01 平台生成的协议会体现,在功能协议表格。

数据长度:0x01

大灯打开:0x01

校验码:指令码到数据内容所有字节按位异或生成,长度为 1 字节,我们列举下需要校验的收据。03 01 01 01 01 ,得到校验码为0x02。

结束码:0x56。

我们得到最终的完整数据包:55 03 01 01 01 02 56。

/img/25.png

<3>:《功能协议》 ​

我把我们示例筋膜枪功能协议导出,打开功能协议表格,如下截图:

上报数据是从第五个字节开始到第十二个字节。前四个字节是起始码,指令码,功能码,数据长度。最后我们加上效验码以及终止码就可以组成完整的数据包。

下发数据的指令码和功能码数据长度也都有列出,模式设置和启动停止给出了下发的具体数据,挡位设置的具体数据看APP设置的具体挡位下发。

/img/3-4-2-3.png