首页 > 其他分享 >蓝牙mesh组网实战(智能家居应用)

蓝牙mesh组网实战(智能家居应用)

时间:2022-11-25 19:44:32浏览次数:66  
标签:字节 蓝牙 智能家居 mesh 配网 指令 组网 UUID

蓝牙mesh组网目前存在有入门门槛高的问题,比如,嵌入式工程师需要考虑到标准mesh模型的兼容,app开发工程师需要了解mesh协议栈才能直接走mesh与芯片通信。而沁恒官方提供的透传模型简洁易用,单则消息负载可达221字节,可选应答,自动分包;手机配网方案使用更常见的BLE协议与芯片交互配网信息而非mesh直连,方便用户参考官方提供的app进行开发,帮助工程师快速入门,以享受蓝牙mesh提供的可靠性、安全性、功能性等特性。

透传模型的使用可以参考博客:蓝牙mesh组网实践(厂商透传模型介绍) - JayWell - 博客园 (cnblogs.com)

在沁恒蓝牙系列芯片中,蓝牙mesh与BLE一样是跑在TMOS系统上的,TMOS系统的入门见博客:WCH TMOS用法详解 - debugdabiaoge - 博客园 (cnblogs.com)

 

本文主要介绍智能家居的应用。沁恒官网提供的EVT中已经提供了透传模型,以其为载体可以实现自定义指令的收发。

需要解决的问题主要有二。

一是指令的设计。自定义指令,自由度很高,可以参考BLE中“长度+类型+值”的方案,其中“长度”指“类型+值”占用的字节数。一般指令较为简洁,“长度”本身就给一个字节;“类型”设计为“值”对应的功能;“值”就包含了具体的指令。比如说给RGB小灯发条指令给它设置PWM-亮度数值,指令可以设置为0x0504112233,0x05表示其后的字节长度,0x04表示要操作的功能是RGB亮度设置,0x112233表示RGB三色分别设置PWM占空比为17%、34%、51%。

二是目标地址的明确。若使用沁恒提供的手机配网方案,手机配网时能指定节点名称和节点地址,意味着目标节点能够明确,这样在appDemo基础上增添修改,对mesh网络的精确记录和管理还是不难实现的。但若使用配网器配网方案,配网连接的建立是无序的,取决于配网器先扫描到哪个未配网设备的信标。如果某设备本次配网被分配到0x0001网络地址,下次配网也可能被分配到0x0002网络地址,0x0001被其他设备先行占用;再换句话说,在A智能家居应用中地址0x0001可能对应智能插座,在B智能家居应用中地址0x0001又可能对应智能灯控。这样一来想给某个固定功能的设备比如说某台智能风扇发消息,单纯依靠网络地址是不够精确的。

针对问题二的配网器方案,配网信标中包含有16个字节的UUID可以利用起来。比如说兼容天猫精灵的节点代码中,UUID由天猫精灵的三元组派生,生成的UUID帮助天猫精灵进行设备识别的。详见EVT天猫精灵相关工程的app_vendor_model.c中的uuid_generate函数。

而笔者的测试没有涉及很多功能,编写的指令也很简单,就只测试了GPIO控制和PWM控制,就只占用两个字节,一个字节(对应cmd_transfer_srv.h中的宏UUID_6)表示节点所在设备的类别和序号,另一个字节(对应cmd_transfer_srv.h中的宏UUID_7)按位表示节点分别支持哪些功能。比如说编号高四位为5表示灯控,3号小灯支持开关(第0位)和亮度调节(第1位),那么在节点设备的代码中,修改宏UUID_6为0x53,修改宏UUID_7为0x03即可。UUID的0~5共6个字节可以默认使用MAC地址,或者自行赋予其特殊意义均可。

在笔者的测试中,中心节点分配网络地址仍然是随机的,但增加了一个数组,保存已配网设备的UUID_6和UUID_7。发布消息时,函数接口形参为UUID_6,查找数组来匹配mesh的网络地址进行发送,这样就能够让用户定向向某设备发送某功能的指令。

demo网盘链接见下。

链接:https://pan.baidu.com/s/1M5zy1lXBVOWoXAUbx-WaGA?pwd=n4lt
提取码:n4lt

标签:字节,蓝牙,智能家居,mesh,配网,指令,组网,UUID
From: https://www.cnblogs.com/JayWellsBlog/p/16851250.html

相关文章