基于FreeRTOS的嵌入式设备管理关键技术研究及实现(学习四)

news2024/11/26 12:27:10

硬件平台

终端设备的硬件选型主要由STM32芯片作为处理器,板载时钟电路和电源电路以及对外通信串口,并挂载AM2302温湿度传感器来实时收集环境相关信息,将收集到的信息通过NB-IoT通信模组上传到云端,从而实现整个环境监测功能。
在这里插入图片描述
主控制器
为了符合本文低功耗、低成本的要求,硬件平台选择使用STM32F103RCT6作为主控制器,该处理器是一款基于ARM Cortex-M3内核STM32系列的32位的微控制器,RAM为48K,程序存储器容量是64KB,需要电压2V~3.6V。

STM32F10系列处理器是成本低、性能高、功耗低,由ARM公司生产设计,经常被应用于各种硬件系统中。
STM32F103处理器具有停止、休眠和待机模式3种低功耗模式,而当STM32F103处理达到处理器最高72MHz运行时仅消耗36mA的电路,而在待机模式下则低至2uA。

无线通信模块
与主控芯片进行串口通信,BC28可以有限减少设备大小并降低设备制作成本,适用于小型可穿戴设备、智能便携仪器等需要紧凑设计的终端。

IR红外发射器
红外发射器和接收器会出现在各类遥控设备上,例如电视、空调遥控器。这种技术的工作原理是,一个组件在特定的协议下可以发送、接收、翻译闪烁的红外信号。

最常见的IR遥控器通常使用会产生红外发光的二极管,而接收组件通常是一个光电二极管。
输入端管脚PWM连接到主芯片的PWM输出管脚。
输入端的PWM管脚是从单片机输出的红外信号,连接单片机的PWM管脚,控制晶体管的状态。
当PWM是高电平时,晶体管导通,发光二极管亮。

在这里插入图片描述
IR接收器或红外接收器从IR发射器接收信息,对信号进行解码。
IR接收器的常见应用是电视遥控器,电视的遥控器在按下任何键或按钮发送红外信号。电视机上的红外接收器将接收这些信号,并在解码后将它们发送到电视内的控制电路,然后控制器将执行必要的操作。

研究空调的红外遥控协议,使得该原件能够在平台控制下或温湿度触发阈值时动态调整环境参数。

软件架构设计与实现

本文设计采用LwM2M协议进行设备管理,终端设备中需要实现以下接口:

  1. 设备注册接口:注册接口的目的是使终端与LwM2M服务器互联,将LwM2M客户端的相关信息通过精简的报文格式传输并存储在LwM2M服务器上。
  2. Client/Server交互接口:设备管理与服务实现接口的主控方为LwM2M服务器,服务器向终端发送指令,终端对指令做出回应并将回应消息发送给服务器
  3. 消息上报接口:允许客户端主动想服务器端更新自身数据。
  4. 设备注销接口:使过期终端或失效终端端口与服务器的连接。

为了缩短开发周期,选择了移动OneNET云平台作为服务器端进行终端功能测试。

资源抽象模型

LwM2M对大部分设备功能做了抽象,使这些功能、数据类型被描述成固定的对象-资源类型,这样做对开发者屏蔽了设备的具体名称和完成的功能。

对象可以包含多个实例,每个实例可以定义多个设备资源。
设备的资源属性可以被唯一的URI定位。

在这里插入图片描述
一个服务器端管理着多个设备实例,每一个实例都拥有自己的属性。
例如,本文的环境监测终端可能含多个设备实例,每个实例又会有湿度、温度、开关等属性。

设备、实例、资源三者都各自拥有对应的ID,该ID均在资源注册时被同时注册到服务端,并在设备内保留相关信息。

其中,实例ID是为了区分完成相同功能设备的不同实例,例如,一个设备最终会根据自身属性组成形如“ObjectID/InstanceID/ResourceID”的URI,URI是设备在管理系统中的唯一标识,服务器端通过URI来与固定的设备进行通信,对固定的资源进行读取、写入等操作。

抽象模型设计

LwM2M允许用户自己根据所使用设备以及设备完成的功能进行对象、资源的定义。
在这里插入图片描述
一个资源的定义不仅需要ObjectID,还需要InstanceID和ResourceID,这两个ID分别为对象赋予了实例个数的描述和数据格式、类型、允许的操作的描述。

例如,本文的温度监测为只能被读取的客观属性,不可被改变,因此,对象资源类型如表所示。

在这里插入图片描述

设备注册接口

设备的注册接口主要用于未在平台注册过的设备进行注册的功能,以及已注册的设备进行对云平台的上线通知功能。
在这里插入图片描述
其中,创建设备函数被命名为nb_device_create(),其主要功能为对设备的URI、lifetime以及具体的回调功能进行描述和填充,其中回调功能主要包括“读、写、执行”,分别为write_callback()、read_callback()、execute_callback()。

