目录

CH582的官方EVT中,除了代理节点例程和天猫精灵例程外都提供了厂商定义的透传模型。

模型位于蓝牙mesh网络协议中的最上层,负责标准化用户应用场景的实例,比如说开关模型、亮度模型、风速模型。由于蓝牙mesh网络中所有数据都经由广播承载层传输,根据网络地址来区分节点,判断数据来源,也就缺少了管道、路由、端口等的区分数据种类、路径的工具和手段,故需要模型来对数据进行判别。对于模型来说,举个例子,一个智能小灯,只支持打开或者关闭,程序中只有一个开关模型,这时候收到一个指令让它调节色温,就会出错;要想小灯能够识别该指令,就需要添加色温模型来处理指令;换言之,开关模型规定了开关小灯的指令应该是什么样的,色温模型规定了调节色温的指令应该是什么样的。标准模型可以参考天猫精灵例程中的通用模型。

对于请求、设置服务端状态的一边,称之为客户端;对于存储模型状态以及收到消息时的应对方法的一边,称之为服务端。在配网器配网方式中,配网器作为网络的“中心节点”,包含的模型为客户端;其他节点除了代理节点没有包含透传模型外,都使用服务端模型。

客户端透传模数据发送函数,一个有应答机制,函数为:int  vendor_message_cli_write(struct send_param *param, uint8_t *pData, uint16_t len);

一个无应答机制,函数为:int  vendor_message_cli_send_trans(struct send_param *param, uint8_t *pData, uint16_t len),两者只有有无应答的区别,参数相同。

*pData指向需要发送的数组,len是发送的数组字节数长度。

其中最关键是第一个参数——发送参数结构体↓

app_idx:16位的AppKey的索引,用于选择16字节的AppKey。配网器可以存储多个AppKey并且需要维护模型与AppKey的绑定关系,配网器在配网时会将模型与AppKey绑定,每个模型可以绑定一个或多个AppKey(默认每个模型绑定一个AppKey,可在app_mesh_confg.h头文件中更改,最多三个)。绑定同一个的AppKey后,模型之间才可通信。对于配网器例程,这里的self_prov_app_idx指向的是配网时透传模型绑定的AppKey,用户若添加了更多模型和更多AppKey,可以直接赋值比如说0x0001来指向对应的AppKey。

addr:配网过程中,配网器会自动存储节点的网络地址在一个结构体数组中,可以将绝对地址0x0001改成app_nodes[n].node_addr来代入第n个节点的网络地址。默认0x0001地址为配网器地址。

trans_cnt:对于需要应答的消息,每次发送都会等待应答消息一定时长(默认2秒),超时便会重传;等待时间内收到应答,则不会重传。对于无应答消息,由于不知道接收方是否收到了消息,都会按本参数发送相应次数。0x03表示总计传输次数为3次,0x01即为只传一次,不重传。应答超时时长可在 app_vendor_model_cli.c 中的 cli_msg_timeout 静态变量处修改。

period:重传间隔,数据量较多、网络内同一时刻的消息数较多,建议重传间隔加大。

rand:随机延迟,图中为0即没有加延迟。可以使用(tmos_rand()%200)来设置一个0~199范围内的随机数。这个值为1600时会延迟1s发送,设置0~199则延迟不超过125ms。

tid:用于应用层判断消息是否重复,是回复还是丢弃。比如说配网器往某个节点发送一个无应答消息,tid标号为0x11(3次重传的tid均为0x11);接下来再往某个节点发送一个有应答消息,tid标号即为0x12。客户端(_cli)使用标号0~127,服务端(_srv)使用标号128~191。

send_ttl:在mesh协议中占7位。默认值为255(不是最大值,是指使用系统默认TTL值),用户指定的话最大值为127(0x7F)。可以根据预计消息转发的跳数来设置最佳TTL值以减小广播承载层压力。

类似的,服务端透传模数据发送函数,一个有应答机制,函数为:int  vendor_message_srv_indicate(struct send_param *param, uint8_t *pData, uint16_t len);

一个无应答机制,函数为:int  vendor_message_srv_send_trans(struct send_param *param, uint8_t *pData, uint16_t len),两者只有有无应答的区别,参数相同。

发送参数与客户端一致,参考上面的结构体。

上面展示了如何在用户层面发出数据,接下来展示如何显示接收到的数据,这样以来就能将透传模型最基本地用起来了。

在app.c中有如下函数↓。官方例程中打印了部分数据,没有将透传内容全部打印出来。可以在下图的函数中添加相应代码来打印全部数据。

同样可以在这个函数接下来的判断中作相应处理↓

小贴士:①使用CH582官方提供的透传模型,不一定要是客户端与服务端互相发消息,因为该模型主要是透传数据使用,不存在对于模型状态的存储和请求(比如说智能灯的当前状态是开,收到指令后下一个状态是关,状态切换时需要广播一个消息表示状态切换成功),客户端给客户端发消息也可。

②CH582是单线程单片机,不能同时处理多个消息,也不能同时处理收和发,故不要让多个节点同时给同一个节点发消息,可以在发包节点调整为不同的重发间隔,或者加上随机延迟参数,否则会造成严重丢包。

③若接收的数据较长,全部打印出来可能会影响丢包率,尤其是对于作为需要管理多个节点的“中心节点”的配网器来说。

