一、前言
1.1 项目开发背景
文物作为人类历史文明的珍贵遗存,承载着不可替代的文化价值与历史信息。在博物馆的日常陈列展示过程中,环境因素对文物的长期保存具有至关重要的影响。温度、湿度、光照强度、有害气体浓度以及人为或意外造成的震动冲击,都可能对脆弱敏感的文物材质造成不可逆的损伤。传统的文物展柜多采用人工巡检和定期记录的方式管理环境参数,这种方式不仅效率低下、实时性差,而且难以及时发现和应对突发性的环境异常状况。随着物联网技术的快速发展和普及,将智能感知、自动控制、远程监控等技术手段引入文物保护领域,实现展柜环境的全天候自动化监测与智能调控,已成为提升文物保护水平的重要发展方向。
基于上述需求,本项目设计并实现了一套基于ESP32的智能文物展柜监控系统。该系统以ESP32-S3高性能微控制器为核心,集成SHT30温湿度传感器、BH1750光敏传感器、MQ135有害气体传感器、SW-420振动传感器以及HC-SR04超声波测距传感器等多种感知元件,对展柜内部及周边环境进行全方位、多维度的实时监测。系统具备智能化的自动控制能力,当环境参数超出预设的安全阈值时,能够自主执行相应的调控措施,如开启风扇通风换气、调整照明灯光照强度、触发蜂鸣器与LED闪光灯进行本地声光报警等,有效保障文物处于稳定适宜的保存环境之中。同时,系统还设计了手动与自动两种运行模式,既能够在自动模式下独立完成智能管控,也支持管理人员通过手机APP或本地按键进行人工干预和远程操作,兼顾了系统的智能化与灵活性。
在数据通信与云端管理层面,系统借助中国移动OneNet物联网平台的MQTT服务器实现设备数据上云,将采集到的温湿度、光照强度、有害气体浓度、震动状态、测距结果以及设备运行状态等关键属性字段定时上报至云端,同时支持从云端下发控制指令实现远程参数设置和设备操控。OneNet平台自身提供的历史数据存储、温湿度变化曲线展示以及CSV格式数据导出等功能,为文物保护工作者提供了便捷的数据追溯与分析工具,有助于长期跟踪展柜环境的演变趋势,为文物保护策略的制定提供科学的数据支撑。手机APP采用Qt(C++)框架进行跨平台开发,可同时运行于Android手机和Windows电脑之上,用户界面简洁直观,能够实时拉取和展示设备上传的最新数据,并支持远程调节温度、湿度、光照强度报警阈值,手动控制照明灯与风扇的开关,以及切换系统运行模式,真正实现了随时随地掌握展柜动态、远程操控管理的目的。
在人机交互与公众服务方面,系统在展柜前方部署了HC-SR04超声波测距传感器,用于实时检测游客与展柜之间的距离。当ESP32检测到有游客过于靠近展柜时,系统会自动触发CH9300-FL语音播报模块,播放预先存储的文物介绍音频,既起到提醒游客保持安全观赏距离的作用,又兼具文物知识讲解的公众教育功能,丰富了博物馆的观展体验。展柜本体配备的0.96寸OLED显示屏则能够就地循环展示环境光强、温湿度、有害气体浓度、运行模式、测距数值、开关状态以及各项报警阈值等关键信息,方便现场管理人员快速直观地了解展柜运行状况,提升了设备维护的便捷性。
本项目的实施,将物联网感知技术、自动控制技术、云端数据处理技术与文物保护实际需求深度融合,构建了一套功能完备、响应及时、操作便捷的智能文物展柜监控系统。它不仅从技术层面解决了传统文物保护中环境监测滞后、异常处置不及时等痛点问题,更通过远程化、数据化的管理方式降低了博物馆运维的人力成本和管理难度,为馆藏文物的预防性保护提供了切实可行的技术方案。同时,系统所采用的开源开发框架、标准化的通信协议以及跨平台的应用程序设计思路,也为同类型物联网监控系统的开发与推广提供了可借鉴的技术范式和工程实践参考。
1.2 设计实现的功能
(1)环境温湿度实时监测:通过SHT30温湿度传感器实时采集展柜内部的温度与湿度数据,并在本地OLED显示屏和远程手机APP上同步显示,为文物保存环境的评估提供基础数据支撑。
(2)光照强度监测与智能调控:采用BH1750光敏传感器监测展柜内的光照强度,当检测到的光照强度超出用户设定的阈值上限时,系统自动关闭照明灯;当光照强度低于设定范围时,系统自动开启照明灯,确保文物始终处于适宜的光照环境之中,避免光辐射对文物的损害。
(3)有害气体检测与本地声光报警:利用MQ135传感器实时监测展柜内的有害气体浓度,当检测到有害气体浓度异常上升并超过安全范围时,系统自动启动风扇进行通风换气,同时触发有源蜂鸣器发出声音报警,并驱动LED闪光灯进行闪烁警示,实现本地化的声光双重报警,及时提醒现场工作人员采取措施。
(4)震动与异常开启检测及远程预警:通过SW-420振动传感器检测展柜是否遭受异常震动或非正常开启,当传感器触发时,系统立即驱动蜂鸣器发出报警声响,并通过Wi-Fi网络向OneNet物联网平台推送紧急预警信息,手机APP从云端拉取该预警状态后向用户展示,实现对展柜安全状况的远程实时监控。
(5)Wi-Fi数据上云与OneNet物联网平台接入:设备通过Wi-Fi模块连接互联网,采用MQTT协议接入中国移动OneNet物联网平台,将采集到的环境光强、温度、湿度、有害气体浓度、风扇开关状态、照明灯开关状态、运行模式、温湿度报警阈值、光强阈值、震动状态以及超声波测距数据等属性字段,按照规定的JSON格式定时发布至云端指定主题,实现设备数据的云端汇聚与持久化存储。
(6)手机APP远程数据查看:Android手机APP和Windows电脑APP通过Qt(C++)跨平台框架开发,APP从OneNet服务器拉取设备最新上传的各项数据,以图形化界面清晰展示环境光强、温湿度、有害气体浓度、测量距离、运行模式、各开关状态及报警阈值等全部属性信息,使用户能够随时随地掌握展柜实时状况。
(7)手机APP远程参数阈值设置:用户可通过手机APP远程修改温度上限报警阈值、湿度上限报警阈值以及光照强度上限阈值,修改后的参数经OneNet平台下发至ESP32设备端,设备接收到新阈值后更新本地存储并立即生效,实现对报警灵敏度的远程灵活调节。
(8)手机APP远程手动控制设备:支持通过手机APP远程手动控制展柜照明灯的开启与关闭,以及风扇的启动与停止,方便管理人员在特殊情况下进行人工干预操作。
(9)自动模式与手动模式双运行机制:系统提供自动模式和手动模式两种运行状态。在自动模式下,报警功能、风扇的自动启停控制以及照明灯的自动开关控制全部生效,系统根据传感器数据自主决策和执行调控动作。在手动模式下,所有的报警功能和自动控制逻辑均被禁用,用户通过本地或远程方式手动控制照明灯和风扇的开关,系统仅执行数据采集与上传工作。
(10)本地按键与远程APP双途径模式切换:支持通过展柜本体上的物理按键进行运行模式的本地切换操作,同时也支持用户通过手机APP远程下发指令切换系统运行模式,两种切换方式互为补充,提高了系统操控的灵活性和可靠性。
(11)游客距离检测与语音播报功能:采用HC-SR04超声波测距传感器安装在展柜前方,实时检测游客与展柜之间的距离。当ESP32检测到游客距离过近(小于预设的安全距离)时,自动触发CH9300-FL语音播报模块,播放预先通过电脑拷贝存储至模块内部的文物介绍音频文件,既起到安全距离提醒作用,又实现了文物的自动化语音导览讲解功能。
(12)本地OLED显示屏信息展示:展柜配备0.96寸IIC接口OLED显示屏,采用分页切换方式循环显示环境光强、环境温度、环境湿度、有害气体浓度、运行模式、测量距离、风扇开关状态、照明灯开关状态、温度阈值、湿度阈值、光强阈值等全部关键信息,方便现场管理人员直观了解设备运行状态。
(13)OneNet平台历史数据管理与分析:依托OneNet物联网平台自身提供的历史数据存储和检索功能,用户可登录OneNet平台后台查看设备上传的历史数据记录,查看温湿度随时间变化的趋势曲线,并支持将历史数据导出为CSV格式文件,便于使用Excel等电子表格软件进行进一步的数据处理、统计分析和报表生成。
(14)跨平台上位机APP开发与运行:上位机APP采用Qt 5.12.6版本和C++编程语言进行开发,在Windows 10操作系统环境下编译,最终生成同时支持Windows操作系统和Android移动操作系统的应用程序安装包,一套代码实现双平台覆盖,有效降低了开发和维护成本。
(15)设备异常状态本地综合警示:当系统检测到有害气体浓度超标或震动传感器被触发时,除了启动风扇和蜂鸣器报警外,LED闪光灯以一定频率闪烁,形成声、光、通风联动的综合警示与应急响应机制,确保异常情况能够被及时发现和处置。
1.3 项目硬件模块组成
(1)主控制器:采用ESP32-S3核心板作为系统主控单元,负责传感器数据采集、逻辑运算处理、外围设备控制、Wi-Fi通信以及MQTT协议数据收发等全部核心功能。
(2)温湿度传感器:采用SHT30数字温湿度传感器,通过IIC总线协议与ESP32-S3通信,用于实时采集展柜内部的温度与湿度数据,测量精度高、响应速度快。
(3)光敏传感器:采用BH1750数字光强度传感器,通过IIC总线协议与主控芯片通信,用于监测展柜内部及周围环境的光照强度,量程范围宽,适用于博物馆展柜的照度监测需求。
(4)有害气体传感器:采用MQ135空气质量传感器,输出模拟电压信号经ESP32-S3内部ADC模数转换后读取,用于检测展柜内氨气、苯、烟雾等有害气体浓度,保障文物免受空气污染物侵蚀。
(5)振动传感器:采用SW-420常闭型振动传感器模块,输出数字高低电平信号,用于检测展柜是否遭受异常震动或非正常开启,灵敏度可通过模块上电位器调节。
(6)超声波测距传感器:采用HC-SR04超声波测距模块,通过GPIO引脚触发测距并读取回波脉冲宽度,用于检测展柜前方游客与展柜之间的距离,测距范围2cm至400cm。
(7)语音播报模块:采用CH9300-FL语音播报模块(内置16M FLASH存储空间),支持通过电脑USB接口直接拷贝语音文件存储至模块内部,单片机通过控制多个IO口输出高低电平组合来触发模块内部对应索引的语音片段播放,用于文物介绍音频的自动播报。
(8)OLED显示屏:采用0.96寸OLED显示模块,分辨率为128×64像素,通过IIC总线协议与主控芯片通信,用于本地循环展示环境参数、运行状态、开关状态及报警阈值等各类信息。
(9)蜂鸣器:采用高电平触发的有源蜂鸣器模块,通过GPIO引脚输出高电平驱动发声,用于系统异常报警时的声音警示。
(10)LED照明灯:采用白色高亮度LED灯珠模块,通过GPIO引脚输出高低电平控制其亮灭,模拟展柜内部照明光源,配合BH1750传感器实现自动或手动的照明控制。
(11)LED闪光灯:采用高亮红色或彩色LED模块,通过GPIO引脚输出PWM或高低电平控制闪烁,用于异常报警时的灯光闪烁警示。
(12)风扇模块:采用5V直流电机驱动的小型风扇模块,通过MOS管或继电器驱动电路由GPIO引脚控制其启停,用于有害气体超标时展柜内部的通风换气。
(13)Wi-Fi通信模块:采用ESP32-S3核心板自带的2.4GHz Wi-Fi模块,支持802.11 b/g/n协议,用于连接无线路由器接入互联网,实现与OneNet物联网平台的MQTT数据通信。
(14)按键模块:采用独立式物理按键(轻触开关),通过GPIO引脚检测按键按下状态,用于本地切换系统运行模式(自动/手动)以及其他本地控制操作。
(15)电源供电模块:采用USB 5V直流电源适配器或锂电池供电方案,为ESP32-S3核心板、传感器模块、风扇、蜂鸣器、LED照明灯等全部硬件提供稳定的工作电源,并根据需要配备稳压降压电路确保各模块电压需求匹配。
1.4 系统框架图
1.5 运行流程图
二、硬件选型
(1)主控制器选型:选用乐鑫ESP32-S3核心板作为主控制器。ESP32-S3搭载Xtensa® 32位LX7双核处理器,主频高达240MHz,内置512KB SRAM和16MB Flash,具备强大的运算能力和充足的内存资源,能够高效处理多传感器数据采集、PID算法运算、MQTT协议栈运行以及Wi-Fi通信等复杂任务。该芯片支持2.4GHz Wi-Fi 802.11 b/g/n和Bluetooth 5.0双模通信,满足设备联网需求。同时ESP32-S3具备丰富的外设接口,包括多路IIC、SPI、UART、ADC、GPIO等,可同时连接本项目所需的全部传感器和执行器件,且该芯片在VSCode+ESP-IDE开发环境下支持C语言编程,生态成熟、开发资源丰富,是物联网终端设备的理想主控方案。
(2)温湿度传感器选型:选用SHT30数字温湿度传感器。该传感器采用IIC数字输出接口,与ESP32-S3通信简便,无需额外ADC转换电路。SHT30的湿度测量精度为±3%RH,温度测量精度为±0.3℃,测量范围覆盖-40℃至125℃以及0至100%RH,完全满足展柜环境监测的精度和量程要求。相比同类型传感器,SHT30具有长期稳定性好、抗干扰能力强、功耗低等优点,且模块化封装便于直接焊接或插接使用,适合博物馆展柜的长期可靠运行需求。
(3)光敏传感器选型:选用BH1750FVI数字光强度传感器。该传感器采用IIC数字接口输出环境光照度数值,量程范围为1至65535勒克斯,分辨率为1勒克斯,能够精确测量展柜内的光照强度。BH1750内置16位高精度AD转换器,无需外部元件即可直接输出数字光照度值,光谱响应特性接近人眼视觉函数,测量数据准确可靠。其低功耗特性(待机电流小于1μA)和宽工作电压范围(2.4V至3.6V)使其非常适合电池供电或USB供电的物联网设备,尺寸小巧便于集成在展柜狭小空间内。
(4)有害气体传感器选型:选用MQ135空气质量传感器。该传感器对氨气、氮氧化物、苯、烟雾等多种有害气体具有较高的灵敏度,检测浓度范围为10至1000ppm,适用于展柜内空气质量的定性监测。MQ135采用模拟电压输出方式,通过ESP32-S3内置的ADC引脚采集电压值换算气体浓度,电路连接简单可靠。该传感器价格低廉、响应速度快(小于1秒)、使用寿命长,在工业及民用空气质量监测领域应用广泛,对于展柜内突发性的有害气体浓度升高能够及时响应。
(5)振动传感器选型:选用SW-420常闭型振动传感器模块。该模块采用高灵敏度振动开关元件,配合LM393电压比较器,输出数字电平信号(常闭状态下输出低电平,振动触发时输出高电平),可直接连接ESP32-S3的GPIO引脚进行中断或轮询检测。模块板载电位器可调节振动灵敏度,以适应不同场景的监测需求。该传感器结构简单、功耗极低、响应迅速,能够有效检测展柜受到敲击、移动或异常开启等振动事件,适合作为安防触发元件使用。
(6)超声波测距传感器选型:选用HC-SR04超声波测距模块。该模块测距范围2cm至400cm,测量精度可达3mm,工作电压为5V,通过Trig引脚触发测距、Echo引脚输出回波脉冲,测量原理成熟且易于实现。HC-SR04价格低廉、性能稳定、抗干扰能力强,广泛应用于机器人避障和距离测量场景。本项目中将其安装在展柜前方,能够精确检测游客与展柜之间的距离,触发距离精度满足语音播报触发要求,性价比极高。
(7)语音播报模块选型:选用CH9300-FL语音播报模块,内置16M字节FLASH存储空间。该模块支持通过电脑USB接口以U盘方式直接拷贝MP3或WAV格式语音文件至内部FLASH,文件管理方便,无需专用烧录器。模块通过多个IO口的高低电平组合触发对应索引的语音片段播放,ESP32-S3仅需控制若干GPIO引脚即可实现指定语音的播报控制,无需复杂通信协议。16M存储空间足以存储多段文物介绍音频,满足展柜多件文物轮换展示的语音播放需求,且模块体积小、工作稳定、播放音质清晰。
(8)OLED显示屏选型:选用0.96寸OLED显示模块,分辨率为128×64像素,采用IIC通信接口(SSD1306驱动芯片)。该模块自发光、对比度高、可视角度大、功耗低,在黑暗的展柜环境中显示效果出色。IIC接口仅需占用SDA和SCL两根信号线加电源和地线共四个引脚,连接简洁,与SHT30、BH1750等传感器可共用IIC总线,有效节省ESP32-S3的GPIO资源。该模块支持中英文字符和图形显示,足以清晰展示三页循环切换的全部环境参数和状态信息。
(9)蜂鸣器选型:选用高电平触发的有源蜂鸣器模块。有源蜂鸣器内部自带振荡源,通电即发出固定频率的蜂鸣声,控制方式简单,ESP32-S3的GPIO引脚输出高电平即可驱动发声,低电平关闭,无需PWM输出。该蜂鸣器工作电压为3.3V至5V,发声响度可达85dB以上,足以在展柜区域起到声音警示作用,且价格低廉、响应速度快,适合作为报警提示器件使用。
(10)LED照明灯选型:选用白色高亮度直插式或贴片式LED灯珠模块,配合限流电阻使用,工作电压为3.3V,由ESP32-S3的GPIO引脚直接驱动控制。白色LED发光效率高、热量低、寿命长,适合作为展柜内部照明光源,在满足文物照明需求的同时不会产生过多的热辐射,配合光照度传感器可实现恒照度智能控制。
(11)LED闪光灯选型:选用高亮红色LED灯珠模块,工作电压3.3V,由ESP32-S3的GPIO引脚输出高低电平交替控制其快速闪烁。红色光穿透力强、警示效果明显,在发生有害气体超标或震动报警时闪烁,配合蜂鸣器声音报警形成声光联动的警示效果,提高异常状态的察觉率。
(12)风扇模块选型:选用5V直流电机驱动的小型轴流风扇模块,直径约40mm至60mm,额定电流约0.1A至0.2A。由于ESP32-S3的GPIO引脚驱动能力不足,采用S8050三极管或MOSFET开关管搭建驱动电路,通过GPIO高低电平控制风扇的启停。该风扇体积小巧、风量适中、噪声低,适合展柜内部有限空间的通风换气需求,在有害气体浓度超标时可迅速降低有害气体聚集浓度。
(13)按键模块选型:选用轻触式微动开关(6mm×6mm规格),配合上拉电阻组成独立按键电路,按下时GPIO引脚检测到低电平触发。该按键手感清晰、寿命长(可达10万次以上)、占用空间小,用于本地切换运行模式操作,简单可靠。
(14)电源供电选型:采用USB 5V/2A直流电源适配器作为主供电方案,通过Micro USB或USB Type-C接口为ESP32-S3核心板供电。ESP32-S3核心板自带3.3V稳压输出,可直接为SHT30、BH1750、OLED显示屏、HC-SR04(需5V供电除外)、蜂鸣器、LED指示灯等3.3V外设供电。对于需要5V供电的HC-SR04超声波模块和5V直流风扇,直接由USB 5V电源提供。该供电方案结构简单、成本低廉、稳定可靠,无需复杂的电池管理电路,适合展柜固定安装场景。
(15)PCB连接与组装选型:所有传感器模块和外围器件均采用杜邦线配合排针进行电气连接,便于硬件调试和模块更换。在项目定型后,可设计专用PCB底板将所有模块集成整合,通过排母插座插接各传感器模块,提高系统集成度和可靠性。整体硬件安装在亚克力或3D打印定制外壳内,固定于展柜内部或侧方,保证美观性和安装稳固性。
三、上位机开发
3.1 Qt开发环境安装
Qt的中文官网: https://www.qt.io/zh-cn/
QT5.12.6的下载地址:https://download.qt.io/archive/qt/5.12/5.12.6
打开下载链接后选择下面的版本进行下载:
如果下载不了,可以在网盘里找到安装包下载: 飞书文档记录的网盘地址:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink
软件安装时断网安装,否则会提示输入账户。
安装的时候,第一个复选框里的编译器可以全选,直接点击下一步继续安装。
选择编译器: (一定要看清楚了)
3.2 新建上位机工程
前面2讲解了需要用的API接口,接下来就使用Qt设计上位机,设计界面,完成整体上位机的逻辑设计。
【1】新建工程
【2】设置项目的名称。
【3】选择编译系统
【4】选择默认继承的类
【5】选择编译器
【6】点击完成
【7】工程创建完成
3.3 切换编译器
在左下角是可以切换编译器的。 可以选择用什么样的编译器编译程序。
目前新建工程的时候选择了2种编译器。 一种是mingw32这个编译Windows下运行的程序。 一种是Android编译器,可以生成Android手机APP。
不过要注意:Android的编译器需要配置一些环境才可以正常使用,这个大家可以网上找找教程配置一下就行了。
windows的编译器就没有这么麻烦,安装好Qt就可以编译使用。
下面我这里就选择的 mingw32这个编译器,编译Windows下运行的程序。
3.4 编译测试功能
创建完毕之后,编译测试一下功能是否OK。
点击左下角的绿色三角形按钮。
正常运行就可以看到弹出一个白色的框框。这就表示工程环境没有问题了。 接下来就可以放心的设计界面了。
3.5 设计UI界面与工程配置
【1】打开UI文件
打开默认的界面如下:
【2】设计代码
配套的 widget.cpp 文件
#include "widget.h"
#include "ui_widget.h"
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDateTime>
#include <QDebug>
#include <QMessageBox>
#include <QTimer>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QtCharts/QCategoryAxis>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
, m_mqttManager(new MQTTManager(this))
, m_deviceData(new DeviceData(this))
, m_isAutoRefresh(true)
{
ui->setupUi(this);
// 设置窗口标题和大小
setWindowTitle("智能文物展柜监控系统");
resize(1200, 800);
// 初始化UI
initUI();
// 初始化MQTT连接
initMQTT();
// 初始化定时器
initTimers();
// 连接信号槽
connectSignals();
// 初始化状态
updateUI();
}
Widget::~Widget()
{
if (m_mqttManager->isConnected()) {
m_mqttManager->disconnectFromBroker();
}
delete ui;
}
void Widget::initUI()
{
// ==================== 创建主布局 ====================
// 主垂直布局
QVBoxLayout *mainLayout = new QVBoxLayout(this);
// ==================== 标题栏 ====================
QLabel *titleLabel = new QLabel("
164