在向平台发送指令时,若与平台连接成功,则返回NO_ERROR状态码,并更改state为STATE_REGISTERED,若因网络问题发生传输失败,则返回ERROR_500状态码。

在这里插入图片描述
state表示设备当前状态,如已完成注册、注册失败、未注册等。
state在设备完成与平台交互任务时需要判断是否在平台进行注册,否则不能保证成功通信。

Client/server交互接口

根据OneNET云平台的接口文档,本文设计并实现了设备端Client/Server交互接口。交互接口的设计主要包括“读”、“写”、“执行”三个指令及这三个指令各自完成的逻辑功能的设计。

在执行指令之前还需要对所下发的指令进行区分和判断,以确保执行正确的指令。
在这里插入图片描述
在正确接收到指令后,开始执行具体的逻辑功能。
本文称“读”指令的接口为设备资源读取接口,该接口用于服务器通过下发指令实时获得设备的内数据如传感器资源数据、电池电量等,使得在云平台可以远程实现获得设备相关信息。
例如,使用设备资源读取接口对设备实时获取到的温度、湿度值进行读取并上报。

在这里插入图片描述
平台在下发指令时会携带查询设备资源的URI以定位具体资源,本文的软件设计中包含了一个节点结构体_nb_node_t,这样的数据结构构成了链表,判断实例是否存在就是在这个链表中寻找相对应的资源,而根据传感器的资源情况,设计了资源的数据结构_nb_value_t用以记录不同数据类型的数据以及数据属性等,每一个节点携带一个该结构体类型的值。

在这里插入图片描述
在这里插入图片描述
用于远程控制红外发射器进行空调开关机的功能使用了设备资源写入接口,填写的值为false则发射关空调的红外指令,否则发送开空调的红外指令。
在这里插入图片描述
平台在下发指令时会携带查询设备资源的URI以定位具体资源,并判定该资源实例是否存在在节点链表中。

为了应对由于设备发生错误而导致需要重启设备设计了一个执行回调,该回调完成的功能是进行设备复位重启。

设备信息上报接口

设备在进行信息上报之前,需要进行状态监测,即设备是否在平台注册成功,而这样的操作是一种高复用的操作,因此本文设计了一种结构体_nb_transaction_t来完成这样的设备自检功能,代表设备需要完成的准备工作。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【重拾计划】模板 | N进制加法

N进制加法模板 基本原理 n进制转十进制&#xff0c;利用字符串处理&#xff0c;由于位数不同&#xff0c;采用倒序处理字符串。 代码实现 #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> usin…

phpoffice/phpspreadsheet读取excel表格中的图片并保存到本地

我们开发导入excel表格功能时&#xff0c;会遇到表格中带有图片的情况&#xff0c;怎样获取到表格的图片并且把图片保存到本地&#xff0c;这样就可以展示你导入的数据和图片&#xff0c;实现此功能。 这里介绍一下分别使用phpspreadsheet和PHPExcel扩展库来实现读取Excel内图片…

win10multiple editions意思详细介绍

multiple editions是win10系统的一个版本号&#xff0c;很多的小伙伴都不知道这个英文是什么意思&#xff0c;今天就给你们带来了win10multiple editions意思详细介绍&#xff0c;还不清楚的就快来看看吧。 multiple editions是什么意思&#xff1a; 1、multiple editions是多…

C++笔记之内置基本类型的默认构造函数

C笔记之内置基本类型的默认构造函数 code review! 文章目录 C笔记之内置基本类型的默认构造函数1.C中基本内置类型的默认构造函数2.C有没有一个“内置构造函数”这样一个名词&#xff1f;3.基本内置类型按照前面提到的规则进行初始化是C11才开始的新特性吗&#xff1f; 1.C中…

【NX】NXOpen::BlockStyler::Tree的个人使用类分享

网上关于NXOpen::BlockStyler::Tree的例子不是太多&#xff0c;控件默认id名称为tree_control01&#xff0c;因为例子不多很多功能得自己写&#xff0c;虽然NXOpen::BlockStyler::Tree的封装已经不错了&#xff0c;但是实际使用起来也不是很方便&#xff0c;比如像获取所有节点…

基于PyQt5的桌面图像调试仿真平台开发(8)锐化

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

机器学习基础之《特征工程(2)—特征工程介绍》

一、什么是特征工程 机器学习领域的大神Andrew Ng(吴恩达)老师说“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering. ” 注&#xff1a;业界广泛流传&#xff1a;数据和特…

