基于STM32设计的宿舍安防控制系统

2024-11-08 11:44   重庆  

1.1 项目介绍

本项目设计里用到的全部工具软件、模块的源代码都可以在这里下载(放在网盘里了)。

https://pan.quark.cn/s/145a9b3f7f53

【1】开发背景

随着社会的发展和技术的进步,人们对居住环境的安全性和智能化水平提出了更高的要求。特别是在校园宿舍这样的集体生活环境里,由于人员密集且流动性大,传统的安防措施已经难以满足现代安全标准的需求。为了提高宿舍区的安全防范能力,减少安全隐患,本项目提出了一套基于STM32微控制器与NBIoT(窄带物联网)通信技术相结合的宿舍安防控制系统。

该系统的设计理念是将物联网技术应用于日常生活中,通过集成多种传感技术来实现对宿舍环境的全方位监控,并能够及时响应各种异常情况,从而达到预防火灾、防盗、节能等多重目的。例如,在发生火灾初期,通过安装于宿舍内的烟雾及火焰传感器可以迅速感知火情并发出警报;同时,系统还能监测用电安全,当检测到线路过载或短路等危险状况时,自动切断电源以避免事故进一步扩大。此外,考虑到实际使用中的便利性,该系统还具备了远程操控功能,允许用户通过智能手机应用程序或是PC端管理软件随时随地掌握家中状态,并执行如开启门锁等操作。

选择STM32作为主控芯片是因为它具有强大的处理能力和丰富的外设资源,非常适合用来构建复杂而高效的嵌入式系统。搭配NBIoT模块,则保证了即使在网络信号较差的情况下也能保持稳定可靠的无线连接,这对于确保重要信息能够及时准确地传输至云端至关重要。与此同时,利用华为云提供的物联网平台服务,不仅简化了后端架构的设计工作量,而且为用户提供了一个直观易用的数据展示界面以及灵活多样的交互方式。

本项目结合先进的嵌入式技术和物联网概念,打造一套集成了环境监测、安全防护以及智能家居控制于一体的综合性解决方案,旨在为用户提供更加安心舒适的生活体验。通过这样一个智能化的安全管理系统,不仅可以有效提升宿舍区域的整体安全性,同时也促进了节能减排目标的实现,对于推动智慧城市建设具有积极意义。

框架图:

原理图:

【2】实现需求

为了明确本项目的具体实现需求,以下按照功能模块详细列出各项需求:

(1)火焰检测与报警

  • • 配备火焰检测传感器,能够快速响应火焰存在。

  • • 当检测到火焰时,系统应立即启动蜂鸣器报警,同时将警报信息通过NBIoT模块发送到云端。

  • • 在本地LCD显示屏上显示火焰警告信息。

(2)烟雾检测与报警

  • • 使用MQ2烟雾传感器,实时监测环境中的烟雾浓度。

  • • 如果烟雾浓度超过预设阈值,触发蜂鸣器报警,并将警报信息上传至云端。

  • • LCD显示屏同步更新显示烟雾警告信息。

(3)门磁控制

  • • 实现本地按键开门功能(内部开门的按钮),按下指定按键后,通过STM32控制电磁锁开启。

  • • 开发手机APP和Windows电脑上位机软件,支持用户远程发送开门指令。

(4)人体感应

  • • 安装红外热释电人体检测传感器,用于探测宿舍内是否有人。

  • • 传感器数据用于辅助判断是否需要保持照明或其他设备的工作状态。

  • • 检测结果同样上传至云端,并可在LCD显示屏上查看。

(5)电力监测与保护

  • • 通过电力参数采集模块持续监测宿舍内的电压、电流、功率等电气参数。

  • • 设定合理的电流和功率阈值,当超过这些阈值时,系统应自动切断电源,并触发蜂鸣器报警。

  • • 监测数据定期上传至云端,并在LCD显示屏上显示。

(6)数据上云

  • • 采用NBIoT模块和MQTT协议将采集到的所有数据上传到华为云物联网平台。

  • • 确保数据传输的安全性和可靠性,同时保证低功耗运行。

  • • 提供API接口,便于Android手机APP和Windows上位机获取云端数据。

(7)本地数据显示

  • • 利用1.44寸LCD显示屏,实时显示当前的环境状态,包括但不限于烟雾浓度、火焰检测状态、电力参数等。

(8)用户界面

  • • 开发基于Qt框架的Android手机APP和Windows上位机软件,界面友好且易于操作。

  • • 用户界面需包含数据展示、远程控制、历史记录查询等功能。

  • • 确保用户界面能够适应不同尺寸的屏幕,并提供良好的用户体验。

【3】项目硬件模块组成

本项目的硬件模块组成如下,每个模块都根据其特定的功能进行了详细的描述:

(1)主控芯片 - STM32F103RCT6:作为整个系统的核心,STM32F103RCT6负责处理来自各个传感器的数据输入、执行逻辑运算以及控制输出设备。它拥有丰富的外设接口,能够满足与多种传感器及执行器的连接需求。

(2)烟雾检测 - MQ2传感器:MQ2是一种常用的气体传感器,特别适用于检测液化气、丁烷、丙烷、甲烷、酒精、氢气、烟雾等可燃气体。在本项目中,它被用来监测宿舍环境中是否存在异常烟雾,一旦检测到烟雾浓度超标,即刻向主控发送信号。

(3)电力参数采集模块:通过RS485、UART接口与STM32相连,此模块能够精确测量宿舍内电路的电压、电流、功率等参数。这些数据不仅用于显示,也用于判断是否存在过载或其他潜在的电气风险。

(4)LCD显示屏 - 1.44寸LCD:作为人机交互的重要组成部分,这款小型彩色LCD屏幕用于展示实时监测的各项数据,如温度、湿度、烟雾浓度以及电力使用情况等信息,使用户能够直观了解当前状态。

(5)蜂鸣器 - 高电平触发的有源蜂鸣器:当系统检测到火灾、烟雾或其他紧急情况时,STM32将控制蜂鸣器发声,起到警示作用。蜂鸣器直接由STM32的GPIO引脚驱动。

(6)NBIoT模块 - BC26:作为物联网通信的关键部件,BC26模块使得系统能够通过移动运营商网络将采集到的数据上传至云端服务器。它支持低功耗广域网(LPWAN)技术,非常适合于远程监控应用。

(7)火焰检测传感器:专门设计用于探测火焰的存在,通常基于红外光谱特性工作。当检测到火焰时,传感器会向STM32发送信号,触发警报流程。

(8)人体感应 - 红外热释电传感器:这种类型的传感器可以感知人体散发出的热量变化,用于判断房间内是否有人。它对于提高系统的智能化程度,比如自动调整照明亮度或空调温度非常有用。

(9)电磁锁 -:作为门禁系统的一部分,电磁锁由STM32控制,可通过本地按键、手机APP或电脑远程解锁。它提供了物理层面的安全保障,确保只有授权人员才能进入宿舍。

(10)稳压电源 - 12V 2A:为保证整个系统稳定运行,选用一款输出稳定的直流电源适配器,为所有电子组件提供必要的电力支持。考虑到系统的总功耗,2安培的额定输出足够应对大多数应用场景。

【4】设计意义

本项目设计的意义在于通过集成多种先进技术和智能设备,构建一个高效、可靠且用户友好的宿舍安防控制系统,从而显著提升宿舍环境的安全性和居住质量。随着城市化进程的加快和学生群体的不断增长,校园宿舍的安全问题日益受到重视。传统的安防措施往往依赖于人工巡检和简单的报警系统,无法实现全天候、全方位的监控,且响应速度慢,难以及时有效地处理突发事件。因此,开发一套基于现代物联网技术的宿舍安防控制系统显得尤为重要。

系统通过引入火焰检测、烟雾检测以及人体感应等多种传感器,能够实时监测宿舍内外的各种潜在威胁。一旦发现火灾或其他紧急情况,系统能够立即作出反应,通过蜂鸣器发出警报,并将警报信息上传至云端,确保管理人员第一时间得到通知并采取相应措施。这种即时响应机制大大减少了灾害发生的可能性及其带来的损失。

门磁控制系统结合了本地按键开门与远程控制两种方式,不仅增强了宿舍入口的安全性,还提供了极大的便利性。用户可以通过智能手机应用程序或PC端软件随时随地进行访问控制,无论是忘记带钥匙还是需要临时授权他人进入,都能够轻松解决。这种方式不仅提高了效率,也增加了灵活性,让宿舍管理变得更加现代化。

电力参数监测功能的加入,使得系统能够持续跟踪宿舍内的用电状况。通过对电压、电流、功率等关键指标的监控,系统能够在检测到异常情况时及时切断电源,防止电气火灾的发生。这不仅保障了学生的生命财产安全,也有助于促进节能减排,符合可持续发展的理念。

数据上云是本项目另一个重要的特点。通过NBIoT模块将采集的数据上传至华为云物联网平台,不仅实现了数据的集中管理和分析,也为用户提供了一个便捷的远程查看和控制平台。用户可以在任何地方通过手机或电脑访问系统,查看最新的监测数据,并进行相应的操作。这种透明化的管理模式,既增强了用户的参与感,也提升了整体管理效率。

通过本地LCD显示屏的实时数据显示,以及基于Qt开发的用户界面,系统提供了直观的操作体验。用户可以轻松获取所需信息,并进行简单有效的交互。这样的人机交互设计考虑到了用户的实际需求,使得高科技产品变得更加亲民易用。

综上所述,本项目不仅在技术层面上实现了对宿舍环境的全面监测与智能控制,更是在实际应用中为学生创造了一个更加安全、便捷和舒适的居住环境。它代表了未来智能家居的一个发展方向,对于推动校园安全管理现代化、提升学生生活质量具有重要意义。

【5】国内外研究现状

