BLE Mesh蓝牙组网技术详细解析之Model Layer模型层(八)

目录

一、什么是BLE Mesh Model Layer模型层?

二、SIG Model

2.1 模型概念

2.2 消息格式 

2.3 开关模型

四、资料获取


一、什么是BLE Mesh Model Layer模型层?

Models Layer的作用是定义了一些通用的或特定的模型,用于实现网络节点设备的基本功能和控制行为。每个模型都包含了一些状态、消息和规程,用于描述设备的属性、功能和行为。模型可以分为基础模型和SIG模型两类。基础模型负责实现与Mesh网络配置和管理相关的功能,如Configuration Server/Client model和Health Server/Client model。SIG模型负责实现与Mesh网络应用相关的功能,如Generic OnOff Server/Client model、Sensor Server/Client model和Lighting Server/Client model等。 

二、SIG Model

2.1 模型概念

Model Layer中的SIG model是一些标准的模型,用于实现典型的用户场景功能,如开关、传感器、灯光等。SIG model的实现主要包括以下几个方面:

  • 定义一组相关的状态,用于表示模型的当前属性或目标属性
  • 定义一组消息,用于查询或更改状态的值,或者通知状态的变化
  • 定义一组行为,用于响应消息的请求,或者执行状态的转换
  • 定义一组绑定关系,用于描述不同状态之间的联动效果
  • 定义一个唯一的模型识别码,用于区分不同的模型

下图展示了设备的一种元素模型结构,该设备具体实现了一个服务器模型(标记为设备C),具备相应的状态,并支持以下消息:R、S、T、X、Y、Z。同时,该设备还包含两个实现客户端模型的设备,其中设备a主要支持消息X、Y和Z,而设备B则主要支持消息R、S、T和Z。

2.2 消息格式 

Model Layer的消息格式是由Access Layer定义的,主要包括两个部分:Opcode和Parameters。Opcode是一个1到3字节的字段,用于标识消息的类型和用途。Parameters是一个可选的字段,用于携带消息的具体内容,比如状态的值,目标的地址,操作的码等。不同的模型定义了不同的Opcode和Parameters,以实现各自的功能和状态。例如,Generic OnOff Server模型定义了以下三种消息:

  • Generic OnOff Get:用于查询开关状态,Opcode为0x8201,无Parameters。
  • Generic OnOff Set:用于设置开关状态,Opcode为0x8202,Parameters为OnOff(1字节),TID(1字节),Optional Fields(5字节)。
  • Generic OnOff Status:用于响应开关状态,Opcode为0x8203,Parameters为Present OnOff(1字节),Optional Fields(3字节)。

2.3 开关模型

Model Layer开关模型消息通信的过程是这样的:

  • 开关模型包括Generic OnOff Server模型和Generic OnOff Client模型,它们分别定义了一个布尔类型的状态Generic OnOff State,以及三种消息Generic OnOff Get,Generic OnOff Set,Generic OnOff Status。
  • Generic OnOff Client模型可以向Generic OnOff Server模型发送Generic OnOff Get消息,用于查询开关状态,也可以发送Generic OnOff Set消息,用于设置开关状态。
  • Generic OnOff Server模型可以向Generic OnOff Client模型发送Generic OnOff Status消息,用于响应开关状态,也可以向订阅了该模型的其他节点发送Generic OnOff Status消息,用于通知开关状态的变化。
  • Generic OnOff Set消息有两种类型:Acknowledged和Unacknowledged,前者要求服务器回复一个Generic OnOff Status消息,后者不要求回复。
  • Generic OnOff Status消息包含一个字节的Present OnOff值,表示当前的开关状态,以及可选的三个字节的Target OnOff值,Transition Time值和Remaining Time值,表示目标的开关状态,状态转换的时间和剩余的时间。
  • Generic OnOff Server模型和Generic OnOff Client模型之间的消息通信是通过Access Layer承载的,Access Layer负责对消息进行格式化,加密,解密,认证和验证。
  • Access Layer的消息是通过Upper Transport Layer和Lower Transport Layer传输的,Upper Transport Layer负责对消息进行加密,解密和认证,Lower Transport Layer负责对消息进行分段和重组。
  • Lower Transport Layer的消息是通过Network Layer传输的,Network Layer负责对消息进行加密,解密,混淆,反混淆,中继和代理。
  • Network Layer的消息是通过Bearer Layer传输的,Bearer Layer负责对消息进行封装,解封,广播和接收。
  • Bearer Layer可以有两种类型:Advertising Bearer和GATT Bearer,前者基于BLE的广播机制,后者基于BLE的连接机制。

/*源自开源协议栈NimBLE*/
static int gen_onoff_status(struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx)
{int err;struct bt_mesh_gen_onoff_srv *cb = model->user_data;struct os_mbuf *msg = NET_BUF_SIMPLE(3);uint8_t *state;bt_mesh_model_msg_init(msg, OP_GEN_ONOFF_STATUS);state = net_buf_simple_add(msg, 1);if (cb && cb->get) {cb->get(model, state);}BT_DBG("state: %d", *state);err = bt_mesh_model_send(model, ctx, msg, NULL, NULL);if (err) {BT_ERR("Send status failed");}os_mbuf_free_chain(msg);return err;
}static int gen_onoff_get(struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx,struct os_mbuf *buf)
{BT_DBG("");return gen_onoff_status(model, ctx);
}static int gen_onoff_set_unack(struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx,struct os_mbuf *buf)
{struct bt_mesh_gen_onoff_srv *cb = model->user_data;uint8_t state;state = buf->om_data[0];BT_DBG("state: %d", state);if (cb && cb->set) {return cb->set(model, state);}return 0;
}static int gen_onoff_set(struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx,struct os_mbuf *buf)
{BT_DBG("");gen_onoff_set_unack(model, ctx, buf);return gen_onoff_status(model, ctx);
}static int gen_level_status(struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx)
{int err;struct bt_mesh_gen_level_srv *cb = model->user_data;struct os_mbuf *msg = NET_BUF_SIMPLE(4);int16_t *level;bt_mesh_model_msg_init(msg, OP_GEN_LEVEL_STATUS);level = net_buf_simple_add(msg, 2);if (cb && cb->get) {cb->get(model, level);}BT_DBG("level: %d", *level);err = bt_mesh_model_send(model, ctx, msg, NULL, NULL);if (err) {BT_ERR("Send status failed");}os_mbuf_free_chain(msg);return err;
}

