目录

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. 浏览器刷新时候不删除信息,关闭后删除用户信息处理办法,浏览器监听刷新以及删除事件、cookie、session、sessionStorage、localStorage区别

    首先我们可以了解到:sessionStorage 不在不同的浏览器窗口中共享,即使是同一个页面: localStorage 和 cookie 在所有同源窗口是共享的 那么我们可以根据用户不同需求来进行 ...

  2. NAPT网络结构下TCP/UDP/ICMP访问外网原理思考

    背景 作为程序员,应该都听说过NAT(Network Address Transfer,网络地址转换)这一技术名词,并或多或少大概知道其原理与作用--NAT是用于解决IPv4地址不够用,保证我们能够在 ...

  3. P6327 区间加区间sin和 题解

    P6327 区间加区间sin和 题解 题目描述 给出一个长度为 \(n\) 的整数序列 \(a_1,a_2,\ldots,a_n\),进行 \(m\) 次操作,操作分为两类. 操作 \(1\):给出 ...

  4. 【分析笔记】全志平台 gpio-keys 驱动应用和 stack crash 解决

    内核配置 内核版本:Linux version 4.9.56 make ARCH=arm64 menuconfig Device Drivers ---> Input device suppor ...

  5. Linux几种网络模式介绍

    简单介绍Linux几种网络模式 ​ 虚拟化层次: ​ 打开vmware虚拟机,我们可以在选项栏的"编辑"下的"虚拟网络编辑器"中看到VMnet0(桥接模式).V ...

  6. KingbaseES恢复被删除数据

    KingbaseES恢复被删除数据 生产环境操作请先备份整个data目录或cp 当前数据目录/home/kingbase/pg_data到新的data目录,然后在备份的data目录进行恢复被删除数据操 ...

  7. 算法学习笔记(17): 快速傅里叶变换(FFT)

    快速傅里叶变换(FFT) 有趣啊,都已经到NOI的难度了,救命 首先,我们先讲述一下前置知识.已经明白的读者请移步后文 虚数 定义:\(z = a + bi\),其中 \(a, b \in R\ \ ...

  8. C-07\字符串的输入输出及常用操作函数

    一.算法优化: 减少分支优化 // 求绝对值 int MyAbs(int n) { if (n < 0) { n = ~n + 1; } return n; } // 优化 int MyAbs( ...

  9. 亲测有效! Bypass V1.15.5 12306分流抢票助手 for Windows

    亲测有效! Bypass V1.15.5 12306分流抢票助手 for Windows 12306Bypass也就是12306分流抢票软件,是一款全程自动抢票,自动识别验证码,多线程秒单.稳定捡漏, ...

  10. 我Alfred Workflow工具集合

    MyToolBox 我常用的工具箱,Alfred Workflow工具集合满足日常开发使用场景.不断完善和更新Alfred Workflow. 目前包含一下功能. 时间戳转换 unicode转中文 随 ...