在中国,随着智慧校园和智慧城市概念的推广,宿舍安防控制系统的研究与应用逐渐增多。北京航空航天大学曾推出了一款基于物联网技术的宿舍安全管理系统,该系统不仅能够监测宿舍内的温湿度、烟雾、一氧化碳等环境参数,还可以通过智能门锁实现对进出人员的身份验证。这套系统通过集成摄像头和人脸识别技术,进一步增强了宿舍的安全性。此外,该系统还支持通过手机APP远程控制门锁、查看宿舍内环境数据以及接收警报信息,极大地方便了学生的生活。北京航空航天大学的这项研究展示了物联网技术在提升宿舍安全性方面的巨大潜力。

在国外,类似的智能安防解决方案也在不断发展。美国的一些高校,如麻省理工学院(MIT),已经在宿舍中应用了先进的安防技术。MIT的宿舍区采用了多种智能传感器和监控设备,如运动探测器、门窗传感器以及智能烟雾报警器。这些设备通过无线网络连接到中央管理系统,一旦检测到异常情况,系统会自动向相关人员发送警报。此外,MIT还开发了一款名为“SafeWalk”的应用程序,允许学生在夜间步行回宿舍时请求护送服务,进一步提高了校园的安全水平。

欧洲方面,德国的亚琛工业大学(RWTH Aachen University)实施了一个名为“Smart Campus”的项目,其中包含了宿舍安防系统的改进。该项目利用了LoRaWAN(低功耗广域网络)技术来连接分布在宿舍区的各种传感器,包括门窗传感器、水浸传感器以及温度湿度传感器等。通过这些传感器收集的数据,系统能够实时监测宿舍的安全状况,并通过手机应用程序向住户发送警报。此外,亚琛工业大学还在研究如何利用机器学习算法来优化警报系统的性能,减少误报率,提高准确性。

新加坡国立大学(NUS)也致力于通过技术创新来提高宿舍区的安全性。该校部署了一套结合了视频监控、面部识别技术和物联网传感器的综合安防系统。这套系统不仅可以监控宿舍区内的异常活动,还能通过面部识别技术来识别进出宿舍的人员身份,从而确保只有授权的人员才能进入宿舍。同时,NUS还利用大数据分析来优化宿舍区的安全管理策略,通过对大量数据的分析,识别潜在的安全隐患,并提前采取预防措施。

这些国内外的实际案例表明,宿舍安防控制系统的研究正处于快速发展阶段,新技术的应用不仅提高了宿舍的安全水平,也大大提升了居住者的舒适度和便利性。随着技术的不断进步,未来的宿舍安防系统将更加智能化、个性化,更好地服务于校园生活。

【6】摘要

本项目设计了一个基于STM32微控制器和NB-IoT通信技术的宿舍安防控制系统。系统集成了多种安防功能,包括火焰检测、烟雾检测、门磁控制、人体感应、电气监测等。火焰和烟雾检测通过相应的传感器实现,一旦检测到异常,系统会触发蜂鸣器报警以提醒用户。门磁控制功能允许用户通过本地按键、手机APP和Windows电脑上位机远程控制门锁的开启与关闭。人体感应功能可检测宿舍内是否有人员存在,用于防止盗窃或异常情况发生。

系统还具有电气监测功能,能够实时监测直流电与单相交流电的电压、电流与功率,并在电流或功率超出设定阈值时,通过蜂鸣器报警并自动切断电源,确保用电安全。所有采集的数据通过NB-IoT模块和MQTT协议上传至华为云物联网平台,用户可通过Android手机APP远程查看数据和控制设备。数据的本地显示则通过1.44寸LCD屏完成,方便用户实时获取各项监测信息。

本系统不仅具备本地和远程控制功能,还通过云平台实现了数据的实时监控和报警功能,增强了宿舍的安全性。该系统采用STM32F103RCT6作为主控芯片,结合MQ2、火焰检测、人体感应等传感器,具有较高的集成度和实用性。

关键字

STM32, NB-IoT, 宿舍安防, 火焰检测, 烟雾检测, 门磁控制, 人体感应, 电气监测, 数据上云, MQTT, 华为云物联网, LCD显示, 无线通信, 远程控制, 安全报警

1.2 系统总体设计

【1】系统功能需求分析

系统功能需求分析是项目规划阶段的重要组成部分,它明确了系统需要实现的具体功能,确保开发能够准确理解并满足用户的需求。对于基于STM32和NBIoT设计的宿舍安防控制系统,以下是对其功能需求的详细分析:

系统需配备高灵敏度的火焰检测传感器和烟雾传感器,如MQ-2烟雾传感器。这些传感器应能够连续监测宿舍环境,一旦检测到火焰或异常烟雾浓度,系统应当立即触发蜂鸣器发出警报,并通过NBIoT模块将警报信息发送到云端。同时,警报信息也应在本地LCD显示屏上显示,以便宿舍内人员能够迅速察觉并采取行动。火焰与烟雾检测是宿舍安防的基础,对于早期发现火灾隐患至关重要。

系统需要支持多种方式的门锁控制,包括本地按键开门、手机APP远程开门以及通过Windows电脑上的上位机软件远程控制。本地按键开门适用于日常出入,而远程开门则为特殊情况下的应急处理提供了便利。电磁锁应由STM32控制,确保只有授权用户才能通过合法途径进入宿舍。此外,每次开门动作都应记录下来并通过NBIoT模块上传至云端,以备后续审查和审计之用。

系统需集成红外热释电人体感应传感器,用于检测宿舍内是否有人。当检测到有人时,系统可以自动调节照明和其他电器设备的状态,以节约能源。此外,人体感应数据也可用于辅助判断宿舍内的安全状态,如在无人状态下检测到异常移动,系统应立即发出警报并通知相关人员。人体感应功能不仅提高了系统的智能化程度,也增强了安全性。

系统应配置电力参数采集模块,实时监测宿舍内的电压、电流、功率等电气参数。系统需设定合理的电流和功率阈值,一旦超过这些阈值,系统应自动切断电源,以防止电气故障导致的火灾或其他安全事故。同时,电力监测数据应通过LCD显示屏实时显示,并通过NBIoT模块定期上传至云端,以便管理者进行数据分析和趋势预测。

通过NBIoT模块和MQTT协议,系统需将所有收集到的数据上传至华为云物联网平台。这包括火焰和烟雾警报、门锁操作记录、人体感应数据以及电力参数等。数据上云后,可以通过Android手机APP和Windows电脑上的上位机软件进行远程查看。用户可以随时随地监控宿舍的安全状况,并进行远程控制,如远程开门等。云端数据存储还便于进行长期的数据分析和管理。

系统应配备1.44寸LCD显示屏,用于显示实时的环境监测数据和系统状态。显示屏应清晰易读,能够显示火焰检测状态、烟雾浓度、电力参数等关键信息。此外,显示屏还应显示基本的操作指南和当前设置状态,以方便用户理解和操作。

系统设计需充分考虑稳定性和安全性。硬件方面,应选用可靠耐用的组件,并确保电源稳定。软件方面,程序应具备良好的错误处理机制和数据加密功能,以保护用户隐私和系统安全。系统还应支持掉电恢复功能,确保在电力中断后能够恢复正常工作。

通过上述功能需求的实现,该宿舍安防控制系统将能够提供全面的安全防护,同时为用户提供便捷的远程控制体验。系统不仅提升了宿舍的安全性,还促进了能源的有效利用,体现了智能化管理的优势。

【2】系统总体方案设计

系统总体方案设计基于STM32微控制器和NBIoT通信技术,旨在创建一个高度集成、智能化的宿舍安防控制系统。该系统集成了火焰检测、烟雾检测、门磁控制、人体感应、电力监测与保护以及数据上云等多项功能,确保宿舍环境的安全性、便捷性和智能化管理。核心组件包括STM32F103RCT6微控制器、MQ2烟雾传感器、火焰检测传感器、红外热释电人体感应传感器、电力参数采集模块、蜂鸣器、NBIoT模块BC26、5V电磁锁、1.44寸LCD显示屏以及一个5V 2A的稳压电源。

系统架构分为三个主要部分:数据采集与处理、本地控制与显示、远程监控与管理。在数据采集与处理部分,STM32F103RCT6微控制器作为系统的大脑,负责接收来自各类传感器的数据,并进行初步处理。火焰检测传感器和烟雾传感器分别用于监测火焰和烟雾,一旦检测到异常,立即触发蜂鸣器报警,并通过NBIoT模块将警报信息上传至云端。电力参数采集模块通过串口与STM32通信,实时监测宿舍内的电压、电流、功率等参数,若超出预设的安全阈值,系统将自动切断电源并发出警报。此外,红外热释电人体感应传感器用于检测宿舍内是否有人存在,辅助判断安全状况并优化能源使用。

在本地控制与显示方面,系统通过1.44寸LCD显示屏实时显示各类传感器的监测数据及系统状态。用户可以通过本地按键控制门锁开启,同时,LCD显示屏还提供了系统操作指南和当前设置状态,增强了用户的交互体验。蜂鸣器作为报警装置,会在检测到异常情况时发出声音警报,确保及时引起注意。门锁采用5V电磁锁,支持本地按键、手机APP以及Windows上位机软件远程控制,确保了宿舍入口的安全性和便利性。

远程监控与管理部分是通过NBIoT模块BC26实现的。该模块利用NB-IoT网络将采集到的数据上传至华为云物联网平台,实现了数据的远程存储和管理。借助于华为云提供的服务,用户可以通过Android手机APP或Windows电脑上的上位机软件随时查看宿舍的实时状态,并执行远程控制命令,如远程开门等。数据上传至云端后,还支持数据分析和历史记录查询,为管理者提供了决策支持。

