前言
上一篇文章中我们实现了 MQTT 的基本通讯,地基已经打好,那么接下来我们正式开始搭建我们的物联网系统,首先,我们先为系统画一张蓝图,明确接下来的开发工作。
服务端
服务端相当于一个指挥中枢,管理所有接入的设备,统一下达命令,并接收设备上报的数据,是我们物联网系统的核心。
设计思路
在物联网平台中,某一类具有相同能力或特征的设备的合集被称为一款产品。而产品模型是用来描述设备能力的文件,通过JSON的格式定义了设备的基本属性、上报数据和下发命令的消息格式。定义产品模型,即在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的属性信息。(Copy 自华为云)
本物联网平台各功能模块展示如下:
主界面
本网站使用 Python + Flask 搭建,涉及 MySQL,Redis 数据库读写,前后端交互,Flask-login 用户鉴权,数据分析,ECharts 绘图等多方面操作。
设备管理页
显示已连接到平台的设备列表,展示其在线状态。同时前端向后端轮询设备在线状态,实时更新。
显示设备基本信息。
平台向设备下达命令,同时保存记录。
监控设备状态。
产品管理页
显示产品信息,提供属性和命令定义功能。
平台与设备之间的通信
依靠 MQTT 协议,通过订阅不同的 Topic 实现。
已经实现的功能如下表所示。
Topic 分类 | Topic | 发布者 | 订阅者 | 用途 |
设备命令相关 Topic | /commands/issue | 平台 | 设备 | 平台下发命令给设备 |
/commands/response | 设备 | 平台 | 设备返回命令响应 | |
设备属性相关 Topic | /properties/report | 设备 | 平台 | 设备上报属性数据 |
设备状态相关 Topic | /device/heartbeat | 设备 | 平台 | 设备上报 Heartbeat 数据 |
数据库结构
表 | 说明 |
---|---|
device | 记录设备信息 |
product | 记录产品信息 |
history | 记录命令下发记录 |
data_{device_id} | 记录设备上报的数据,以 device_id 区分 |
至于为什么要给设备上报的数据专门做一个表存着,是因为我还加了一个数据分析功能,通过图表形式直观地展现出来数据的变化趋势。考虑到数据量的原因,设备上报数据的间隔应适当调整,10-15分钟上报一次即可。
设备侧
设备负责收集信息,并上报至平台,同时接收平台下发的命令并执行相关操作。
硬件
瑞芯微RK3566 四核A55,主频1.8Ghz,Mali G52,WIFI 5.0 + BT 5.0,千兆网口,1xUSB3.0, 3xUSB2.0。
I2C接口,温度精度 ±0.3°C,湿度精度 ±2%。
GPIO接口控制。
软件
利用 Python 实现 I2C 通讯,以及 GPIO 控制,这里先放一张图,下一篇文章会详细解释。
总结
本文简要展示了物联网系统的服务端和设备侧的软硬件,但由于时间原因,无法详细展开,请见谅。下一篇文章我们将介绍设备侧获取温湿度传感器数据以及控制LED灯开关方法。
版权声明
本文系作者原创文章,未经允许不得转载,否则保留追究法律责任的权利。https://www.scott-sloan.cn/archives/229/