四、资料获取

通过点击以下链接,您可以获取BLE Mesh模块原理图、源代码以及开发资料。链接地址将为您提供详细的文件资料,以供您进行参考和使用。

如果您在使用过程中遇到任何问题或疑虑,欢迎加我QQ ,一起探讨技术问题,我的QQ号是986571840,加的时候请注明CSDN。

BLE Mesh蓝牙组网模块 - 硬创社 (jlc.com)icon-default.png?t=N7T8https://x.jlc.com/platform/detail/001d23cba7b64b0d9df5b9b69720fadb

感谢各位用户点赞、分享、在看,这些行为让知识得以更加广泛地传播,从而让更多人受益。

请在转载作品时注明出处,严禁抄袭行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323250.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【管理篇 / 恢复】❀ 07. macOS下用命令刷新固件 ❀ FortiGate 防火墙

【简介】随着苹果电脑的普及,很多管理员都会通过苹果电脑对飞塔防火墙进行管理。当防火墙需要命令状态下刷新固件时,在macOS下用命令刷新固件,将会是一个小小的挑战。 首先是硬件的连接,USB配置线的USB一头,接入MAC的U…

羊大师讲解每天坚持去散步,你的身体将会感受到奇迹的变化!

羊大师讲解每天坚持去散步,你的身体将会感受到奇迹的变化! 每天都在忙碌的工作中度过,中午休息时间,你是否留给自己一点时间去散散步呢?或者晚上结束所有的工作后,是否会选择去散步,放松一下自…

学生社会实践周是什么意思

为何学校会安排社会实践周这样的活动?是为了让学生们走出课堂,接触真实的社会吗?还是为了让他们在实践中学习课本之外的知识和技能? 什么是社会实践周。简而言之,就是学校组织的一次为期一周的社会实践活动。在这一周…

前端结合MQTT实现连接 订阅发送信息等操作 VUE3

MQTT客户端下载 使用测试 在我之前文章中 MQTT下载基础使用 下面记录一下前端使用的话的操作 1.安装 npm i mqtt引入 import * as mqtt from "mqtt/dist/mqtt.min"; //VUE3 import mqtt from mqtt //VUE2 一、MQTT协议中的方法 Connect。等待与服务器建立连接…

使用代理IP实现爬虫的匿名性

目录 前言 一、什么是代理IP? 二、使用Python实现代理IP爬虫 1. 安装所需模块 2. 获取代理IP列表 3. 使用代理IP进行爬取 4. 使用代理IP进行数据抓取 三、总结 前言 随着互联网的快速发展,网络爬虫已经成为了获取互联网数据的一种重要方式。然而…

【uniapp】多规格选择

效果图 VUE <template> <view><view class"wp-80 pd-tb-40 mg-auto"><button type"warn" click"showDrawer(showRight)">筛选</button></view><!-- 筛选-uni-drawer --><uni-drawer ref"s…

CentOS 7 基于官方源码和openssl制作openssh 9.6 rpm包(含ssh-copy-id) —— 筑梦之路

之前写了一篇&#xff1a; CentOS 7 制作openssh 9.6 rpm包更新修复安全漏洞 —— 筑梦之路_升级openssh9.6-CSDN博客 有好几个网友反馈&#xff0c;ssh-keygen生成密钥存在问题&#xff0c;之前的rsa \ dsa加密算法用不了&#xff0c;因此写了一篇&#xff1a; 关于openssh…

基于ssm的班级事务管理系统+vue论文

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对班级事务信息管理的提升&#x…

Java TBA访问NetSuite Restlet时的403错误

本周有同学问为啥Java访问NetSuite Restlet时&#xff0c;按照知识会之前的文章分享&#xff0c;会一直报403 INVALID_LOGIN_ATTEMPT错误。 https://nk-community.blog.csdn.net/article/details/131399801https://nk-community.blog.csdn.net/article/details/131399801原因是…

(03)光刻——半导体电路的绘制

01、绘制精细电路的第一步 金属-氧化物半导体场效应晶体管(MOSFET)的革命,让我们可以在相同面积的晶圆上同时制造出更多晶体管。MOSFET体积越小,单个 MOSFET的耗电量就越少,还可以制造出更多的晶体管,让其发挥作用,可谓是一举多得。可见,制造更小的MOSFET成了关键因素…

服务器执行rm命令时自动记录到审计日志中

目的 当在服务器上执行类似于 rm 命令时&#xff0c;自动记录该命令执行的时间&#xff0c;在哪里执行的&#xff0c;删除的什么文件&#xff0c;记录到审计日志中&#xff0c;能够查找到某些文件丢失原因 配置 # 需要root权限&#xff0c;sudo不行&#xff0c;这里假设执行…

mariadb配置慢sql查询

Mariadb和Mysql配置相同 这里配置的事mariadb 修改配置文件 vi /etc/my.cnf.d/server.cnf[mysqld] slow_query_logon slow_query_log_file/data/mysql_data/slow_query_log.log long_query_time2slow_query_logon 开启慢sql查询slow_query_log_file/data/mysql_data/slow_que…