软件开发方面,STM32的固件采用C语言编写,利用Keil MDK开发环境进行编译和调试。固件代码实现了传感器数据采集、处理、报警逻辑以及与NBIoT模块的通信。手机APP和Windows上位机软件则基于Qt框架开发,使用C++语言编写,提供了直观的用户界面,支持数据查看、远程控制以及系统配置等功能。通过这些软件的支持,系统不仅能够实现基本的安全监测和控制功能,还能提供丰富的用户体验。

综上所述,本系统的总体设计方案综合了先进的传感器技术、微控制器处理能力、NBIoT通信技术以及云端服务,形成了一套完整且高效的宿舍安防解决方案。该方案不仅提高了宿舍的安全防护水平,还增强了用户的便捷性和舒适度,是现代智慧校园建设的重要组成部分。

【3】系统工作原理

系统的工作原理基于STM32微控制器为核心,结合多种传感器和执行器,通过NBIoT通信技术实现数据的远程传输和云端管理。整个系统的设计提供一个全面的宿舍安防解决方案,确保居住环境的安全性和便利性。

系统通过各类传感器对宿舍环境进行持续监测。火焰检测传感器和烟雾传感器(如MQ-2)分别用于检测火焰和烟雾的存在。这些传感器将环境中的物理变化转化为电信号,然后传递给STM32微控制器。一旦检测到火焰或烟雾浓度超过预设阈值,STM32会立即触发蜂鸣器发出警报,提醒宿舍内的人员注意潜在的火灾风险。同时,系统会通过NBIoT模块将警报信息发送到华为云物联网平台,以便远程监控和快速响应。

对于门磁控制,系统配备了5V电磁锁,支持多种开门方式。用户可以通过宿舍内的本地按键手动开启门锁,也可以通过手机APP或Windows电脑上的上位机软件发送远程开门指令。这些指令通过NBIoT模块传输到STM32,由微控制器解析后控制电磁锁的动作。每次门锁操作都会记录下来,并通过NBIoT模块上传至云端,便于后续的数据分析和安全审计。

人体感应功能由红外热释电传感器实现。该传感器能够检测宿舍内是否有人存在,并将信号发送给STM32。这不仅有助于判断宿舍内是否有未经授权的闯入者,还可以根据检测结果自动调整宿舍内的照明和其他电器设备的状态,以节省能源。人体感应数据同样会被记录并上传至云端,以供进一步分析和使用。

电力监测是系统的一项重要功能。通过电力参数采集模块,系统能够实时监测宿舍内的电压、电流和功率等参数。当这些参数超过预设的安全阈值时,系统会自动切断电源以防止电气故障,并通过蜂鸣器发出警报。电力监测数据也会通过LCD显示屏显示,并通过NBIoT模块上传至云端,便于远程监控和故障排查。

在数据处理和传输方面,STM32微控制器负责接收来自各个传感器的数据,进行初步处理,并通过NBIoT模块BC26将数据发送到华为云物联网平台。NBIoT技术以其低功耗和广覆盖的特点,非常适合于这类需要长时间在线监测的应用场景。数据上传至云端后,可以通过手机APP或Windows上位机软件进行远程查看和控制。用户可以随时随地监控宿舍的安全状况,并执行远程操作,如远程开门等。

系统还配备了一个1.44寸LCD显示屏,用于本地显示各种监测数据和系统状态。这使得用户可以直接在宿舍内查看关键信息,而不需要依赖远程设备。显示屏还可以显示系统的基本操作指南,方便用户理解和操作。

系统通过集成多种传感器、执行器和通信模块,实现了对宿舍环境的全面监测与控制。从火焰和烟雾检测到门磁控制,再到电力监测和人体感应,每一项功能都紧密配合,确保宿舍的安全和舒适。通过NBIoT技术与云端服务的结合,系统不仅实现了本地的即时响应,还提供了远程监控和控制的能力,为用户提供了一个全方位、智能化的宿舍安防解决方案。

1.3 系统框架图

1.4 系统功能总结

为了清晰地展示系统的主要功能,下面是一个系统功能总结的表格。这个表格列出了每个功能的描述、涉及的关键组件以及预期的效果。

功能模块描述关键组件预期效果
火焰检测检测宿舍内是否存在火焰,触发警报火焰检测传感器, STM32, 蜂鸣器, NBIoT模块及时发现火灾风险,发出警报并上传警报信息至云端
烟雾检测检测宿舍内是否存在烟雾,触发警报MQ2烟雾传感器, STM32, 蜂鸣器, NBIoT模块及时发现火灾风险,发出警报并上传警报信息至云端
门磁控制支持本地按键开门、手机APP和Windows上位机远程开门5V电磁锁, STM32, NBIoT模块提供多种开门方式,增强便利性和安全性
人体感应检测宿舍内是否有人存在红外热释电传感器, STM32, NBIoT模块辅助判断宿舍状态,优化能源使用,提高安全性
电力监测与保护监测宿舍内的电压、电流、功率,超限时发出警报并切断电源电力参数采集模块, STM32, 蜂鸣器, NBIoT模块防止电气故障,确保用电安全
数据上云通过NBIoT模块将采集的数据上传至华为云物联网平台NBIoT模块BC26, STM32实现远程监控和数据分析
本地数据显示通过1.44寸LCD显示屏显示实时数据和系统状态1.44寸LCD显示屏, STM32提供直观的数据展示,方便用户查看和操作
远程控制通过手机APP和Windows上位机软件实现远程监控和控制NBIoT模块, STM32, 手机APP, Windows上位机用户可以随时随地查看宿舍状态并执行远程控制

功能总结

  • • 火焰检测与烟雾检测:通过火焰检测传感器和MQ2烟雾传感器实时监测宿舍内的火焰和烟雾情况,一旦检测到异常,立即触发蜂鸣器报警,并通过NBIoT模块将警报信息上传至云端,确保及时响应火灾风险。

  • • 门磁控制:结合5V电磁锁和STM32微控制器,支持本地按键开门、手机APP和Windows上位机远程开门,提高宿舍入口的安全性和便利性。

  • • 人体感应:利用红外热释电传感器检测宿舍内是否有人存在,辅助判断宿舍状态,优化能源使用,并提高安全性。

  • • 电力监测与保护:通过电力参数采集模块监测宿舍内的电压、电流和功率,当超过预设阈值时,系统自动切断电源并发出警报,确保用电安全。

  • • 数据上云:通过NBIoT模块BC26将采集的数据上传至华为云物联网平台,实现远程监控和数据分析,便于管理者进行决策。

  • • 本地数据显示:1.44寸LCD显示屏实时显示宿舍内的各种监测数据和系统状态,提供直观的信息展示。

  • • 远程控制:通过手机APP和Windows上位机软件,用户可以远程查看宿舍状态并执行控制命令,如远程开门等,提高系统的灵活性和可用性。

1.5 系统原理图

1.6 实物图

1.7 模块的技术详情介绍

【1】NBIOT-BC26模块

NBIoT-BC26模块是由中国移动通信研究院和移远通信合作推出的一款NB-IoT(窄带物联网)通信模块,专为低功耗广域网(LPWAN)应用而设计。NB-IoT是物联网领域的一项重要通信技术,具有低功耗、低成本、大连接和广覆盖的特点,能够为各种智能终端提供稳定、高效的无线连接。BC26模块广泛应用于智能表计、智慧城市、资产追踪、环境监测和远程控制等领域。

BC26模块的尺寸小巧(大约为19.9mm × 23.6mm),功耗极低,非常适合空间有限、功耗敏感的物联网应用。模块支持电池供电,并具备深度睡眠模式,使其在无操作时的功耗极低,这在需要长时间工作和持续连接的应用中极为重要。BC26模块在设计上特别注重能效管理,其低功耗特性为长时间、低成本的物联网部署提供了可行性。

BC26模块支持NB-IoT标准的三种部署模式:独立部署、保护带部署和带内部署,使其能够适应不同网络环境。它支持多个频段,如B1、B3、B5、B8、B20等,能够满足不同地区和国家的通信需求。BC26模块提供高达几百kbps的下行速率,尽管比4G等高带宽网络慢得多,但对于大多数传感器数据、环境监测数据和状态上报等低数据量的物联网通信来说已经足够。

在网络连接上,BC26模块使用了NB-IoT技术特有的窄带无线频谱,使其具备极强的网络覆盖能力。与传统移动网络相比,NB-IoT模块能够在更深的楼宇或地下环境中保持稳定连接。这一特性对于智慧城市建设中广泛分布的智能设备至关重要,确保了物联网设备的可靠通信。

BC26模块支持标准的AT命令集,使得开发者能够通过简单的指令进行配置和操作,包括网络注册、连接管理、数据发送与接收等。使用AT命令,开发人员可以快速实现与云平台的通信、数据传输和远程管理。BC26模块还支持多种通信协议,如UDP和CoAP,可以通过这些协议实现高效的物联网数据传输。

为了满足物联网的安全需求,BC26模块支持多种加密和认证机制,如数据加密、SIM卡认证等。这些功能增强了通信过程中的安全性,确保数据在传输过程中不会被恶意截取或篡改。通过与云平台的连接,BC26模块能够将采集到的设备数据上传至云端,实现远程监控、数据分析和设备管理等功能,助力企业构建智能化的物联网应用。

BC26模块具备较强的抗干扰能力和稳定性,即使在复杂的无线环境下也能保持高效通信。它的接口类型包括UART、SPI和I2C等,方便与各种单片机、传感器和其他外围设备集成。BC26模块还支持多种电源管理模式,开发者可以根据应用需求设置不同的功耗模式,以优化能源使用。

NBIoT-BC26模块以其低功耗、高效能、广覆盖和易于开发的特点,为物联网应用提供了可靠的无线通信解决方案。它特别适用于大规模、分布广泛、低数据量传输的场景,成为智能终端和远程数据采集的重要通信模块之一。BC26模块的灵活性和可靠性为各类物联网项目的构建和部署提供了理想的支持。

