目录

蓝牙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组网实战(智能家居应用)的更多相关文章

  1. 超低功耗、无需网关,CSR智能家居蓝牙控制照明方案

    本文转载至 http://blog.csdn.net/justinjing0612/article/details/39250997 [导读] iOS 8 Beta2终于让智能家居HomeKit功能露 ...

  2. 蓝牙5.0芯片NRF52810和NRF52832可进行mesh组网

    提供智能化mesh照明解决方案,在现有传统灯具的基础上,插入NRF52832/52810的照明Mesh模块,可以迅速升级现有的传统灯具,配合手机APP和服务器系统,使每一盏灯成为物联网的一个智能节点, ...

  3. 智能家居CC2530功率放大组网RFX2401C和AT2401C的区别

    两者最大的区别就是RFX2401C的增益为12dbmAT2401C的增益为14dbm这就会导致AT2401C的功耗会比RFX2401C大一点点,但距离也会相对更远,并且增加了EDS防静电等级,多出2个 ...

  4. android完整智能家居、备忘录、蓝牙配对、3D动画库、购物车页面、版本更新自动安装等源码

    Android精选源码 app 版本更新.下载完毕自动自动安装 android指针式分数仪表盘 ANdroid蓝牙设备搜索.配对 Android 图片水印框架,支持隐形数字水印 android3D旋转 ...

  5. zigbee智能家居基础扫盲

    zigbee Zigbee是基于IEEE802.15.4标准的低功耗个域网协议.根据这个协议规定的技术是一种短距离.低功耗的无线通信技术.这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和&qu ...

  6. [蓝牙前沿应用] 照明即平台 —— 通过蓝牙增强服务提高照明投资回报率(蓝牙MESH、定位AoA、AoD)

      1.照明即平台(LAAP) 随着照明设施向LED转型,他们也在利用类似于蓝牙MESH的技术,创建一个可连接的照明平台,作为他们建筑的中枢神经系统.这些系统除了提供先进的照明控制,还建立了一个增强版 ...

  7. 戳破ZigBee技术智能家居的谎言!

    戳破ZigBee技术智能家居的谎言 一.ZigBee介绍 简介 在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷.对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂, ...

  8. 智能家居系统 Home Assistant 系列 --介绍篇

    一. HomeAssistant 是什么? HomeAssistant是构建智慧空间的神器.是一个成熟完整的基于 Python 的智能家居系统,设备支持度高,支持自动化(Automation).群组化 ...

  9. 迅为4412开发平台Zigbee模块在物联网智能家居中的应用

      物联网智能家居的发展物联网随着互联网的发展,可以通过互联网实现物和物的互联,就有了物联网的概念.传统家居电器 有了物联网之后,在家居电器范围中,就是通过物联网技术将家中的各种设备连接到一起,家居中 ...

  10. NB大了,增强现实走进安防行业了!竟然还有智能家居的规划!

     增强现实系统故事性功能解说 作者:李欢   工号:2288  电话:18938902295 邮箱:lihuan@gosuncn.com 前言: 本文仅适用于2014北京安防展,增强现实展区人员学 ...

随机推荐

  1. (15)go-micro微服务main.go开发

    目录 一 导包 二 配置中心 三 注册中心 四 zap日志初始化 五 初始化Mysql数据库 六 初始化Redis连接 七 注册服务 八 初始化服务 九 注册 handle 十 启动服务 十一 mai ...

  2. Windows喝水记录工具v2.0

    Windows喝水记录工具v2.0 作者以前基本不喝水,后面体检出来身体出现了一些问题(肾结晶什么的),多喝水可以减轻甚至痊愈,由于没有喝水的习惯怕喝多或者喝少,所以做了这个桌面小工具,喝一杯记录一下 ...

  3. shell基础命令知识持续更新

    查看系统支持的shell cat /etc/shells [root@iZwz9almo8p830btq7voo9Z shellLearning]# cat /etc/shells /bin/sh / ...

  4. avalonia实现自定义小弹窗

    对于使用avalonia的时候某些功能需要到一些提示,比如异常或者成功都需要对用户进行提示,所以需要单独实现弹窗功能,并且可以自定义内部组件,这一期将手动实现一个简单的小弹窗,并且很容易自定义 创建项 ...

  5. [Vue warn]: Invalid prop: type check failed for prop "model". Expected Object, got String with value ""

    问题描述: [Vue warn]: Invalid prop: type check failed for prop "model". Expected Object, got S ...

  6. ubuntu apt 安装最新版 nodejs

    使用最新版本, 当前是 16.x 的版本. 这里我使用了 LTS 版本. curl -fsSL https://deb.nodesource.com/setup_current.x | sudo -E ...

  7. Spring(IOC实际开发使用、底层原理)

    实际开发的使用 实际开发中会将程序分为3层: Controller Servlet Repository(DAO) 关系Controller 调运Servlet 调运 Repository(DAO) ...

  8. ASP.NET Core知识之RabbitMQ组件使用(二)

      近期,业务调整,需要内网读取数据后存入到外网,同时,其他服务器也需要读取数据,于是我又盯上了RabbitMQ.在展开业务代码前,先看下RabbitMQ整体架构,可以看到Exchange和队列是多对 ...

  9. 基于C++的OpenGL 07 之颜色

    1. 引言 本文基于C++语言,描述OpenGL的颜色 前置知识可参考: 基于C++的OpenGL 06 之摄像机 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描述 ...

  10. Postgresql动态共享内存类型

    一.简介 linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型. 在Postgresql中可以使用dy ...