本帖最后由 manhuami2007 于 2024-1-11 12:12 编辑
环境温度监控网关
作者:manhuami2007
一、作品简介(100-200字)
本次设计的名称为“环境温度监控网关”,原本打算使用STM32MP157的开发板,但是网站上缺货,因此换成了树莓派4B。实现的主要功能为:网关上搭建MQTT服务器,接收传感器设备上传的温度数据,网关保存接收到的数据,并对温度进行判断,当检测到温度超过设定值时,向制定邮箱发送邮件,告知用户超限传感器的ID和当前温度。同时在网关上搭建WEB服务器,使得用户能够通过网页查看各传感器的历史数据,也可以通过网页设置报警温度和目标邮箱。
图1 树莓派4B
图2 自制ESP32温度传感器设备
二、系统框图(图文结合)
下图显示的是整个系统的层次结构,本次的设计就是要实现处于中间位置的网关。树莓派作为网关,处于传感器设备和用户之间。网关接收和保存传感器设备上传的温度数据并保存到数据库中。网关判断温度数据是否超限,如果超限则通过邮件发送到指定的邮箱中。同时在网关中搭建web服务器,web服务器会读取数据库的数据,显示到网页上。
图3 系统层次图
网关上搭建的服务如下图所示,包括mqtt的服务器和客户端、sqlite数据库、web服务器,以及发送邮件的功能。在本设计里主要使用python编程语言实现。mqtt客户端使用python的paho包开发,负责订阅mqtt相关主题的消息,并将数据解析后保存到数据库中。web服务器使用python的flask框架,web服务器也会访问数据库的数据,并通过网页显示相关的数据。
图4 树莓派部署服务框图
三、各部分功能说明(图文结合)
本系统主要包括:MQTT服务、数据保存、发送邮件和WEB服务器功能。
- MQTT服务
MQTT服务包括MQTT服务器和客户端。
在树莓派上部署mosquitto服务,实现MQTT服务器的功能。传感器设备通过wifi向该服务器的主题”sensor/temperature”发送消息,消息格式是json格式,包含设备的ID和温度数据。数据示例如下图所示。
图5 mqtt消息示例
同时在树莓派上使用python的paho库编写MQTT的客户端,该客户端订阅”sensor/temperature”主题的消息,这样当传感器设备发送数据时,该客户端也能收到数据。收到数据之后,将json数据解析出来,获得设备的ID和温度数据,然后将数据放入sqlite数据库的相应的表中,然后读取设置的上限温度,判断当前温度是否超过了上限温度,如果超过上限温度则向用户发送邮件。流程图见下图:
图6 mqtt客户端流程图
- 发送邮件
该部分使用python的smtp库发送邮件,因此需要事先开通发件箱的smtp服务功能。发送的邮件内容为超限传感器的设备ID和当前温度。邮件见下图所示:
图7 邮件内容
- 数据保存
需要保存的数据包括两大类:传感器的温度数据和设置参数。
传感器的温度数据使用的是sqlite保存,不同传感器设备使用不同的表进行保存,根据mqtt消息里的ID参数区分不同的传感器设备。每张表包含3列的数据:ID、温度和时间。该部分使用python编程
图8 传感器列表
图9 表数据
设置参数主要是“上限报警温度”,这个则是通过python的dbm进行保存的。
- web服务器
该功能使用python的flask框架实现,主要用到flask的路由功能和模板功能。包含4个页面:首页、设置页、传感器列表页、单个传感器数据页。各页面的跳转关系如下图所示:
图10 网页关系
首页如下图所示,可以跳转到设置页和传感器列表页。
图11 首页
设置页如下图所示,用于设置“上限报警温度”。该页面包含一个表单,在其中输入温度后,点击提交,将会向web服务器发送POST请求。服务器收到该请求后将设置的参数通过python的dbm保存下来。每次进入该界面的时候都会自动加载保存到dbm中的数据。点击返回按键则返回首页。
图12 设置页
传感器列表页显示所有的传感器,如下图所示。传感器通过无序列表呈现,每一项均为一个链接,点击后跳转到该ID设备的数据页面。
图13 传感器列表页
各传感器数据页如下图所示,以列表的方式呈现对应ID的传感器数据。
图14 传感器数据页
- 作品源码
作品源码已经上传下载中心,下载链接如下:
2023年DigiKey创意大赛-源代码及文件-嵌入式开发相关资料下载-EEWORLD下载中心
该源码使用python编程语言,实现功能主要包括:mqtt客户端、发送邮件、sqlite数据库操作、dbm数据保存、python+flask的web服务器等。
源码使用注意事项:
- 使用mqtt客户端时,需要先在树莓派上部署mosquitto服务,作为mqtt的服务器。同时按照服务器的IP地址修改文件”save_sensor_data.py”里的mqtt_server参数。
- 文件”send_email.py”中的发件邮箱的账户名和密码,以及收件邮箱的账号名都已去掉,请修改为自己的邮箱参数。
- 该代码中需要创建数据库文件和dbm文件,因此可能涉及到用户权限的问题,请使用sudo运行代码。
- 需要运行的文件有2个,分别是:”save_sensor_data.py”和“web.py"。同样可能涉及用户权限的问题,请使用sudo运行代码。
五、作品功能演示视频
视频链接:
该视频演示了”环境温度监控网关“的主要功能,包括:mqtt消息的订阅接收、数据保存到sqlite数据库、温度判断、发送邮件、各网页的展示、温度参数的设置、传感器数据在页面的呈现。
六、项目总结
这次的编程语言主要使用的python编程语言,并且使用了很流行的树莓派。在树莓派上成功的部署了MQTT服务和WEB服务。实现了python的数据库操作、dbm数据保存、paho库的使用,也实现了flask框架的使用。对web开发的前后端都有了进一步的了解。这次的设计虽然主体功能都实现了,但是还有一些细节可以优化和补充的地方,比如搭建完整的WEB服务器环境,美化页面设计,mqtt上传的数据加密等。
分享帖汇总
七、其它
通过这次活动,把物联网和web的内容都做了一遍,收获很多,学到了很多新的知识,感谢得捷和EEWORLD举办了这次活动。
|