【2】MQ2气体传感器

MQ2气体传感器是一种常见的气体检测设备,能够用于监测环境中的多种气体,包括可燃性气体和烟雾等。其工作原理基于金属氧化物半导体(MOS),当传感器暴露于特定气体环境中时,其电阻会发生变化,从而使传感器产生不同的电信号,进而被检测出来。以下是MQ2传感器的详细介绍:

MQ2传感器的主要特点是能够检测多种气体,如液化气(LPG)、丙烷、氢气、一氧化碳(CO)、酒精和烟雾。由于其灵敏度较高,尤其在检测烟雾和可燃性气体方面表现优异,因此被广泛应用于家庭安全系统、气体泄漏报警设备、工业监测和其他涉及气体检测的应用场景中。它在确保居家安全和工业生产安全方面扮演着重要角色。

MQ2传感器通常由一个加热元件和一个电阻传感元件组成。当传感器通电时,其内部加热元件会加热传感表面,这一过程有助于加速气体与传感层之间的反应速度。加热器会在传感器表面形成一个高温环境,从而提高检测气体的反应速度。传感元件的电阻在不同浓度的可燃气体或烟雾中会发生变化,通过测量该电阻的变化,可以得到环境中气体的浓度信息。

该传感器的输出为模拟信号,通常需要通过微控制器(如STM32)进行信号的采集和处理。为了将MQ2的模拟信号转化为数字信号,通常会配合ADC(模数转换器)模块。还可以使用合适的阈值设定来判断是否达到报警条件。大多数情况下,它需要一定的预热时间来达到稳定的工作状态(一般为20至30秒),以确保检测结果的准确性。

MQ2传感器的优点在于价格低廉、灵敏度较高、易于使用并且能够适应不同气体检测需求。它的工作电压通常为5V,并支持模拟和数字两种输出模式。需要注意的是,MQ2的输出信号会受到环境温湿度的影响,因此在某些特殊环境下需要进行校准或考虑其影响。同时,由于传感器对多种气体具有一定的反应,因此有可能出现干扰,需要针对特定场景做专门的气体选择性检测。

在使用时,MQ2气体传感器通常与负载电阻(Load Resistor)连接形成一个简单的电路。负载电阻的大小可以影响传感器的灵敏度和响应时间,因此需要根据应用需求进行合理选择。MQ2气体传感器适用于气体检测报警、电路保护、消防报警和家用安全等领域。

【3】火焰检测模块

火焰检测模块是一种基于红外或紫外光谱检测火焰的传感器装置,广泛用于火灾预警、工业安全、家居安防和自动化系统等领域。它通过感应火焰发出的光信号来实现火焰的检测和监控,可以快速识别火源并提供警报信号,从而有效降低火灾风险,保护生命和财产安全。

火焰检测模块通常依靠感应火焰所产生的特定波长的光线来进行检测。大多数火焰检测模块基于红外感应技术,能够探测到760纳米至1100纳米波长的红外光,部分高精度的模块也能够探测紫外光(185-260纳米范围)。由于火焰中含有炽热的燃烧气体,这些气体会在燃烧过程中发出特定波长的红外或紫外线,因此火焰检测模块可以通过识别这些光信号来判断火焰的存在。

火焰检测模块一般由光敏元件、滤光器和放大电路等组成。光敏元件可以是光电二极管、光敏晶体管或其他类型的红外传感器。当火焰光线被光敏元件接收时,会引起光电效应,从而产生电信号。经过滤波和放大处理后,这一信号被传递到微控制器(如STM32)或报警电路中,触发相应的动作,比如蜂鸣器报警或关闭电源。

火焰检测模块的输出通常为数字和模拟信号两种模式。数字信号输出通常以高低电平的形式表示是否检测到火焰。对于许多简单应用,数字信号足以实现火焰的快速识别。模拟信号输出则提供了更精确的测量值,可以反映火焰的强度和距离。通过对模拟信号的采集和处理,可以对火焰的状态和变化进行更深入的分析和判断。

火焰检测模块具有反应迅速、灵敏度高和抗干扰性强的特点,能够在短时间内检测到火焰的存在并发出警报。其检测距离和角度通常受光敏元件的灵敏度和透镜的设计影响,一般的检测角度为60°至120°,检测距离可达几米至十几米。用户可以通过调节模块上的灵敏度电位器来设定检测灵敏度,从而满足不同应用场景的需求。

在使用火焰检测模块时,环境光和反射物体可能会对检测结果产生影响。因此,在安装和应用时需要注意避免阳光直射或强光干扰。模块应对准可能的火源方向,以便获得最佳的检测效果。此外,为了提高火焰检测的可靠性,模块通常与其他传感器(如烟雾传感器、温度传感器)联合使用,形成多层次的火灾预警系统,以减少误报警的风险。

火焰检测模块被广泛用于工业设备监控、燃气灶具安全控制、火灾报警器等场合。它能够在火灾初期迅速响应,及时发出报警信号或采取控制措施,从而大大提高火灾防控能力,保护生命和财产安全。总的来说,火焰检测模块是一个重要的安防组件,为多种应用提供了可靠的火灾预警和安全保障功能。

【4】蜂鸣器模块

高低电平控制的有源蜂鸣器是一种集成了振荡电路和发声组件的电子器件,通过简单的电平控制即可产生声音提示,广泛用于报警系统、家电、智能设备以及工控系统等需要声音提示的场合。相比无源蜂鸣器,有源蜂鸣器不需要外部提供驱动频率信号,内部已包含振荡电路,因此只需提供电源和控制电平就能发声,使用更加方便。

有源蜂鸣器通常由电磁线圈、铁芯、磁铁、振荡器、以及振膜等组成。当给蜂鸣器供电时,内置振荡电路开始工作,产生一定频率的交变磁场,使振膜不断振动,从而发出连续的“嘀嘀”声。蜂鸣器的工作频率通常在2kHz至4kHz之间,这一频段的声音刺耳,便于在嘈杂环境中引起注意。

高低电平控制的有源蜂鸣器根据输入信号的不同可以分为高电平触发和低电平触发两种类型。高电平触发的蜂鸣器在输入信号为高电平时发声,而低电平触发的蜂鸣器则在输入信号为低电平时发声。此设计使得蜂鸣器能够灵活适应不同的控制电路要求,便于和各类控制器(如单片机、PLC)直接对接,通过简单的GPIO信号即可控制蜂鸣器发声或停止。

在电气特性方面,有源蜂鸣器的工作电压通常在3V到12V之间,常见的规格为5V和12V两种,用户可以根据应用场合选择适合的电压等级。有源蜂鸣器的功耗较低,工作电流通常在几十毫安左右,因此适合电池供电设备以及低功耗应用场景。蜂鸣器的封装形式有插件式和贴片式两种,插件式适合在PCB上直接安装,而贴片式则适合自动化设备生产,更加适合高密度电路板应用。

由于内置了振荡电路,有源蜂鸣器在使用中不需要考虑驱动频率的问题,只需控制电平即可实现发声与停止,因此开发简单,安装便捷。在实际应用中,若需实现不同的报警音效,可以通过脉冲信号控制发声的间歇频率,使蜂鸣器产生间歇报警声。此外,在电平驱动的电路中,有源蜂鸣器还可以与其他传感器、开关、按键等组件配合,构建智能化的声音提示系统,以提升设备的交互体验。

【5】人体感应传感器

热释电人体感应传感器,也称为PIR(Passive Infrared)传感器,是一种常用于检测人体活动的传感设备。它基于红外辐射感应原理,能够探测到人体发出的红外热辐射并产生信号输出,从而感知人体的存在或运动。PIR传感器广泛应用于自动门、安防报警系统、智能家居照明控制等领域,凭借其可靠性高、成本低和易于集成的特点,成为了主流的人体感应方案。

PIR传感器的核心组件是一个热释电元件,该元件能够对红外线的变化产生响应。人体通常会发出红外线,其波长在8到14微米范围内。当一个人进入传感器的检测范围时,会引起传感器探测区域内红外辐射的变化。传感器内的热释电元件在接收到红外信号后,会产生微弱的电压变化,通过放大电路将这种变化转化为可用的电信号。这一电信号可以用于控制后续电路,比如启动蜂鸣器报警或触发电路开关等。

为了提高检测精度和灵敏度,PIR传感器通常会配备菲涅尔透镜。菲涅尔透镜可以将红外线聚焦到传感器的热释电元件上,并分成多个“检测区域”,以便更精确地感知人体活动。这一设计使得传感器能够区分不同方向和距离的运动,从而更准确地触发感应。

热释电人体感应传感器通常有两种工作模式:触发模式和非触发模式。触发模式用于检测到运动后产生高低电平信号,并在延时后恢复初始状态。这种模式适用于自动门控制和智能灯控制等场景。而在非触发模式下,传感器检测到运动信号时,会保持高电平输出,适合需要长时间信号保持的应用。

PIR传感器具有高灵敏度和较低的功耗,这使其非常适合电池供电的设备。同时,由于PIR传感器本身是“被动”的,只需感知外界红外辐射,无需主动发射信号,因此具有抗干扰能力强和安全性好的特点。此外,PIR传感器的检测距离和范围通常可以通过调整其光学镜头和电路参数来设定,一般的检测距离为3-7米,覆盖角度约为120°至180°,具体参数可以根据应用需求进行配置。

需要注意的是,热释电人体感应传感器可能会受环境温度变化影响。在高温或低温环境下,其检测灵敏度可能会有所变化。此外,传感器也可能受到电磁干扰的影响,因此在设计和使用时需注意电磁屏蔽和环境适配,以提高系统的稳定性和可靠性。总体来说,PIR传感器以其简便的操作和广泛的适用性,在智能家居、安防系统和自动化控制等方面得到了广泛应用。

【6】电磁锁