蓝牙mesh组网实践(厂商透传模型介绍)的更多相关文章

  1. 关于蓝牙Mesh您必须知道的七件事

    蓝牙技术联盟于7月19日正式宣布,蓝牙(Bluetooth)技术开始全面支持Mesh网状网络.全新的Mesh功能提供设备间多对多传输,并特别提高构建大范围网络覆盖的通信能力,适用于楼宇自动化.无线传感 ...

  2. 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环

    一.预言 要实现一个智能篮球场套件,需要设计一个佩戴在篮球运动员手臂上的可以检测投篮.记步的手环,以及一套可以根据RSSI定位运动员的蓝牙定位装置.下面是大致需要的步骤: 首先,需要用CC2541透传 ...

  3. 低功耗蓝牙(BLE)透传模块 ——RF-BM-S01(BQB认证)

    本文来源深圳信驰达科技www.szrfstar.com,技术交流群336720020. 低功耗蓝牙(BLE)透传模块 ——RF-BM-S01(BQB认证) 深圳市信驰达科技有限公司 2013年3月18 ...

  4. 手把手教你开发BLE数据透传应用程序

    如何开发BLE数据透传应用程序?什么是BLE service和characteristic?如何开发自己的service和characteristic?如何区分ATT和GATT?有没有什么工具可以对B ...

  5. SIG蓝牙mesh笔记3_网络结构

    目录 3. Mesh Networking 3.1 Bearers 承载层 3.2 Network Layer 网络层 3.2.3 Address validity 地址有效性 3.2.4 Netwo ...

  6. SIG蓝牙mesh笔记2_mesh组成

    目录 SIG 蓝牙 mesh 组成 mesh网络概述 网络和子网 设备和节点 devices & nodes 入网 mesh中的几个概念 智能插座例子 SIG 蓝牙 mesh 组成 mesh网 ...

  7. [蓝牙前沿应用] 照明即平台 —— 通过蓝牙增强服务提高照明投资回报率(蓝牙MESH、定位AoA、AoD)

      1.照明即平台(LAAP) 随着照明设施向LED转型,他们也在利用类似于蓝牙MESH的技术,创建一个可连接的照明平台,作为他们建筑的中枢神经系统.这些系统除了提供先进的照明控制,还建立了一个增强版 ...

  8. Dubbo透传traceId/logid的一种思路

    前言: 随着dubbo的开源, 以及成为apache顶级项目. dubbo越来越受到国内java developer欢迎, 甚至成为服务化自治的首选方案. 随着微服务的流行, 如何跟踪整个调用链, 成 ...

  9. 蓝牙mesh介绍

    了解一下关于蓝牙Mesh的知识. 蓝牙mesh网络使用,并且依赖于低功耗蓝牙(BLE).低功耗蓝牙技术是蓝牙mesh使用的无线通信协议栈. 蓝牙BR / EDR能够实现一台设备到另一台设备的连接和通信 ...

  10. 常见无线组网分析(NB-IOT组网和Mesh组网)

      NB-IOT LoRa Zigbee WIFI 蓝牙 组网方式 基于现有蜂窝组网 基于LoRa网关 基于Zigbee网关 基于无线路由器 居于蓝牙Mesh的网关 网络部署方式 节点 节点 + 网关 ...

随机推荐

  1. element-ui + vue ,ant-design + vue , Angular + ZORRO 实现表格自动横纵向合并单元格,并自动根据单元格数据进行添加样式

    element-ui + vue ,ant-design + vue , Angular + ZORRO 实现表格自动横纵向合并单元格,并自动根据单元格数据进行添加样式 本文重点写 element-u ...

  2. C# 10 Lambda 语法的改进

    C# 10 包括了对 Lambda 表达式的处理方式的许多改进: Lambda 表达式可以具有自然类型,这使编译器可从 Lambda 表达式或方法组推断委托类型. 如果编译器无法推断返回类型,Lamb ...

  3. day13-实现Spring底层机制-03

    实现Spring底层机制-03 7.实现任务阶段5 7.1分析 阶段5目标:bean后置处理器的实现 7.2代码实现 新增: 1.创建 InitializingBean 接口,实现该接口的 Bean ...

  4. Properties集合中的方法load-缓冲流的原理

    Properties集合中的方法load 参数:InputStream instream:字节输入流,不能读取含有中文的键值对Reader reader:字符输入流,能读取含有中文的键值对使用步骤:1 ...

  5. 新开一个系列,c++刷题集

    点开我的博客,然后选择 c++ csp 备考 标签进行筛选即可 工具采用devcpp 5.11 github地址:https://github.com/Dou-fugan/Basic-algorith ...

  6. icofx把图片转为ico图标、icofx 教程

    免费的图标编辑工具 icofx的介绍 IcoFX 是一款免费的图标编辑工具,让您轻松创建 Windows XP 和 Windows Vista 图标.在编辑区您可以轻松的预览.保存.更改您的图标.您可 ...

  7. 逻辑运算符、成员运算符、身份运算符、流程控制、if判断、while循环

    目录 一.逻辑运算符 二.成员运算符 三.身份运算符 四.流程控制 五.分支结构 (1).单if判断 (2).双分支结构 (3).多分支结构 (4).if的嵌套使用 六.循环结构while (1).w ...

  8. vulnhub靶场之WORST WESTERN HOTEL: 1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:Worst Western Hotel: 1,下载地址:https://download.vulnhub.com/worstwesternhot ...

  9. Vite 项目添加 Sass/Scss 并配置全局样式

    (1)在 Vite 项目里,只需要安装 sass: npm i -D sass (2)Sass 的全局变量,需要在vite.config.ts配置一项: css: { preprocessorOpti ...

  10. Postgresql动态共享内存类型

    一.简介 linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型. 在Postgresql中可以使用dy ...