蓝牙mesh组网实战(智能家居应用)
蓝牙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)按位表示节点分别支持哪些功能。比如说编号高四位为0表示灯控,3号小灯支持开关(第0位)和亮度调节(第1位),那么在节点设备的代码中,修改宏UUID_6为0x03,修改宏UUID_7为0x03即可。UUID的0~5共6个字节可以默认使用MAC地址,或者自行赋予其特殊意义均可。
在笔者的测试中,中心节点分配网络地址仍然是随机的,但增加了一个数组,保存已配网设备的UUID_6和UUID_7。发布消息时,函数接口形参为UUID_6,查找数组来匹配mesh的网络地址进行发送,这样就能够让用户定向向某设备发送某功能的指令。中心节点使用的是带有BLE从机功能的例程,这样使用BLE调试助手可以给中心节点发指令,中心节点再查表匹配网络地址,将指令转发给目标节点。这样在用户看来,指令就由四个部分,目标设备编号+长度+类型+值。比如说上述调节RGB的指令0x0504112233,在这之前再加上目标设备编号比如说应该发往3号小灯,在BLE调试助手中输入的指令就成了0x030504112233。
demo网盘链接见下。
链接:https://pan.baidu.com/s/1M5zy1lXBVOWoXAUbx-WaGA?pwd=n4lt
提取码:n4lt
蓝牙mesh组网实战(智能家居应用)的更多相关文章
- 超低功耗、无需网关,CSR智能家居蓝牙控制照明方案
本文转载至 http://blog.csdn.net/justinjing0612/article/details/39250997 [导读] iOS 8 Beta2终于让智能家居HomeKit功能露 ...
- 蓝牙5.0芯片NRF52810和NRF52832可进行mesh组网
提供智能化mesh照明解决方案,在现有传统灯具的基础上,插入NRF52832/52810的照明Mesh模块,可以迅速升级现有的传统灯具,配合手机APP和服务器系统,使每一盏灯成为物联网的一个智能节点, ...
- 智能家居CC2530功率放大组网RFX2401C和AT2401C的区别
两者最大的区别就是RFX2401C的增益为12dbmAT2401C的增益为14dbm这就会导致AT2401C的功耗会比RFX2401C大一点点,但距离也会相对更远,并且增加了EDS防静电等级,多出2个 ...
- android完整智能家居、备忘录、蓝牙配对、3D动画库、购物车页面、版本更新自动安装等源码
Android精选源码 app 版本更新.下载完毕自动自动安装 android指针式分数仪表盘 ANdroid蓝牙设备搜索.配对 Android 图片水印框架,支持隐形数字水印 android3D旋转 ...
- zigbee智能家居基础扫盲
zigbee Zigbee是基于IEEE802.15.4标准的低功耗个域网协议.根据这个协议规定的技术是一种短距离.低功耗的无线通信技术.这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和&qu ...
- [蓝牙前沿应用] 照明即平台 —— 通过蓝牙增强服务提高照明投资回报率(蓝牙MESH、定位AoA、AoD)
1.照明即平台(LAAP) 随着照明设施向LED转型,他们也在利用类似于蓝牙MESH的技术,创建一个可连接的照明平台,作为他们建筑的中枢神经系统.这些系统除了提供先进的照明控制,还建立了一个增强版 ...
- 戳破ZigBee技术智能家居的谎言!
戳破ZigBee技术智能家居的谎言 一.ZigBee介绍 简介 在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷.对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂, ...
- 智能家居系统 Home Assistant 系列 --介绍篇
一. HomeAssistant 是什么? HomeAssistant是构建智慧空间的神器.是一个成熟完整的基于 Python 的智能家居系统,设备支持度高,支持自动化(Automation).群组化 ...
- 迅为4412开发平台Zigbee模块在物联网智能家居中的应用
物联网智能家居的发展物联网随着互联网的发展,可以通过互联网实现物和物的互联,就有了物联网的概念.传统家居电器 有了物联网之后,在家居电器范围中,就是通过物联网技术将家中的各种设备连接到一起,家居中 ...
- NB大了,增强现实走进安防行业了!竟然还有智能家居的规划!
增强现实系统故事性功能解说 作者:李欢 工号:2288 电话:18938902295 邮箱:lihuan@gosuncn.com 前言: 本文仅适用于2014北京安防展,增强现实展区人员学 ...
随机推荐
- Zotero自定义引文样式
注意 在实际使用中发现还是有许多与要求不同的地方,之后会再次进行修改,特此记录 -----2022/11/28 16:57 目标格式: 期刊:[序号]作者.题名[J].刊名,出版年份,卷号 ( 期号 ...
- _Bool類型
_Bool類型:布爾變量,其值只有1(真)和0(假).是C語言中的變量名,C語言中所有的非0數字都被視爲真. 給布爾變量取一個能表示真或假值的變量名是一種常見的做法. 1 /*boolean.c--使 ...
- day12-实现Spring底层机制-02
实现Spring底层机制-02 3.实现任务阶段1 3.1知识拓展-类加载器 Java的类加载器有三种: Bootstrap类加载器 ----- 对应路径 jre/lib Ext类加载器 ----- ...
- Java 进阶P-11+P-12
文本流 在流上建立文本处理 PrintWriter pw = new PrintWriter()( new BufferedWriter( new Out put StreamWriter( new ...
- 11月18日内容总结——同步、异步与阻塞、非阻塞的概念、创建进程的多种方式及multiprocessing模块、进程间的数据隔离和IPC机制(队列)、生产者消费者模型、守护进程、僵尸进程、孤儿进程和多进程错乱问题
目录 一.同步与异步 同步 异步 二.阻塞与非阻塞 阻塞 非阻塞 三.综合使用 1.同步阻塞: 2.同步非阻塞: 3.异步阻塞: 4.异步非阻塞: 四.创建进程的多种方式 进程的创建 multipro ...
- 【学习笔记】Http请求方法总结
Http常用请求方法对比 请求方法 常见参数传递方式 是否幂等 说明 API举例 GET URL,注意:Http协议对URL长度没有限制,所谓的限制是浏览器和处理服务器的 幂等 用于查询 批量查询:/ ...
- 【学习日志】MongoDB为什么选择B树,而MySQL选择B+树实现索引
先说B树和B+树的区别 B树:非叶子节点也存储数据 B+树:只有叶子节点存储数据,且所有叶子节点通过指针相连接. 为什么MongoDB选择B树而,MySQL选择B+树呢?两种数据结构的区别摆在上面了, ...
- Solon2 开发之容器,八、动态代理的本质
在 Java 里动态代理,主要分:接口动态代理 和 类动态代理.因为它的代理类都是动态创建的,所以名字里会带上"动态". 官网的有些地方叫"代理",也有些地方叫 ...
- mysql19-锁
1.什么是锁 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性. ...
- cnpm : 无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。所在位置 行:1 字符: 1
出现问题原因: 使用vscode终端powershell控制台查看cnpm版本或者运行cnpm的相关命令时提示如标题错误(cmd控制台提示:'cnpm' 不是内部或外部命令,也不是可运行的程序或批处理 ...