电磁锁是一种利用电磁力进行控制的锁具,常用于门禁系统、安防系统以及其他需要电子控制的场景。它以可靠性高、响应快速、使用方便而著称,是现代智能控制设备中常见的组件。电磁锁的工作原理是通过电流产生的磁力来实现锁定和解锁,当电流通过电磁线圈时,线圈内会产生强磁场,使金属锁体吸附或释放,从而控制门的开关状态。

电磁锁的基本结构包括线圈、铁芯和锁体。通常情况下,当锁需要处于锁定状态时,通电后的线圈会产生强大的磁力,将锁舌牢牢吸附在锁体内,形成一个封闭的门锁结构。相反,当需要解锁时,切断电源,电磁力随之消失,锁体便会自动释放。由于其操作原理基于电磁效应,电磁锁通常需要稳定的直流电源供电,一般为12V或24V直流电。

电磁锁有多种类型,常见的有普通电磁锁、磁力锁、断电型和通电型。普通电磁锁常用于门禁控制系统,具有高强度的磁力吸附,能够有效防止非法闯入。磁力锁一般安装在门框顶部,通过磁力将门吸住,适用于轻型门的开关控制。断电型电磁锁在断电时解锁,这种设计适用于紧急出口或消防安全通道,确保在断电时门能够自动解锁,方便人员迅速疏散。而通电型电磁锁则相反,在通电时解锁,适用于某些特定的安防场景。

电磁锁的优势在于其耐用性和安全性。由于其内部没有机械活动部件,工作时没有磨损和卡滞,使用寿命长且维护成本较低。与传统机械锁相比,电磁锁的操作也更加安静和稳定,尤其适合对噪音敏感的环境。此外,电磁锁还可以与多种智能设备集成,支持远程控制、指纹识别、密码输入等多种解锁方式,使其广泛应用于现代建筑的安防系统中。

在使用电磁锁时,需要注意供电的稳定性,防止电源波动或中断可能导致的误动作。通常,电磁锁会配备断电保护机制或后备电源,以确保在电力中断的情况下依然能够保持安全性。另外,在实际应用中,电磁锁的安装位置和固定方式会影响其锁紧力。为了确保安全性,必须保证锁具与门体或门框紧密接触,并避免松动或错位。

电磁锁的应用范围涵盖了住宅小区、办公楼、商场、机场、医院等场所。由于其响应快速、锁定力强和易于与电子系统集成,电磁锁在智能门禁系统中占据重要位置,为提升场所的安全性和管理便捷性提供了可靠的解决方案。

【7】MQTT协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级、发布/订阅模式的消息传输协议,专为低带宽、不可靠网络环境设计。它最早由IBM提出,现已成为物联网(IoT)通信的重要协议之一。由于其高效、低功耗和实时性等特点,MQTT在智能家居、工业自动化、远程监控和车联网等领域得到了广泛应用。

MQTT的工作原理基于发布/订阅模型。这种模型有别于传统的客户端-服务器模型,通信方不需要直接建立连接。MQTT由三个核心组件构成:客户端、代理(Broker)和主题(Topic)。客户端可以作为消息的发布者或订阅者,消息通过代理进行路由。代理是一个中间服务端,用于接收和分发来自不同客户端的消息。发布者发送消息到一个特定的主题上,代理负责将这些消息分发给所有订阅了该主题的客户端。通过这种解耦的架构设计,客户端之间可以实现松耦合的通信,降低了复杂性和依赖性。

在MQTT协议中,消息被分为不同的主题(Topic),例如“home/sensor/temperature”可以用来代表温度传感器数据。客户端可以订阅这个主题,当发布者发送新的数据到该主题时,所有订阅该主题的客户端都会收到更新信息。这种灵活的主题结构和层次化的命名规则,使得MQTT在复杂场景下也能快速组织和管理消息流。

MQTT协议支持三种服务质量(QoS)等级,分别为“至多一次”(QoS 0)、“至少一次”(QoS 1)和“仅一次”(QoS 2)。QoS 0表示消息传输尽力而为,可能会丢失或重复;QoS 1确保消息至少送达一次,但可能会有重复;QoS 2则确保消息恰好传输一次,保证消息的严格可靠性。这种设计使MQTT能够适应不同的应用场景,用户可以根据应用需求选择合适的QoS级别。

为了保证通信的安全性,MQTT支持用户名和密码验证,代理可以对连接进行身份认证。此外,许多实现中还支持TLS/SSL加密通信,确保数据在传输过程中不会被窃取或篡改。用户也可以使用不同的认证方式来增强系统的安全性,适应物联网应用中对安全性的高需求。

MQTT非常注重轻量化和低功耗。它的报文头非常小,通信开销很低,这使其特别适合在资源受限的设备或不稳定的网络环境中使用。MQTT支持“保持连接”和“遗嘱消息”功能,客户端可以在连接断开时自动向代理发送遗嘱消息,通知其他客户端连接状态的变化。这种特性有助于提高网络的健壮性和系统的可用性。

MQTT的典型使用场景包括物联网设备数据采集、实时监控、消息推送和控制命令的发布。比如在智能家居中,传感器可以发布环境数据,如温湿度、烟雾浓度等,控制设备根据收到的消息作出响应,实现自动化操作。在工业场景中,MQTT可以帮助收集和管理大规模设备的运行状态,实现集中化和高效的设备监控。

总的来说,MQTT协议凭借其低功耗、高效能、实时性强等优势,已成为物联网通信的主要协议之一。它的发布/订阅模式简化了设备之间的通信,使其特别适合多对多、低延迟、高可靠性的数据传输场景。MQTT易于使用、拓展性强,为开发者提供了灵活的解决方案来构建各种物联网应用。

1.8 参考文献

1. 韩军,胡坤朋.基于STM32的宿舍防火防盗系统[J].电子技术与软件工程,2019. 
2. 苏世雄,刘洲洲,李川等.基于STM32的高校智能宿舍系统研究与设计[J].自动化与仪器仪表,2023. 
3. 李宇航,秦红星,史苗红等.基于STM32的宿舍智能防盗报警系统设计[J].物联网技术,2023. 
4. 麦家裕,吴家辉,伦文康.智能宿舍安全管理系统设计[J].网络安全技术与应用,2021. 
5. 广西民族师范学院.基于物联网技术智慧宿舍系统的设计[J].电子制作,2024. 
6. 史振江.基于stm32单片机的公寓安全控制系统设计与实现[J].石家庄铁路职业技术学院学报,2017. 
7. 陕西铁路工程职业技术学院.基于NB-IoT的校园宿舍智能锁控制系统设计[J].自动化与仪器仪表,2024. 
8. 陆丽娟,刘亚荣,谢晓兰.基于物联网技术的高校宿舍监控管理系统[J].科技和产业,2022. 
9. 沈阳城市建设学院信息与控制工程系.基于物联网的智能宿舍管理系统[J].电子技术与软件工程,2018. 
10. 赵娜,于克龙,王贵和等.基于Android和STM32的学生宿舍智能防盗锁[J].辽东学院学报(自然科学版),2021. 
11. 曲阜师范大学工学院.基于LabVIEW的网络数据管理系统的设计与实现[J].电子技术,2017. 
12. 尹德睿,题原,范高伦.智能高校寝室安全监控和学生管理系统[J].电工技术,2019. 
13. 马光伟,樊广晓,王玉虎等.宿舍用电监控系统设计[J].河南科技学院学报(自然科学版),2020. 
14. 王赜坤,桂玲.基于NB-IoT技术的智能安防监测系统[J].计算机技术与发展,2021. 
15. 王桂君,蒋蓁.基于STM32的室内安防监控系统设计[J].自动化仪表,2020. 
16. 张鹏,苗凤娟,田朋博等.基于stm32学生公寓消防安全监控管理系统V1.0.齐齐哈尔大学;,2021. 
17. 何龙,冉东阳,杨柳.宿舍灯光与预警智能控制系统设计[J].电子制作,2023. 
18. 李鹏霞,李宛睿.高校学生宿舍智慧化管理系统的设计与实现[J].长江信息通信,2023. 
19. 宋耀华,王梅霞.基于物联网技术的宿舍安防系统设计[J].机械与电子,2013. 
20. 任建明,卢宇,管立伟.室内环境无线监控系统的设计[J].信息通信,2017. 
21. 张强志,房楚杰,杨永华等.基于STM32的智能门控安防系统设计[J].嘉应学院学报,2022. 
22. 王欢.基于ZigBee网络的高校宿舍智能安防系统设计[J].襄阳职业技术学院学报,2021. 
23. 武汉理工大学自动化学院.基于NB-IOT的室内环境监测和报警系统[J].科技与创新,2021. 
24. 章魁,卫新华.远程智能安防与控制系统设计与实现[J].科技信息,2012. 
25. He Bai, Yun Gao et al. “Study on College Apartment Fire Monitoring System Based on GSM.” Applied Mechanics and Materials(2014)
26. 王鹏,于润嘉,罗全珍.基于物联网的家庭智慧安防系统设计与实现[J].物联网技术,2020. 
27. Xiangjun Su, G. Guo et al. “Design and Implementation of Dormitory Disciplinary Monitoring and Management System.” Applied Mechanics and Materials(2014)
28. Lele Niu, Zu‐Pei Ou et al. “Design of Indoor Intelligent Alarm System Based on STM32.” Proceedings of the 6th International Conference on Intelligent Information Processing(2021)
29. Fengshan Huang, Shaozi Li et al. “Design on Intelligent Smoke Alarm System.” 2022 12th International Conference on Information Technology in Medicine and Education (ITME)v(2022)
30. Biao Chen, Shihong Qin et al. “Design of Smart Home Control System Based on STM32.” 2021 4th International Conference on Robotics, Control and Automation Engineering (RCAE)(2021)

二、部署华为云物联网平台

华为云官网: https://www.huaweicloud.com/

