随着现代城市化进程的加速,建筑电气系统的复杂性与日俱增,电气火灾作为城市火灾的主要类型之一,给人们的生命财产安全带来了严重威胁。据统计,电气故障是引发火灾的重要原因之一,其突发性强、蔓延速度快,往往造成难以估量的损失。因此,构建高效可靠的电气火灾预警系统显得尤为重要。
近年来,物联网(IoT)技术的飞速发展为消防安全管理提供了新的解决方案。物联网技术通过智能感知、无线通信等手段,实现对物理世界数据的实时采集、传输与处理,为火灾预防、早期预警及快速响应提供了强有力的技术支持。结合云计算平台的数据处理与分析能力,可以实现远程监控、智能分析和预警推送等功能,极大地提高了火灾防控的效率与准确性。
在此背景下,本项目设计并实现一套基于物联网技术的电气火灾报警控制系统。该系统充分利用先进的传感器技术和无线通信技术,针对电气火灾的主要诱因——异常温升、烟雾浓度增加以及火光出现,进行实时监测与预警。通过集成STM32F103RCT6微控制器作为核心控制单元,搭配高精度的SHT30温湿度传感器、MQ2烟雾传感器、火光检测传感器,以及ESP8266WiFi模组,构建了一个集数据采集、处理、报警与远程监控于一体的智能化系统。
系统不仅能在现场通过OLED显示屏直观显示环境状态,还能在检测到火灾隐患时立即启动蜂鸣器报警,同时借助华为云物联网平台实现数据的云端存储与分析,用户可以通过专门开发的Qt(C++)Android手机APP远程查看设备实时监测数据,及时掌握电气安全状况,实现预防性维护与管理,大大降低了电气火灾的发生概率,保障了公共与私人空间的安全。
综上所述,本项目的开发是顺应时代需求,利用现代科技手段解决实际安全问题的一次重要尝试,对于提升社会消防安全管理水平,构建智慧城市具有重要意义。
(1)环境参数实时监测:
(2)本地数据显示:
(3)智能预警系统:
(4)云端数据上传与管理:
(5)远程监控APP:
(6)系统自检与维护:
(7)电源管理:
(8)安全加密通信:
(1)主控单元:
(2)环境监测模块:
(3)显示与报警模块:
(4)无线通信模块:
(5)电源模块:
本项目设计并实现一种基于物联网技术的电气火灾报警控制系统,以提升电气火灾的预警能力和应急响应速度。系统核心采用高性能STM32F103RCT6微控制器,集成SHT30温湿度传感器、MQ2烟雾传感器、火光检测传感器进行多维度环境监测,通过OLED显示屏实时展示现场数据,并在检测到危险阈值时,利用有源蜂鸣器现场报警。此外,系统利用ESP8266WiFi模块将监测数据实时上传至华为云物联网平台,结合Qt(C++)开发的Android手机APP,用户可以远程监控设备状态,获取实时环境信息及历史记录,实现电气安全的远程管理与智能预警。本设计通过综合运用现代传感技术、无线通信技术及云计算能力,构建了一个高度集成、反应迅速、操作便捷的电气火灾预防解决方案,有效增强了公共场所及家庭的消防安全保障能力。
STM32的编程语言选择C语言,C语言执行效率高,大学里主学的C语言,C语言编译出来的可执行文件最接近于机器码,汇编语言执行效率最高,但是汇编的移植性比较差,目前在一些操作系统内核里还有一些低配的单片机使用的较多,平常的单片机编程还是以C语言为主。C语言的执行效率仅次于汇编,语法理解简单、代码通用性强,也支持跨平台,在嵌入式底层、单片机编程里用的非常多,当前的设计就是采用C语言开发。
开发工具选择Keil,keil是一家世界领先的嵌入式微控制器软件开发商,在2015年,keil被ARM公司收购。因为当前芯片选择的是STM32F103系列,STMF103是属于ARM公司的芯片构架、Cortex-M3内核系列的芯片,所以使用Kile来开发STM32是有先天优势的,而keil在各大高校使用的也非常多,很多教科书里都是以keil来教学,开发51单片机、STM32单片机等等。目前作为MCU芯片开发的软件也不只是keil一家独大,IAR在MCU微处理器开发领域里也使用的非常多,IAR扩展性更强,也支持STM32开发,也支持其他芯片,比如:CC2530,51单片机的开发。从软件的使用上来讲,IAR比keil更加简洁,功能相对少一些。如果之前使用过keil,而且使用频率较多,已经习惯再使用IAR是有点不适应界面的。
上位机的开发选择Qt框架,编程语言采用C++;Qt是一个1991年由QtCompany开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(MetaObjectCompiler,moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。Qt能轻松创建具有原生C++性能的连接设备、用户界面(UI)和应用程序。它功能强大且结构紧凑,拥有直观的工具和库。
打开官网,搜索物联网,就能快速找到设备接入IoTDA。
华为云物联网平台(IoT设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助我们快速构筑物联网解决方案。
使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台、业务应用和设备。
物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户构建各种物联网解决方案。
设备可以通过固网、2G/3G/4G/5G、NB-IoT、Wifi等多种网络接入物联网平台,并使用LWM2M/CoAP、MQTT、HTTPS协议将业务数据上报到平台,平台也可以将控制命令下发给设备。
业务应用通过调用物联网平台提供的API,实现设备数据采集、命令下发、设备管理等业务场景。
点击立即创建。
正在创建标准版实例,需要等待片刻。
创建完成之后,点击实例名称。可以看到标准版实例的设备接入端口和地址。
在上面也能看到免费单元的限制。
开通之后,点击总览,也能查看接入信息。我们当前设备准备采用MQTT协议接入华为云平台,这里可以看到MQTT协议的地址和端口号等信息。
总结:
端口号:MQTT(1883)|MQTTS(8883)接入地址:ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com根据域名地址得到IP地址信息:
打开Windows电脑的命令行控制台终端,使用ping命令。ping一下即可。
根据自己产品名字填写,下面的设备类型选择自定义类型。
创建完成之后点击查看详情。
产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。
模型简单来说:就是存放设备上传到云平台的数据。
你可以根据自己的产品进行创建。
比如:
烟雾可以叫MQ2温度可以叫Temperature湿度可以叫humidity火焰可以叫flame其他的传感器自己用单词简写命名即可。这就是你的单片机设备端上传到服务器的数据名字。先点击自定义模型。
再创建一个服务ID。
接着点击新增属性。
产品是属于上层的抽象模型,接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起,完成数据交互。
创建完毕之后,点击保存并关闭,得到创建的设备密匙信息。该信息在后续生成MQTT三元组的时候需要使用。
当前的设备是采用MQTT协议与华为云平台进行通信。
MQTT是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议。MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化,使得其能适应各种物联网应用场景。目前MQTT拥有各种平台和设备上的客户端,已经形成了初步的生态系统。
MQTT是一种消息队列协议,使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合,相对于其他协议,开发更简单;MQTT协议是工作在TCP/IP协议上;由TCP/IP协议提供稳定的网络连接;所以,只要具备TCP协议栈的网络设备都可以使用MQTT协议。本次设备采用的ESP8266就具备TCP协议栈,能够建立TCP连接,所以,配合STM32代码里封装的MQTT协议,就可以与华为云平台完成通信。
业务流程:
对于设备而言,一般会订阅平台下发消息给设备这个主题。
设备想接收平台下发的消息,就需要订阅平台下发消息给设备的主题,订阅后,平台下发消息给设备,设备就会收到消息。
如果设备想要知道平台下发的消息,需要订阅上面图片里标注的主题。
以当前设备为例,最终订阅主题的格式如下:$oc/devices/{device_id}/sys/messages/down最终的格式:$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down(4)主题发布格式对于设备来说,主题发布表示向云平台上传数据,将最新的传感器数据,设备状态上传到云平台。
这个操作称为:属性上报。
根据帮助文档的介绍,当前设备发布主题,上报属性的格式总结如下:
接下来介绍,华为云平台的MQTT三元组参数如何得到。
MQTT协议的端口支持1883和8883,它们的区别是:8883是加密端口更加安全。但是单片机上使用比较困难,所以当前的设备是采用1883端口进连接的。
根据上面的域名和端口号,得到下面的IP地址和端口号信息:如果设备支持填写域名可以直接填域名,不支持就直接填写IP地址。(IP地址就是域名解析得到的)
华为云的MQTT服务器地址:117.78.5.125华为云的MQTT端口号:1883如何得到IP地址?如何域名转IP?打开Windows的命令行输入以下命令。
下面是打开的页面:
填入设备的信息:(上面两行就是设备创建完成之后保存得到的)
直接得到三元组信息。
完成上面的操作之后,打开华为云网页后台,可以看到设备已经在线了。
点击详情页面,可以看到上传的数据:
到此,云平台的部署已经完成,设备已经可以正常上传数据了。
MQTT服务器:117.78.5.125MQTT端口号:183//物联网服务器的设备信息#defineMQTT_ClientID"663cb18871d845632a0912e7_dev1_0_0_2024050911"#defineMQTT_UserName"663cb18871d845632a0912e7_dev1"#defineMQTT_PassWord"71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237"//订阅与发布的主题#defineSET_TOPIC"$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down"//订阅#definePOST_TOPIC"$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report"//发布发布的数据:{"services":[{"service_id":"stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}2.8创建IAM账户创建一个IAM账户,因为接下来开发上位机,需要使用云平台的API接口,这些接口都需要token进行鉴权。简单来说,就是身份的认证。调用接口获取Token时,就需要填写IAM账号信息。所以,接下来演示一下过程。
【1】获取项目凭证点击左上角用户名,选择下拉菜单里的我的凭证
项目凭证:
28add376c01e4a61ac8b621c714bf459【2】创建IAM用户
鼠标放在左上角头像上,在下拉菜单里选择统一身份认证。
点击左上角创建用户。
创建成功:
【3】创建完成
用户信息如下:
设备影子介绍:
设备影子是一个用于存储和检索设备当前状态信息的JSON文档。每个设备有且只有一个设备影子,由设备ID唯一标识设备影子仅保存最近一次设备的上报数据和预期数据无论该设备是否在线,都可以通过该影子获取和设置设备的属性简单来说:设备影子就是保存,设备最新上传的一次数据。
我们设计的软件里,如果想要获取设备的最新状态信息,就采用设备影子接口。
在线调试接口,可以请求影子接口,了解请求,与返回的数据格式。
调试完成看右下角的响应体,就是返回的影子数据。
设备影子接口返回的数据如下:
{"device_id":"663cb18871d845632a0912e7_dev1","shadow":[{"service_id":"stm32","desired":{"properties":null,"event_time":null},"reported":{"properties":{"DHT11_T":18,"DHT11_H":90,"BH1750":38,"MQ135":70},"event_time":"20240509T113448Z"},"version":3}]}调试成功之后,可以得到访问影子数据的真实链接,接下来的代码开发中,就采用Qt写代码访问此链接,获取影子数据,完成上位机开发。
链接如下:
使用华为云平台提供的API接口获取设备上传的数据,进行可视化显示,以及远程控制设备。
打开下载链接后选择下面的版本进行下载:
qt-opensource-windows-x86-5.12.6.exe13-Nov-201907:283.7GDetails
软件安装时断网安装,否则会提示输入账户。
安装的时候,第一个复选框里勾选一个mingw32编译器即可,其他的不管默认就行,直接点击下一步继续安装。
选择MinGW32-bit编译器:(一定要看清楚了)
说明:我这里只是介绍PC端,也就是Windows系统下的Qt环境搭建。Android的开发环境比较麻烦,如果想学习Android开发,想编译Android程序的APP,需要自己去搭建Android环境。
前面2讲解了需要用的API接口,接下来就使用Qt设计上位机,设计界面,完成整体上位机的逻辑设计。
【1】新建工程
【2】设置项目的名称。
【3】选择编译系统
【4】选择默认继承的类
【5】选择编译器
【6】点击完成
【7】工程创建完成
打开默认的界面如下:
根据自己需求设计界面。
点击软件左下角的绿色三角形按钮进行编译运行。
编译之后的效果:
如果想编译Android手机APP,必须要先自己配置好自己的Android环境。(搭建环境的过程可以自行百度搜索学习)
然后才可以进行下面的步骤。
创建完成。
Qt本身是跨平台的,直接选择Android的编译器,就可以将程序编译到Android平台。
然后点击构建。
生成的apk的目录在哪里呢?编译完成之后,在控制台会输出APK文件的路径。
知道目录在哪里之后,在Windows的文件资源管理器里,找到路径,具体看下图,找到生成的apk文件。