蓝牙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北京安防展,增强现实展区人员学 ...
随机推荐
- react,vue中的key有什么作用?(key的内部原理)
1.虚拟DOM中的key的作用: key是虚拟dom对象的标识,当状态中的数据发生变化时,vue会根据新数据生成新的虚拟dom,随后vue进行新的虚拟dom与旧的虚拟dom的差异比较. 2.比较规则 ...
- Java 进阶P-7.4+P-7.5
JTable 用JTbale类可以以表格的形式显示和编辑数据. JTable类的对象并不存储数据,他只是数据的表现. 表格是 Swing 新增加的组件,主要功能是把数据以二维表格的形式显示出来,并且允 ...
- Collection集合常用功能-Iterator接口介绍
Collection集合常用功能 Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合.方法如下︰ ...
- Jvm--MinorGC过程
第一次GC: 在不断创建对象的过程中,当Eden区域被占满,此时会开始做Young GC也叫Minor GC 1)第一次GC时Survivous中S0区和S1区都为空,将其中一个作为To Surviv ...
- Appium资源汇总
Appium资源汇总 created: 2022-8-4 软件 网址 说明 https://github.com/appium/appium-inspector/releases 检查器的下载路径 h ...
- 微信小程序数字转中文wxs
场景: 传入数字,转换成天数,比如:index = 1 转换后则为 一,在页面中的应用就是<view>第{{index}}天</view>,转为第几天. <view> ...
- pycharm用不了pip
环境: win10,安装有python2和python3,主要使用python3,所有环境变量配合的也是python3,之前一直用的好好的,pip可以在命令行和pycharm中正常使用. pychar ...
- jmeter常见错误(持续更新)
1. jmeter java.net.NoRouteToHostException: Cannot assign requested address (Address not available) 压 ...
- Gear_Of_War#1
Gear_Of_War#1 目录 Gear_Of_War#1 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.3 SMB服务安全分析 2 GetShell 2.1 ssh登录marcus用户 ...
- 代码随想录算法训练营day22 | leetcode 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
LeetCode 235. 二叉搜索树的最近公共祖先 分析1.0 二叉搜索树根节点元素值大小介于子树之间,所以只要找到第一个介于他俩之间的节点就行 class Solution { public T ...