打开官网,搜索物联网,就能快速找到 设备接入IoTDA

2.1 物联网平台介绍

华为云物联网平台(IoT 设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助我们快速构筑物联网解决方案。

使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台、业务应用和设备。

物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户构建各种物联网解决方案。

设备可以通过固网、2G/3G/4G/5G、NB-IoT、Wifi等多种网络接入物联网平台,并使用LWM2M/CoAP、MQTT、HTTPS协议将业务数据上报到平台,平台也可以将控制命令下发给设备。

业务应用通过调用物联网平台提供的API,实现设备数据采集、命令下发、设备管理等业务场景。

2.2 开通物联网服务

地址: https://www.huaweicloud.com/product/iothub.html

点击立即创建

正在创建标准版实例,需要等待片刻。

创建完成之后,点击实例名称。 可以看到标准版实例的设备接入端口和地址。

在上面也能看到 免费单元的限制。

开通之后,点击总览,也能查看接入信息。 我们当前设备准备采用MQTT协议接入华为云平台,这里可以看到MQTT协议的地址和端口号等信息。

总结:

端口号:   MQTT (1883)| MQTTS (8883
接入地址:ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com

**根据域名地址得到IP地址信息: **

打开Windows电脑的命令行控制台终端,使用ping 命令。ping一下即可。

Microsoft Windows [版本 10.0.19045.4170]
(c) Microsoft Corporation。保留所有权利。

C:\Users\11266>ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com

正在 Ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com [117.78.5.125] 具有 32 字节的数据:
来自 117.78.5.125 的回复: 字节=32 时间=35ms TTL=93
来自 117.78.5.125 的回复: 字节=32 时间=36ms TTL=93
来自 117.78.5.125 的回复: 字节=32 时间=36ms TTL=93
来自 117.78.5.125 的回复: 字节=32 时间=39ms TTL=93

117.78.5.125 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 35ms,最长 = 39ms,平均 = 36ms

C:\Users\11266>

MQTT协议接入端口号有两个,1883是非加密端口,8883是证书加密端口,单片机无法加载证书,所以使用1883端口比较合适。 接下来的ESP8266就采用1883端口连接华为云物联网平台。

2.3 创建产品

(1)创建产品

(2)填写产品信息

根据自己产品名字填写,下面的设备类型选择自定义类型。

(3)产品创建成功

创建完成之后点击查看详情。

(4)添加自定义模型

产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。

模型简单来说: 就是存放设备上传到云平台的数据。

你可以根据自己的产品进行创建。

比如:

烟雾可以叫  MQ2
温度可以叫  Temperature
湿度可以叫  humidity
火焰可以叫  flame
其他的传感器自己用单词简写命名即可。 这就是你的单片机设备端上传到服务器的数据名字。

先点击自定义模型。

再创建一个服务ID。

接着点击新增属性。

2.4 添加设备

产品是属于上层的抽象模型,接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起,完成数据交互。

(1)注册设备

(2)根据自己的设备填写

(3)保存设备信息

创建完毕之后,点击保存并关闭,得到创建的设备密匙信息。该信息在后续生成MQTT三元组的时候需要使用。

(4)设备创建完成

(5)设备详情

2.5 MQTT协议主题订阅与发布

(1)MQTT协议介绍

当前的设备是采用MQTT协议与华为云平台进行通信。

MQTT是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议。MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化,使得其能适应各种物联网应用场景。目前MQTT拥有各种平台和设备上的客户端,已经形成了初步的生态系统。

MQTT是一种消息队列协议,使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合,相对于其他协议,开发更简单;MQTT协议是工作在TCP/IP协议上;由TCP/IP协议提供稳定的网络连接;所以,只要具备TCP协议栈的网络设备都可以使用MQTT协议。 本次设备采用的ESP8266就具备TCP协议栈,能够建立TCP连接,所以,配合STM32代码里封装的MQTT协议,就可以与华为云平台完成通信。

华为云的MQTT协议接入帮助文档在这里: https://support.huaweicloud.com/devg-iothub/iot_02_2200.html

业务流程:

(2)华为云平台MQTT协议使用限制

描述限制
支持的MQTT协议版本3.1.1
与标准MQTT协议的区别支持Qos 0和Qos 1支持Topic自定义不支持QoS2不支持will、retain msg
MQTTS支持的安全等级采用TCP通道基础 + TLS协议(最高TLSv1.3版本)
单帐号每秒最大MQTT连接请求数无限制
单个设备每分钟支持的最大MQTT连接数1
单个MQTT连接每秒的吞吐量,即带宽,包含直连设备和网关3KB/s
MQTT单个发布消息最大长度,超过此大小的发布请求将被直接拒绝1MB
MQTT连接心跳时间建议值心跳时间限定为30至1200秒,推荐设置为120秒
产品是否支持自定义Topic支持
消息发布与订阅设备只能对自己的Topic进行消息发布与订阅
每个订阅请求的最大订阅数无限制

(3)主题订阅格式

帮助文档地址:https://support.huaweicloud.com/devg-iothub/iot_02_2200.html

对于设备而言,一般会订阅平台下发消息给设备 这个主题。

设备想接收平台下发的消息,就需要订阅平台下发消息给设备 的主题,订阅后,平台下发消息给设备,设备就会收到消息。

如果设备想要知道平台下发的消息,需要订阅上面图片里标注的主题。

以当前设备为例,最终订阅主题的格式如下:
$oc/devices/{device_id}/sys/messages/down
    
最终的格式:
$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down

(4)主题发布格式

对于设备来说,主题发布表示向云平台上传数据,将最新的传感器数据,设备状态上传到云平台。

这个操作称为:属性上报。

帮助文档地址:https://support.huaweicloud.com/usermanual-iothub/iot_06_v5_3010.html

根据帮助文档的介绍, 当前设备发布主题,上报属性的格式总结如下:

发布的主题格式:
$oc/devices/{device_id}/sys/properties/report
 
最终的格式:
$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report
发布主题时,需要上传数据,这个数据格式是JSON格式。

上传的JSON数据格式如下:

{
  "services": [
    {
      "service_id": <填服务ID>,
      "properties": {
        "<填属性名称1>": <填属性值>,
        "<填属性名称2>": <填属性值>,
        ..........
      }
    }
  ]
}
根据JSON格式,一次可以上传多个属性字段。 这个JSON格式里的,服务ID,属性字段名称,属性值类型,在前面创建产品的时候就已经介绍了,不记得可以翻到前面去查看。

根据这个格式,组合一次上传的属性数据:
{"services": [{"service_id""stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}

2.6 MQTT三元组

MQTT协议登录需要填用户ID,设备ID,设备密码等信息,就像我们平时登录QQ,微信一样要输入账号密码才能登录。MQTT协议登录的这3个参数,一般称为MQTT三元组。

接下来介绍,华为云平台的MQTT三元组参数如何得到。

(1)MQTT服务器地址

要登录MQTT服务器,首先记得先知道服务器的地址是多少,端口是多少。

帮助文档地址:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home

MQTT协议的端口支持1883和8883,它们的区别是:8883 是加密端口更加安全。但是单片机上使用比较困难,所以当前的设备是采用1883端口进连接的。

根据上面的域名和端口号,得到下面的IP地址和端口号信息: 如果设备支持填写域名可以直接填域名,不支持就直接填写IP地址。 (IP地址就是域名解析得到的)

华为云的MQTT服务器地址:117.78.5.125
华为云的MQTT端口号:1883

如何得到IP地址?如何域名转IP? 打开Windows的命令行输入以下命令。

ping  ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com

(2)生成MQTT三元组

华为云提供了一个在线工具,用来生成MQTT鉴权三元组: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

打开这个工具,填入设备的信息(也就是刚才创建完设备之后保存的信息),点击生成,就可以得到MQTT的登录信息了。

下面是打开的页面:

填入设备的信息: (上面两行就是设备创建完成之后保存得到的)

直接得到三元组信息。

得到三元组之后,设备端通过MQTT协议登录鉴权的时候,填入参数即可。

ClientId  663cb18871d845632a0912e7_dev1_0_0_2024050911
Username  663cb18871d845632a0912e7_dev1
Password  71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237

2.7 模拟设备登录测试

经过上面的步骤介绍,已经创建了产品,设备,数据模型,得到MQTT登录信息。 接下来就用MQTT客户端软件模拟真实的设备来登录平台。测试与服务器通信是否正常。

(1)填入登录信息

打开MQTT客户端软件,对号填入相关信息(就是上面的文本介绍)。然后,点击登录,订阅主题,发布主题。

(2)打开网页查看

完成上面的操作之后,打开华为云网页后台,可以看到设备已经在线了。

点击详情页面,可以看到上传的数据:

到此,云平台的部署已经完成,设备已经可以正常上传数据了。

(3)MQTT登录测试参数总结

MQTT服务器:  117.78.5.125
MQTT端口号:  183

//物联网服务器的设备信息
#define MQTT_ClientID "663cb18871d845632a0912e7_dev1_0_0_2024050911"
#define MQTT_UserName "663cb18871d845632a0912e7_dev1"
#define MQTT_PassWord "71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237"

//订阅与发布的主题
#define SET_TOPIC  "$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down"  //订阅
#define POST_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账号信息。所以,接下来演示一下过程。

地址: https://console.huaweicloud.com/iam/?region=cn-north-4#/iam/users

**【1】获取项目凭证 ** 点击左上角用户名,选择下拉菜单里的我的凭证

项目凭证:

28add376c01e4a61ac8b621c714bf459

【2】创建IAM用户

鼠标放在左上角头像上,在下拉菜单里选择统一身份认证

点击左上角创建用户

创建成功:

【3】创建完成

用户信息如下:

主用户名  l19504562721
IAM用户  ds_abc
密码     DS12345678

2.9 获取影子数据

帮助文档:https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html

设备影子介绍:

设备影子是一个用于存储和检索设备当前状态信息的JSON文档。
每个设备有且只有一个设备影子,由设备ID唯一标识
设备影子仅保存最近一次设备的上报数据和预期数据
无论该设备是否在线,都可以通过该影子获取和设置设备的属性

简单来说:设备影子就是保存,设备最新上传的一次数据。

我们设计的软件里,如果想要获取设备的最新状态信息,就采用设备影子接口。

如果对接口不熟悉,可以先进行在线调试:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow

在线调试接口,可以请求影子接口,了解请求,与返回的数据格式。

调试完成看右下角的响应体,就是返回的影子数据。

设备影子接口返回的数据如下:

{
 "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写代码访问此链接,获取影子数据,完成上位机开发。

链接如下:

https://ad635970a1.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/28add376c01e4a61ac8b621c714bf459/devices/663cb18871d845632a0912e7_dev1/shadow

三、上位机开发

为了方便查看设备上传的数据,接下来利用Qt开发一款Android手机APP 和 Windows上位机。

使用华为云平台提供的API接口获取设备上传的数据,进行可视化显示,以及远程控制设备。

3.1 Qt开发环境安装

Qt的中文官网: https://www.qt.io/zh-cn/![image-20221207160550486](https://led-obs.obs.cn-north-1.myhuaweicloud.com/Blog/img/image-20221207160550486.png)

QT5.12.6的下载地址:https://download.qt.io/archive/qt/5.12/5.12.6

或者去网盘里下载:https://pan.quark.cn/s/145a9b3f7f53

打开下载链接后选择下面的版本进行下载:

qt-opensource-windows-x86-5.12.6.exe 13-Nov-2019 07:28 3.7G Details

软件安装时断网安装,否则会提示输入账户。

安装的时候,第一个复选框里勾选一个mingw 32编译器即可,其他的不管默认就行,直接点击下一步继续安装。

选择MinGW 32-bit 编译器: (一定要看清楚了)

说明: 我这里只是介绍PC端,也就是Windows系统下的Qt环境搭建。 Android的开发环境比较麻烦,如果想学习Android开发,想编译Android程序的APP,需要自己去搭建Android环境。

也可以看下面这篇文章,不过这个文章是在Qt开发专栏里付费的,需要订阅专栏才可以看。 如果不想付费看,也可以自行找其他教程,自己搭建好必须的环境就行了

Android环境搭建的博客链接: https://blog.csdn.net/xiaolong1126626497/article/details/117254453

3.2 新建上位机工程

前面2讲解了需要用的API接口,接下来就使用Qt设计上位机,设计界面,完成整体上位机的逻辑设计。

【1】新建工程

【2】设置项目的名称。

【3】选择编译系统

【4】选择默认继承的类

【5】选择编译器

【6】点击完成

【7】工程创建完成

3.3 设计UI界面与工程配置

【1】打开UI文件

打开默认的界面如下:

【2】开始设计界面

根据自己需求设计界面。

3.5 编译Windows上位机

点击软件左下角的绿色三角形按钮进行编译运行。

3.6 配置Android环境

如果想编译Android手机APP,必须要先自己配置好自己的Android环境。(搭建环境的过程可以自行百度搜索学习)

然后才可以进行下面的步骤。

【1】选择Android编译器

【2】创建Android配置文件

创建完成。

【3】配置Android图标与名称

【3】编译Android上位机

Qt本身是跨平台的,直接选择Android的编译器,就可以将程序编译到Android平台。

然后点击构建。

成功之后,在目录下可以看到生成的apk文件,也就是Android手机的安装包,电脑端使用QQ发送给手机QQ,手机登录QQ接收,就能直接安装。

生成的apk的目录在哪里呢? 编译完成之后,在控制台会输出APK文件的路径。

知道目录在哪里之后,在Windows的文件资源管理器里,找到路径,具体看下图,找到生成的apk文件。

D:/linux-share-dir/QT/build-app_Huawei_Eco_tracking-Android_for_arm64_v8a_Clang_Qt_5_12_6_for_Android_ARM64_v8a-Release/android-build//build/outputs/apk/debug/android-build-debug.apk

四、STM32代码开发

4.1 硬件接线说明

1】 BC26-NBIOT模块 接线
PA2------>BC26的RXD
PA3------>BC26的TXD
PB6------>BC26的RST(复位脚)
GND---GND 地
VCC---VCC 电源(5.0V)



2】 TFT 1.44 寸彩屏接线
GND   电源地
VCC   3.3v电源
SCL   接PC8(SCL)
SDA   接PC9(SDA)
RST   接PC10
DC    接PB7
CS    接PB8
BL   接PB11



3】电力信息检测模块---波特率9600
PD2(RX)  ----->模块的TXD
PC12(TX) ----->模块的RXD
VCC----------5V
GND----------GND


【4】蜂鸣器
GND----GND
VCC---3.3V
OUT---PC7


【5】MQ2烟雾浓度检测
DO---PC0
AO---PA1
GND---GND 地
VCC---VCC 电源(5.0V)


【6】火焰检测
GND----GND
VCC---5V
OUT---PC0


【7】人体检测
GND----GND
VCC---5V
OUT---PC1


【7】门锁开关
GND----GND
VCC---5V
OUT---PC2



【8】板载LED灯接线(这个不用接,这是开发板本身的)
LED1---PA8
LED2---PD2


【9】板载按键接线(这个不用接,这是开发板本身的)
K0---PA0 
K1---PC5 
K2---PA15

4.2 原理图

4.3 框架图

4.4 程序下载

打STM32的keil工程,编译代码、然后,使用USB线将开发板的左边的USB口(串口1)与电脑的USB连接,打开程序下载软件下载程序。

具体下载过程看下面图:

打开程序下载软件:[软件就在资料包里的软件工具目录下]

4.5 程序正常运行效果

设备运行过程中会通过串口打印调试信息,我们可以通过串口打印了解程序是否正常。

程序下载之后,可以打开串口调试助手查看程序运行的状态信息。[软件就在资料包里的软件工具目录下]

4.6 主项目的逻辑代码

下面是提供的项目主项目的伪代码。展示整个项目的运行逻辑思路。

#include "stm32f10x.h"
#include "lcd.h"
#include "nbiot.h"
#include "mq2.h"
#include "flame_sensor.h"
#include "pir_sensor.h"
#include "power_module.h"
#include "door_lock.h"
#include "buzzer.h"
#include "keypad.h"
#include "usart.h"
#include "cloud_comm.h"

// 定义报警阈值
#define CURRENT_THRESHOLD 10.0
#define POWER_THRESHOLD 50.0

// 初始化函数声明
void System_Init(void);
void Flame_Detection_Handler(void);
void Smoke_Detection_Handler(void);
void Human_Detection_Handler(void);
void Power_Monitoring_Handler(void);
void Door_Control_Handler(void);

int main(void) {
    // 系统初始化
    System_Init();
    
    while (1) {
        // 火焰检测处理
        Flame_Detection_Handler();

        // 烟雾检测处理
        Smoke_Detection_Handler();

        // 人体检测处理
        Human_Detection_Handler();

        // 电力监控处理
        Power_Monitoring_Handler();

        // 门磁控制处理
        Door_Control_Handler();

        // 其他操作,可以添加延时或功耗管理策略等
    }
}

void System_Init(void) {
    // 初始化外设和模块
    LCD_Init();
    NBIOT_Init();
    MQ2_Init();
    FlameSensor_Init();
    PIRSensor_Init();
    PowerModule_Init();
    DoorLock_Init();
    Buzzer_Init();
    Keypad_Init();
    USART_Init();
    CloudComm_Init();

    LCD_DisplayString("System Initialized");
}

// 火焰检测处理函数
void Flame_Detection_Handler(void) {
    if (FlameSensor_Detect()) {
        Buzzer_On();
        LCD_DisplayString("Flame Detected!");
        CloudComm_SendAlert("Flame detected in room!");
    } else {
        Buzzer_Off();
    }
}

// 烟雾检测处理函数
void Smoke_Detection_Handler(void) {
    if (MQ2_DetectSmoke()) {
        Buzzer_On();
        LCD_DisplayString("Smoke Detected!");
        CloudComm_SendAlert("Smoke detected in room!");
    } else {
        Buzzer_Off();
    }
}

// 人体检测处理函数
void Human_Detection_Handler(void) {
    if (PIRSensor_Detect()) {
        LCD_DisplayString("Human Detected");
        CloudComm_SendData("Human detected in the room.");
    }
}

// 电力监控处理函数
void Power_Monitoring_Handler(void) {
    float current = PowerModule_GetCurrent();
    float power = PowerModule_GetPower();

    // 显示电力信息
    LCD_DisplayPower(current, power);

    // 超过阈值时报警并切断电源
    if (current > CURRENT_THRESHOLD || power > POWER_THRESHOLD) {
        Buzzer_On();
        LCD_DisplayString("Power Overload!");
        PowerModule_Disconnect();
        CloudComm_SendAlert("Power overload detected!");
    } else {
        Buzzer_Off();
    }
}

// 门磁控制处理函数
void Door_Control_Handler(void) {
    if (Keypad_Pressed()) {
        DoorLock_Open();
        CloudComm_SendData("Door opened via local keypad.");
    }

    // 远程开门请求处理
    if (CloudComm_ReceiveCommand() == OPEN_DOOR_COMMAND) {
        DoorLock_Open();
        CloudComm_SendData("Door opened via remote control.");
    }
}

4.7 MQTT协议设计

下面是BC26模块的子模块代码框架,展示了如何利用BC26 NB-IoT模块实现数据的初始化、发送和接收功能。

#include "bc26.h"
#include "usart.h"
#include <string.h>

// 发送和接收缓冲区
#define BC26_BUFFER_SIZE 256
static char txBuffer[BC26_BUFFER_SIZE];
static char rxBuffer[BC26_BUFFER_SIZE];

// 内部函数声明
static void BC26_SendCommand(const char* command);
static int BC26_WaitForResponse(const char* expectedResponse, uint32_t timeout);

// 初始化BC26模块
void BC26_Init(void) {
    // 配置USART用于通信
    USART_Config();

    // 复位BC26模块
    BC26_SendCommand("AT+NRB\r");
    if (BC26_WaitForResponse("OK"5000) != 0) {
        // 复位失败处理
        LCD_DisplayString("BC26 Reset Failed");
        return;
    }
    LCD_DisplayString("BC26 Initialized");

    // 配置BC26为NB-IoT网络
    BC26_SendCommand("AT+CGATT=1\r"); // 附着网络
    if (BC26_WaitForResponse("OK"3000) != 0) {
        LCD_DisplayString("Network Attach Failed");
        return;
    }

    // 配置MQTT连接(示例)
    BC26_SendCommand("AT+QMTCFG=\"version\",0,4\r");
    BC26_WaitForResponse("OK"2000);
}

// 发送数据到云平台
int BC26_SendData(const char* topic, const char* payload) {
    // 设置发送MQTT消息
    snprintf(txBuffer, sizeof(txBuffer), "AT+QMTPUB=0,0,0,0,\"%s\"\r", topic);
    BC26_SendCommand(txBuffer);

    if (BC26_WaitForResponse(">"2000) != 0) {
        return -1// 等待消息提示失败
    }

    // 发送实际消息负载
    BC26_SendCommand(payload);
    BC26_SendCommand("\x1A"); // 结束符(Ctrl+Z)
    return BC26_WaitForResponse("OK"5000);
}

// 接收数据
int BC26_ReceiveData(char* buffer, size_t bufferSize) {
    // 监听来自BC26的数据
    size_t len = USART_ReceiveData(buffer, bufferSize, 1000);
    if (len > 0) {
        buffer[len] = '\0'// 确保字符串以NULL结尾
        return len;
    }
    return 0// 无数据接收
}

// 内部函数实现

// 发送命令
static void BC26_SendCommand(const char* command) {
    USART_SendString(command);
}

// 等待特定响应
static int BC26_WaitForResponse(const char* expectedResponse, uint32_t timeout) {
    uint32_t startTime = HAL_GetTick();
    while ((HAL_GetTick() - startTime) < timeout) {
        size_t len = USART_ReceiveData(rxBuffer, sizeof(rxBuffer) - 1100);
        if (len > 0) {
            rxBuffer[len] = '\0';
            if (strstr(rxBuffer, expectedResponse) != NULL) {
                return 0// 找到期望响应
            }
        }
    }
    return -1// 超时或失败
}

4.8 MQ2烟雾检测

在这个项目中,MQ2传感器用于烟雾检测。MQ2传感器的输出是一个模拟信号,需要通过ADC(模拟到数字转换器)读取数据,并根据读取的值来判断是否发生烟雾或气体泄漏。

#include "stm32f10x.h"
#include "MQ2.h"
#include "stdio.h"

#define MQ2_ADC_CHANNEL  0  // 假设MQ2连接在ADC通道0
#define MQ2_THRESHOLD    3000 // 假设阈值为3000,可以根据实际情况调整

// 定义函数原型
void MQ2_Init(void);
uint16_t MQ2_Read(void);
void MQ2_Process(void);

// 初始化MQ2传感器
void MQ2_Init(void) {
    // 配置ADC
    ADC_InitTypeDef ADC_InitStructure;
    ADC_CommonInitTypeDef ADC_CommonInitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    // 开启ADC和GPIO时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);

    // 配置GPIO:假设MQ2传感器连接在PA0引脚
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // 设置为模拟输入模式
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置ADC
    ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; // 设置ADC预分频器
    ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
    ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
    ADC_CommonInit(&ADC_CommonInitStructure);

    ADC_InitStructure.ADC_ScanConvMode = DISABLE;    // 单通道模式
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 连续转换
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; // 软件触发
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 右对齐
    ADC_InitStructure.ADC_NbrOfChannel = 1;  // 只有一个通道
    ADC_Init(ADC1, &ADC_InitStructure);

    // 启动ADC
    ADC_Cmd(ADC1, ENABLE);
    ADC_ResetCalibration(ADC1);
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN) == RESET);
    ADC_StartCalibration(ADC1);
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_ADCAL) != RESET);
}

// 读取MQ2传感器数据
uint16_t MQ2_Read(void) {
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);  // 启动转换
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);  // 等待转换完成
    return ADC_GetConversionValue(ADC1);  // 返回转换结果
}

