蓝牙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北京安防展,增强现实展区人员学 ...
随机推荐
- 【Basic Knowledge】Self-Attention Generative Adversarial Networks
Note 这是一篇将Self-Attention应用到GAN中的paper,Self-Attention模块是卷积模块的补充,能够有助于建模跨图像区域的长范围.多层次依赖关系.文中主要提到4点: ...
- 前端向后端发送请求(FormData),你们不要吐槽我,有的时候我也不想写注释
JSON对象转成formData对象,formData对象转成JSON 在向后端请求时,如果上传的数据里存在file文件对象,需要用到表单提交,这时候我们需要将JSON对象,转成formData对象, ...
- 洛谷P1365 期望dp
题目描述 一个o/x序列的得分为其中每个o的极大连续子段长度的平方和,比如ooxxxxooooxxx,分数就是 \(2 \times 2 + 4 \times 4 = 4 +16=20.\) 现给定一 ...
- Nginx04 反向代理和负载均衡
1 反向代理介绍 https://www.cnblogs.com/jthr/p/16827214.html 2 负载均衡介绍 https://www.cnblogs.com/jthr/p/168273 ...
- 非线性优化-NLopt
通过 对 一个 数学 模型 的求解 来介绍 NLopt的使用方法 数学模型: 这个是目标函数 求满足 条件的情况下 x2的开平方最小 边界约束 非线性不等式约束如下 有两个参数 x1 和 x2 ,其中 ...
- imax6开发版_挂载NFS文件系统
挂载:mount -o vers=4 192.168.30.108:/home/penuel/linux_imax6/workdir /home/root/workdir 取消挂载:umount /h ...
- Requset02
其他功能: 1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数 1. String getParameter(String name):根据参数名称获取参数值 ...
- JZOJ 4289.Mancity
\(Mancity\) \(Description\) \(Input\) \(Output\) \(Sample Input\) 8 3 6 1 2 1 1 3 2 4 2 5 1 6 1 6 2 ...
- 英国学者在真实世界早期RA队列研究中发现较高比例的临床缓解患者仍存在能量多普勒超声活性
标签: 类风湿关节炎; 目标治疗策略; 能量多普勒活性; 预测因子 英国学者在真实世界早期RA队列研究中发现较高比例的临床缓解患者仍存在能量多普勒超声活性 电邮发布日期:2016年4月6日 本研究的重 ...
- git添加多账户(附带tortoiseGit多账号使用)
近期想在公司电脑上开发自己项目,但是电脑上已经配置过一个gitlab账户了,现在想要把自己的git账户也加进来,方便代码控制. 因为git用的比较少,还不太熟悉,都是网上找资料,边看边学边做,如有不对 ...