LV04-天猫蓝牙Mesh项目-02-进阶开发-08-手机连接Mesh节点控制
本文主要是天猫蓝牙Mesh项目——进阶开发 手机连接Mesh节点控制 的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows版本 | windows11 |
Ubuntu版本 | Ubuntu22.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
终端软件 | MobaXterm(Professional Edition v23.0 Build 5042 (license)) |
点击查看本文参考资料
分类 | 网址 | 说明 |
官方网站 | 阿里云 | 阿里云官网主页 |
阿里生活物联平台 | 生活物联网平台(飞燕平台)主页 | |
AliGenie | 天猫精灵开放平台AliGenie主页 | |
阿里物联网平台 | 阿里物联网平台主页 | |
Bluetooth 技术网站 | 蓝牙协议规范什么的可以来这里找 | |
Telink | Telink | Chips for a Smarter IoT (telink-semi.com) Telink中文官网 | |
开发手册 | AliOS Things开发指南 | AliOS Things开发指南,这里是最新版本,可以直接从官网找到 |
AliOS Things开发指南 | AliOS Things应用开发指南,这里应该是3.3版本的完整开发文档 | |
AliOS Things开发指南(3.0) | AliOS Things应用开发指南,这里应该是3.0版本的完整开发文档 | |
生活物联网平台开发文档 | 生活物联网平台(飞燕平台)开发文档 《设备端开发指南》 | |
Wi-Fi IoT品类定义与功能开发 | 天猫精灵IoT开放平台——Wi-Fi IoT品类定义与功能开发 | |
硬件平台 | mk3080 WiFi开发板 | WiFi开发板使用指南-阿里云开发者社区 |
esp8266开发板 | 一个教程:ESP8266-NodeMCU开发板详解-太极创客 (taichi-maker.com) | |
TLSR8258 Datasheet | Datasheet for Telink BLE + IEEE802.15.4 MultiStandard Wireless SoC TLSR8258 | |
参考资料 | AliOS Things 3.0 应用开发指南 | 这个只是一篇参考文章,里面是一些环境搭建相关的,可以参考 |
IP知识百科 - 华为 (huawei.com) | IP的一些相关知识点 |
点击查看相关文件下载
分类 | 网址 | 说明 |
蓝牙规范相关文档 | Core Specification 5.2 | 核心规格 5.2,该规范定义了创建可互操作的Bluetooth 设备所需的技术。 《Core_v5.2.pdf》 |
Mesh Model(v1.1) | 本Bluetooth 规范定义了模型(以及它们所需的状态和消息),这些模型用于在mesh 网络中的节点上执行基本功能,超出了Bluetooth Mesh 配置文件 规范中定义的基础模型。 本规范包括定义跨设备类型标准功能的通用模型,以及支持关键mesh 场景的模型,如照明控制、传感器、时间和场景。 《MshMDL_v1.1.pdf》 | |
Mesh Profile(v1.0.1) | 该Bluetooth 规范定义了基本要求,以实现可互操作的mesh 网络解决方案,用于Bluetooth 低能量无线技术。 《MshPRFv1.0.1.pdf》 | |
Mesh Device Properties | 本规范包含Bluetooth Mesh 配置文件 和Bluetooth Mesh 模型规范所要求的设备属性的定义。 但是跟之前的有些区别,我主要看的之前的版本:《MMeshDeviceProperties_v1.2.pdf》 | |
GATT Specification Supplement | GATT Specification Supplement | Bluetooth® Technology Website。 好像可以在线看:《GATT Specification Supplement》 | |
Assigned Numbers | GATT的一些类型定义可以在这里找。 | |
AliOS Things | alios-things/AliOS-Things | Gitee上的AliOSThings SDK源码仓库 |
alibaba/AliOS-Things | GitHub上的AliOSThings SDK源码仓库 | |
天猫精灵蓝牙Mesh协议栈 | alibaba-archive/genie-bt-mesh-stack | GitHub上的天猫精灵蓝牙Mesh协议栈源码仓库。 之前是在alibaba/genie-bt-mesh-stack这个仓库。 写笔记的时候最新提交为faf523618a6a2560090fc423222b9db80984bb7a |
蓝牙Mesh设备开发指南 | 阿里云生活服务平台开发手册——蓝牙设备开发一节中的内容 |
这一LV的笔记起始跟前面有所重叠,互相补充吧算是。
一、nRF Mesh
1. nRF Mesh简介
网上没找到,反正它就是一个蓝牙Mesh开发过程中的一个手机调试工具,他可以作为配网器对未配网设备进行配网。官网(nRF Mesh - nordicsemi.com)是这么说的:
Provision, configure and control Bluetooth mesh networks
The nRF Mesh apps enable you to provision, configure and control Bluetooth mesh networks. They demonstrate a subset of the capabilities of the nRF Mesh open source libraries. Nordic has created these apps to bring the natural benefits of using a smartphone in Bluetooth mesh setup and control activities. Provision devices with authentication and use the generic interface to configure and control the nodes.
The source code is available on GitHub and we encourage you to use it as a starting point for your Bluetooth mesh development.
Features:
- Provision, configure, and control of nodes
- Management of network, network keys, and application keys
- Management of publications and subscriptions
- Generic OnOff, Level and Scenes control
- Sending messages to vendor models
- Sharing network configuration with other phones
这个软件是有ios版本和安卓版本的:
后面都是以安卓版本的为例来写,我自己用的iPhone,所以我直接去App Store下载了ios版本,后面我自己用的是ios版本的,功能都是一样的。
2. 软件安装
在写配网器代码前,先要让设备可以作为无oob模式进行配网,以便后期配网器可以先避开oob验证,降低代码难度。我们可以用手机app做配网器来连接节点。
2.1 安卓版本
安装完成如下所示:
2.2 ios版本
直接去App Store下载即可:
安装完毕后如下图:
二、手机连接控制蓝牙Mesh节点
我们使用之前做的这个工程来做测试:feat:bt_node工程添加按键控制风扇功能 · sumumm/my-genie-bt-mesh-stack@61e8273 (github.com),整个工程其实之前没搞完,这里从这次提交开始先做测试吧,后续会继续完善。
1. 将静态oob改为无oob
详细改动的部分可以看代码仓库:feat:bt_node工程为例演示手机连接蓝牙Mesh控制设备(无OOB,所有工程都会生效) · sumumm/my-genie-bt-mesh-stack@f28719e (github.com)。
后来改了一下,这些代码通过指定工程中的宏来进行控制:feat:bt_node工程为例演示手机连接蓝牙Mesh控制设备(无OOB的配置使用宏进行打开关闭) · sumumm/my-genie-bt-mesh-stack@ce2ea88 (github.com)
1.1 GENIE_OLD_AUTH
从代码中搜索宏 GENIE_OLD_AUTH 所有涉及的地方。
- genie-bt-mesh-stack/genie_app/bluetooth/mesh/genie_mesh.c:genie_mesh_init()
1 | //在 void genie_mesh_init(void) 函数里 |
- genie-bt-mesh-stack/network/bluetooth/bt_mesh/src/prov.c:prov_invite()
1 | //在 static void prov_invite(const u8_t *data) 函数里 |
- genie-bt-mesh-stack/network/bluetooth/bt_mesh/src/prov.c:send_confirm()
1 | //在 static void send_confirm(void) 函数里 |
- genie-bt-mesh-stack/network/bluetooth/bt_mesh/src/prov.c:prov_random()
1 | //在 static void prov_random(const u8_t *data) 函数里 |
1.2 prov_auth()
修改 genie-bt-mesh-stack/network/bluetooth/bt_mesh/src/prov.c:prov_auth() 函数中关于认证方式的返回值:
1 | static int prov_auth(u8_t method, u8_t action, u8_t size) |
2. 实现手机控制LED灯
2.1 硬件配置
(1)修改为无oob配网后,用 helloworld 示例工程生成 .bin 文件。
(2)将Red引脚和PB4引脚通过杜邦线或者跳线帽连接。
2.2 安卓手机操作
2.3 IOS版本操作
我自己用的是IOS版本,操作如下:
- (1)添加Application Keys,这里在绑定设备的时候会用到,所以先创建一个,这里是可以创建多个的
- (2)添加设备
在此期间,串口的打印信息如下:
- (3)邀请配网
这个过程中打印信息如下:
- (4)设备添加App Key
注意这里一定要在刚配网完成的时候添加,要是隔一段时间再去添加,可能就会添加不成功,我猜测是因为我们的蓝牙Mesh设备退出了某种状态,具体没有深究了。
这个过程中串口打印信息如下,反正是这个过程中打印的,具体表示什么没有详细分析:
- (5)通用开关服务的使用
重复打开OFF和ON的话,会有以下打印信息:
这个时候我们会发现红色LED随着开关而亮起熄灭。
3. 修改蓝牙设备名字
我们上面手机上找到的蓝牙设备名字为AOS Device,这个是可以修改的,我们搜索一下:
会发现,有两个文件中有,我们可以修改尝试一下,就会发现,我们改这个network/bluetooth/bt_common/port/include/config.h文件中的才会真正修改设备的名字。