// 处理MQ2传感器数据
void MQ2_Process(void) {
    uint16_t MQ2_value = MQ2_Read();
    printf("MQ2 Sensor Value: %d\n", MQ2_value);

    // 判断是否超过烟雾阈值
    if (MQ2_value > MQ2_THRESHOLD) {
        printf("Warning: Smoke detected!\n");
        // 在此触发报警或者其他动作,比如蜂鸣器
        // Beeper_Alarm();
    } else {
        printf("No smoke detected.\n");
    }
}

代码说明

  1. 1. MQ2_Init函数:初始化ADC和GPIO模块,为读取MQ2传感器的模拟信号做准备。GPIOA引脚0被配置为模拟输入模式,供ADC读取数据。ADC1的相关配置包括单通道模式、连续转换模式以及数据右对齐。

  2. 2. MQ2_Read函数:启动ADC转换,等待转换完成后返回转换值。这个值是MQ2传感器的模拟电压值被转换成的数字信号。根据这个值,可以推断烟雾的浓度。

  3. 3. MQ2_Process函数:这是一个高层处理函数,它读取MQ2传感器的值,并判断值是否超过预设的阈值。如果超过阈值,则认为发生了烟雾或有害气体泄漏,并进行报警处理(此处通过打印信息显示报警状态)。