论文阅读-DF-Platter: Multi-Face Heterogeneous Deepfake Dataset(多人脸异构深度伪造数据集)

一、论文信息 文章名称&#xff1a;DF-Platter: Multi-Face Heterogeneous Deepfake Dataset 作者团队&#xff1a; 会议&#xff1a;cvpr2023 数据集地址&#xff1a;http://iab-rubric.org/df-platter-database 二、动机与创新 动机 目前大多数研究工作都集中在个人外表…

【零基础入门学习Python---Python中安全编程和测试之快速入门实践】

&#x1f680; 零基础入门学习Python&#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜…

Mysql基础之SQL语句

作定期复习和查询用&#xff0c;打开这篇博客提高效率&#xff0c;避免回视频或者百度上找 &#x1f442; 无论你多怪异我还是会喜欢你&#xff08;《刺客伍六七》动画推广版片尾曲&#xff09; - 周子琰 - 单曲 - 网易云音乐 内容来自B站黑马Mysql&#xff0c;检索使用 附上…

浅析Lambda架构

大家好&#xff0c;今天我们来介绍一个用于亿级实时数据分析架构Lambda架构。 Lambda架构 Lambda架构&#xff08;Lambda Architecture&#xff09;是由Twitter工程师南森马茨&#xff08;Nathan Marz&#xff09;提出的大数据处理架构。这一架构的提出基于马茨在BackType和Tw…

Python GUI编程利器:Tkinker中的消息和文本(7)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日目标 实现下面效果&#xff1a; 消息(Message类) 消息用于显示多行文本消息&#xff0c;对标签进行替代&#xff0c;如果…

【数学建模】国赛真题分析 2012 A题 葡萄酒的评价

2012 A题 葡萄酒的评价 优秀论文地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/19WGpybgM6RncxTYhx61JRA?pwdvl22 提取码&#xff1a;vl22 –来自百度网盘超级会员V6的分享 确定葡萄酒质量时一般是通过聘请一批有资质的评酒员进行品评。每个评酒员在对葡萄酒进…

GWIN入门-完整一个程序

GWIN入门-完整一个程序 新建工程 右击工程名,添加.v文件 编写功能文件 /* timescale是Verilog HDL 中的一种时间尺度预编译指令,它用来定义模块的仿真时的时间单位和时间精度。 */`timescale 1ns/1ps module LED(input wire clk

第三步:STM32F4时钟介绍

1.0 时钟系统框图 1.1 时钟系统知识 1. STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟&#xff0c;RC振荡器&#xff0c;频率为16MHz&#xff0c;精度不高。可以直接作为系统 时钟或者用作PLL时钟输入。    ②、HSE是高速外部时钟&#xff0c;可接石英…

机器学习PCA + LogisticRegression 训练和预测 输出混淆矩阵

from sklearn.decomposition import PCA# --------------------------------------------- # 最佳主成分数量 pca = PCA(n_components=None) pca.fit_transform(x_train) var_values = pca.explained_variance_ratio_def select_best_components(var_, goal_var):best_componen…

flutter3.7版本下使用flutter boost解决使用platview崩溃或异常问题

背景 工程使用了混合开发&#xff0c;使用flutter boost插件&#xff0c;flutter 的activity1 frament1 跳转activity2 frament2&#xff0c;frament1 包含platformView&#xff0c;按照上面老哥解决崩溃问题的基础上&#xff0c;出现activity2 frament2返回activity1 framen…

百度--搜索引擎是怎么实现的--如何制作一个搜索浏览器

1.搜索引擎是怎么实现的&#xff1f; 搜索引擎是通过以下步骤实现的&#xff1a; 网页抓取&#xff08;Crawling&#xff09;&#xff1a;搜索引擎会使用网络爬虫&#xff08;Web Crawler&#xff09;自动地从互联网上抓取网页内容。爬虫按照一定的规则遍历网页并提取网页内容…

数组之前缀和

1.前缀和 前缀和的概念:前缀和是指数组中从开始位置到当前位置的所有位置的元素之和,它可以通过累加数组元素来计算,一般来说,我们可以使用前缀和数组在常数时间复杂度内计算任意区间的和. 注意:特别是需要频繁的计算区间和的情况,可以通过先预先计算前缀和数组,可以将时间复…

经典神经网络(7)DenseNet及其在Fashion-MNIST数据集上的应用

经典神经网络(7)DenseNet及其在Fashion-MNIST数据集上的应用 1 DenseNet的简述 DenseNet不是通过更深或者更宽的结构&#xff0c;而是通过特征重用来提升网络的学习能力。 ResNet 的思想是&#xff1a;创建从“靠近输入的层” 到 “靠近输出的层” 的直连。而DenseNet 做得更…