目录

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. Linux基础介绍

    Linux基础介绍 一.运维的本质 运维:运行维护应用程序 岗位需求:自动化运维.DBA.docker+K8s 运维的本质: 1.尽可能保证应用程序24小时不间断运行 2.尽可能保证数据的安全 3.尽 ...

  2. 【随笔记】FRAM 铁电随机存储器(MB85RC04VPNF)

    参考资料 器件规格书:https://atta.szlcsc.com/upload/public/pdf/source/20131104/1457706659695.pdf I2C总线规范:https ...

  3. 【学习笔记】一种特别有意思的 RTOS 任务切换方法

    一.介绍说明 目前常见流行的 RTOS 实现方式,如 FreeRTOS.uCosII.RT-Thread 等等,它们的内部的任务切换实现原理都差不多,都是通过借助汇编,根据不同的情况读写 CPU 寄存 ...

  4. KEIL5、STM32CubeMX、STM32CubeIDE 下载、安装

    一.资源下载 Keil5下载链接: https://www.keil.com/download/product/ STM32 标准库芯片包下载链接: https://www.keil.com/dd2/ ...

  5. c++ 递推算法

    各位大佬不妨先点个赞再看文章! 递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用于数值计算的一个重要算法.这种算法特点是:一个问题的求解需一系列的计算,在已知条件和所求问题之 ...

  6. 华为云MRS支持lakeformation能力,打造一站式湖仓,释放数据价值

    摘要:对云端用户而言,业务价值发现是最重要的,华为MRS支持LakeFormation后,成功降低了数据应用的成本,帮助客户落地"存"与"算"的管理,加快推进了 ...

  7. python自动发布

    import os import paramiko baseconfig = { "ip": "121.4.38.187", "port": ...

  8. 0源码基础学习Spring源码系列(一)——Bean注入流程

    作者:京东科技 韩国凯 通过本文,读者可以0源码基础的初步学习spring源码,并能够举一反三从此进入源码世界的大米! 由于是第一次阅读源码,文章之中难免存在一些问题,还望包涵指正! 一. @Auto ...

  9. NETAPP 设备 C模式开关机顺序

    设备正常开关机顺序开机顺序: 1.开启所有磁盘柜的电源,大概20秒后再开启存储控制器: 2.开启接有FAS2750存储的以太网交换机或者光纤交换机: 3.开启有挂载FAS2750存储空间的服务器或者磁 ...

  10. 推荐一个分布式单点登录框架XXL-SSO!

    有关单点登录(SSO)之前有写过两篇文章 一文读懂 JWT! 看完这篇不能再说不懂SSO原理了! 如果说XXL-JOB你可能并不陌生,它是非常火爆的一个分布式任务调度平台.但其实在该作者还有一个非常优 ...