五、总结

本项目设计并实现了一种基于STM32微控制器和NB-IoT通信技术的宿舍安防控制系统,结合了多种传感器和智能控制模块,提供了全方位的安全保障。通过硬件和软件的综合设计,系统能够实时监测宿舍环境的各种安全参数,并能够在发生火焰、烟雾、电气异常等危险情况时自动触发报警。项目的主要功能包括火焰检测、烟雾检测、门磁控制、人体感应、电气监测以及远程数据监控,充分实现了智能化安防的目标。

系统特点

  1. 1. 多种传感器集成:系统集成了MQ2烟雾传感器、火焰传感器、人体感应传感器、电流电压采集模块等硬件,能够多角度实时检测宿舍内的安全状况。

  2. 2. 报警和控制功能:当检测到火焰、烟雾、人体移动或电气参数异常时,系统会通过蜂鸣器报警,并可以通过本地按键或远程控制(通过手机APP或PC上位机)进行门锁控制和其他应急措施。

  3. 3. 电气监测与保护:系统具备电气监测功能,能够实时检测直流电和单相交流电的电压、电流、功率等参数,并在电流或功率超过设定阈值时自动切断电源,确保用电安全。

  4. 4. 数据云端管理:通过NB-IoT通信模块和MQTT协议,系统能够将采集到的数据上传至华为云物联网平台,实现数据的远程监控和设备的远程管理。用户可以通过Android手机APP远程查看设备状态、调整参数并进行控制。

  5. 5. 本地显示功能:1.44寸LCD显示屏提供了实时的本地数据显示,用户可以直接在本地查看传感器的实时数据和报警状态,增强了系统的用户友好性和可操作性。

项目实现过程

项目的实现过程中,在硬件设计阶段选择了合适的传感器和控制模块,确保能够高效地进行火焰、烟雾、人体感应及电气参数的实时检测。STM32F103RCT6微控制器作为主控芯片,提供了足够的处理能力来支持各个传感器的数据采集和处理。

在软件开发方面,使用Keil5开发环境,编写了包括硬件初始化、传感器数据采集、报警逻辑、LCD显示及NB-IoT通信的完整代码。数据上传功能通过MQTT协议实现,确保了数据能够稳定、安全地传输到云端平台。

遇到的挑战与解决方案

  1. 1. 传感器调试与灵敏度调整:由于不同传感器对环境因素的响应差异较大,调试过程中需要精确设置各传感器的阈值。例如,MQ2烟雾传感器对气体的反应受环境湿度、温度等因素的影响较大,通过反复测试和调整,最终确定了合理的触发阈值。

  2. 2. NB-IoT通信稳定性:NB-IoT模块需要良好的信号覆盖以保证数据上传的稳定性。为此,项目在硬件设计时加强了天线的布置,并对NB-IoT模块的参数进行了多次优化测试,确保了数据传输的可靠性。

  3. 3. 系统功耗优化:由于该系统需要长时间运行,为了延长设备的使用寿命,采用了低功耗设计,如适时的休眠模式和合理的电源管理策略,确保了系统的高效能和低功耗。

项目创新点

  1. 1. 集成化设计:本项目通过将多种传感器(如火焰、烟雾、人体、气体、电气参数等)和控制模块(如门锁控制、蜂鸣器报警)集成在一个系统中,实现了全方位的安防监控,提升了宿舍的安全性。

  2. 2. 云端与远程控制:通过NB-IoT通信和MQTT协议,系统不仅支持本地控制,还可以通过云平台进行远程管理和控制。这种设计为宿舍管理者提供了便捷的实时监控和远程操作功能,增强了系统的智能化和便捷性。

  3. 3. 数据安全与监控:通过将实时监测数据上传到华为云物联网平台,确保了数据的安全存储与备份,同时用户可以随时查看设备状态,并根据实际情况进行调整,保证了宿舍环境的安全和舒适。


DS小龙哥 嵌入式技术资讯
不定时更新STM32、物联网、linux驱动、QT等技术文章;打造嵌入式开发相关知识分享、技术交流平台
 最新文章