基于STM32的小区供暖监控系统设计(温湿度监测+水位补水+入侵报警+远程APP)

北方小区冬季供暖,最怕两件事:一是供暖管道水位不足、循环不畅没人发现,屋里越住越冷;二是供暖设备间无人值守,闲杂人员随意进出留下安全隐患。传统供暖监控依赖人工巡检,监测手段单一、响应滞后。本文设计一套基于 STM32 的小区供暖监控系统:DHT11 实时采集温湿度、SR-01 监测暖气水位、红外对管守卫设备间,温度过低、水位不足、温湿度超标、非法闯入四类异常自动触发蜂鸣器报警,并联动继电器补水、步进电机通风;全部数据经 WiFi 以 MQTT 协议上传手机 APP,支持远程查看与布防设置,让供暖管理从"人巡"走向"云管"。

一、系统功能总览

功能模块实现方式功能说明
温湿度监测DHT11 单总线实时采集环境温湿度,OLED 显示
低温报警阈值判断 + 蜂鸣器温度低于设定阈值触发蜂鸣器报警
通风控制ULN2003 驱动步进电机温湿度超过阈值时启动电机模拟通风
水位监测与补水SR-01 + ADC + 继电器水位低于阈值时继电器模拟打开水阀补水,恢复后自动关闭
非法闯入检测TCRT5000 红外对管布防模式下检测到入侵即报警并上传 APP
阈值设置独立按键用户自定义温湿度、水位报警阈值
数据显示OLED12864(I2C)实时显示温湿度、水位数据
远程监控ESP8266 WiFi + MQTT + 手机 APP数据远程查看,低温/入侵报警推送,支持远程布防

二、核心模块选型对比

2.1 主控模块选型

对比项方案1:STM32F103C8T6方案2:ESP32-WROOM-32
内核/主频Cortex-M3 / 72 MHz双核 Xtensa LX6 / 240 MHz
存储64KB Flash + 20KB SRAM4MB Flash + 520KB SRAM
无线能力需外接通信模块内置 WiFi+蓝牙双模
开发生态开发支持广泛、生态成熟适合 IoT 一体化方案

ESP32-WROOM-32 性能强劲且自带无线,但本系统采用"主控+外置 WiFi 模块"的架构更利于模块化维护,STM32F103C8T6 的处理能力与外设接口(3 个 USART、2 个 SPI、2 个 I2C)已完全满足多传感器采集与控制需求。选择方案1:STM32F103C8T6

2.2 温湿度检测模块选型

对比项方案1:DHT11方案2:SHT40
精度满足基础监测温度 ±0.3℃、湿度 ±2%RH
量程常规环境范围-40~125℃ / 0~100%RH
接口单总线,集成简单数字接口
成本经济实惠价格较高

SHT40 精度更高,但供暖环境的温湿度监测属于基础应用,DHT11 性能够用、集成简单,可显著控制整机成本。选择方案1:DHT11

2.3 水位检测模块选型

对比项方案1:SR-01 电阻式方案2:HSC-1000G 压力式
测量原理电极间电阻随液位变化液体压力换算液位
精度满足导电液体检测更高,适用多种液体
适用液体导电液体耐腐蚀、高温液体均可
成本与安装成本低、结构简单、安装方便价格较高

供暖水箱的水位检测精度要求适中,SR-01 电阻式传感器以经济实用的特性满足绝大多数导电液体的水位检测需求。选择方案1:SR-01

2.4 红外检测模块选型

对比项方案1:TCRT5000方案2:IRM-3638
检测方式近距离反射检测38kHz 调制红外接收
检测距离短距离、高灵敏度较远距离
抗干扰常规内置滤波电路,抗干扰优异
典型场景工业自动化、物体检测遥控信号接收

本系统的需求是设备间出入口的短距离人体/物体检测,TCRT5000 灵敏度可调、成本低,正是近距离检测的经济高效之选。选择方案1:TCRT5000

2.5 电机驱动模块选型

对比项方案1:ULN2003方案2:DRV8825
驱动能力7 对达林顿管,单路 500mA最大 2.5A,支持中型电机
步进精度整步/半步最高 1/32 微步进,运行平稳
保护功能内置飞轮二极管防反冲完善的保护电路
成本经济价格较高

DRV8825 面向高精度大电流场景,本系统的步进电机仅用于模拟通风动作,ULN2003 接口简单、成本可控、保护完善,足以胜任。选择方案1:ULN2003

2.6 数据显示模块选型

对比项方案1:OLED12864方案2:TFT LCD 240×320
分辨率128×64 单色240×320 彩色
接口I2C,配置简单SPI/并行,引脚多、配置复杂
功耗无需背光、功耗低需背光、功耗较高
成本适中较高

监控面板以数值文本显示为主,OLED12864 高对比度、低功耗、接口简洁,符合预算与功耗双重要求。选择方案1:OLED12864

2.7 无线通信模块选型

对比项方案1:ESP8266方案2:RFM95W(LoRa)
联网能力内置 TCP/IP 协议栈,直连互联网无直接联网能力
协议支持 HTTP、MQTT 等LoRa 长距离低功耗
传输速率高(处理速度可达 160MHz)最高 300kbps
适用场景需要网络访问与数据上传大范围覆盖、长电池寿命

系统需要将数据上传云端并与手机 APP 实时交互,ESP8266 可直接接入 WiFi 网络并支持 MQTT 协议,是智能家居场景的主流选择。选择方案1:ESP8266

三、系统接线总表

模块引脚连接到 STM32说明
DHT11DATAGPIO(数字 I/O)VCC 接 3.3V,GND 接地,单总线传输
SR-01 水位传感器S(信号输出)ADC 模拟输入引脚电源脚 + 接 5V、- 接地,电阻变化输出模拟量
TCRT5000OUTGPIO 数字输入电源接 5V,检测到人体输出低电平,与单片机共地
ULN2003IN1~IN44 个 GPIO 输出OUT1~OUT4 接步进电机线圈;VCC/GND 接 5V,COM 接电源正极供保护二极管
继电器(水阀)控制端GPIO 输出水位低于阈值时吸合模拟打开水阀补水
OLED12864SCL / SDAI2C 时钟/数据引脚VCC 接 3.3V,SSD1306 驱动
ESP8266TX / RXUSART 交叉连接模块 TX 接单片机 RX、RX 接 TX,115200 波特率,共地保证通信稳定
蜂鸣器驱动端GPIO 输出异常报警提示
按键KEYGPIO 输入设置温湿度、水位阈值及布防模式

四、系统软件设计

4.1 主程序流程

系统上电后完成引脚、通信方式、变量与标志位配置,使能各模块后进入主循环:采集温湿度、水位和红外数据,处理后在 OLED 显示并通过 WiFi 以 MQTT 协议上传手机 APP;随后依次判断四类工况——温度低于阈值触发蜂鸣器报警,温湿度超过阈值控制步进电机通风,水位低于阈值经继电器打开水阀补水,布防模式下红外检测到非法闯入立即报警并推送 APP,循环执行保证供暖环境始终处于受控状态。

int main(void)
{
    System_Init();                    // GPIO/USART/ADC/变量标志位
    DHT11_Init();
    ADC1_Init();                      // 通道配置+校准
    OLED_Init();
    Motor_Init();                     // ULN2003步进电机
    ESP8266_Init();                   // STA->透传->TCP
    MQTT_Connect();                   // 连接MQTT服务器

    while (1)
    {
        /* 1. 数据采集与显示 */
        DHT11_Read(&temp, &humi);
        water = Get_WaterLevel();     // ADC均值->水位
        ir = IR_Scan();               // 红外入侵检测
        OLED_Display(temp, humi, water);

        /* 2. 阈值判断与联动控制 */
        if (temp < TEMP_MIN) {        // 温度过低
            Beep_Alarm();             // 蜂鸣器报警
            MQTT_Publish("alarm", "LOW_TEMP");
        }
        if (temp > TEMP_MAX || humi > HUMI_MAX)
            Motor_Ventilate();        // 步进电机通风
        if (water < WATER_MIN)        // 水位过低
            Relay_WaterOn();          // 继电器开阀补水
        else if (water >= WATER_OK)
            Relay_WaterOff();         // 水位恢复自动关阀

        if (armed && ir) {            // 布防+非法闯入
            Beep_Alarm();
            MQTT_Publish("alarm", "INTRUSION");  // 推送APP
        }

        /* 3. 远程交互 */
        MQTT_Publish("data", temp, humi, water); // 数据上传
        MQTT_HandleCmd();             // APP下发布防/阈值指令
        Key_Scan();                   // 本地按键设置阈值
    }
}

4.2 温湿度检测子程序(DHT11)

初始化时将 DATA 引脚设为输出模式,发送低电平启动信号(持续约 1ms)后拉高并延时 20~40μs 完成启动;随后切为输入模式等待传感器响应——80μs 低电平加 80μs 高电平表示就绪。传感器按时序发送 40 位数据(湿度整数/小数、温度整数/小数、校验和各 8 位),通过测量每位高电平持续时间区分 0 和 1;接收完毕计算校验和比对,一致则数据有效,从中提取温湿度整数与小数部分换算为实际值。

u8 DHT11_Read(u8 *temp, u8 *humi)
{
    u8 buf[5], i;
    DHT11_Start();                       // 拉低1ms->拉高20~40us
    if (DHT11_WaitAck() != 0) return 1;  // 80us低+80us高响应

    for (i = 0; i < 5; i++)
        buf[i] = DHT11_ReadByte();       // 按高电平时长判0/1

    if (buf[0]+buf[1]+buf[2]+buf[3] == buf[4]) {
        *humi = buf[0];  *temp = buf[2]; // 校验通过,提取数值
        return 0;
    }
    return 1;
}

4.3 水位检测子程序(SR-01 + ADC)

初始化 ADC:设置时钟、工作模式、数据对齐并启动校准保证转换精度;配置通道与采样时间(239.5 个时钟周期),软件触发启动转换,循环查询完成标志位后读取 12 位结果(0~4095,对应参考电压比例)。为消除抖动干扰,多次采集取平均值,再按传感器量程换算为实际水位值。

u16 ADC_GetAvg(u8 ch, u8 times)
{
    u32 sum = 0;
    u8 i;
    for (i = 0; i < times; i++) {
        ADC_SoftwareStartConv(ch);            // 软件触发转换
        while (!ADC_GetFlagStatus());         // 等待转换完成
        sum += ADC_GetConversionValue();      // 12位结果0~4095
    }
    return sum / times;                       // 均值滤波
}

float Get_WaterLevel(void)
{
    u16 adc = ADC_GetAvg(ADC_CH_WATER, 10);
    return ADC_To_Level(adc);                 // 按量程换算实际水位
}

4.4 红外入侵检测子程序(TCRT5000)

将红外对管输出接至单片机数字输入引脚,上电初始化时确认传感器工作正常并读取初始状态。运行中持续监测输出电平:检测到人体存在时传感器输出低电平(0V),单片机识别到电平变化即触发布防判断与报警流程;按合适的检测间隔循环执行,实时跟踪人体的出现与离开。

void IR_Polling(void)
{
    u8 level = GPIO_Read(IR_PORT, IR_PIN);
    if (level == 0) {              // 低电平=有人
        if (armed) {               // 布防模式
            Beep_Alarm();
            MQTT_Publish("alarm", "INTRUSION");
        }
    }
    Delay_ms(IR_INTERVAL);         // 检测间隔
}

4.5 数据显示子程序(OLED)

I2C 配置时钟速率与应答参数后发送 OLED 初始化命令,依次设置显示模式、对比度、扫描方向、时钟与充电泵,最后发送 0xAF 开启显示。屏幕划分为 128 列 × 8 页(每页 8 行像素),通过设置页地址和列地址定位显示区域;填充函数遍历 0~7 页、0~127 列写入相同数据实现全屏填充(填 0 即清屏)。数据写入按"设备地址→寄存器地址→数据"顺序,每步等待应答信号确保传输正确,再调用字符串、中文与位图显示函数完成界面渲染。

void OLED_Display(float temp, float humi, float water)
{
    OLED_CLS();
    OLED_ShowCN(0, 0, "温度");  OLED_ShowNum(32, 0, temp);
    OLED_ShowCN(0, 2, "湿度");  OLED_ShowNum(32, 2, humi);
    OLED_ShowCN(0, 4, "水位");  OLED_ShowNum(32, 4, water);
    OLED_ShowCN(0, 6, "布防");  OLED_ShowStr(32, 6, armed ? "ON" : "OFF");
}

4.6 无线通信子程序(ESP8266 + MQTT)

SSID 与密码写入程序,复位 GPIO 拉高初始化后,拉低复位引脚延时 500ms 再拉高,检测 “ready” 确认复位完成;发送 AT+CWMODE=1 设为 STA 模式,AT+CIPMODE=1 配置透传,AT+CIPMUX=0 关闭多路连接;随后初始化接收缓冲区,发布 TCP 连接指令(指定 IP 和端口)并等待确认,超时则报告状态;连接完成后重置缓冲区发送 AT+CIPSEND,收到 “\r\nOK\r\n\r\n” 即可透传数据,返回 0 表示链路就绪。数据层通过 MQTT 协议实现检测数据与报警信息的发布订阅,APP 端可远程查看并下发布防指令。

u8 ESP8266_ConnectTCP(void)
{
    RxBuffer_Reset();                       // 重置接收缓冲区
    ESP8266_SendCmd("AT+CIPSTART=\"TCP\",\"IP\",PORT");
    if (!WaitAck("CONNECT", TIMEOUT))       // 等待连接确认
        return 1;                           // 连接超时
    RxBuffer_Reset();
    ESP8266_SendCmd("AT+CIPSEND");          // 准备发送数据
    if (!WaitAck("\r\nOK\r\n\r\n>", TIMEOUT))
        return 2;                           // 发送超时
    return 0;                               // 透传就绪
}

五、系统实现与测试

硬件调试从电源与主控入手,确认供电电压稳定、复位正常后逐个验证传感器采集、I2C 显示与 UART 无线传输;软件基于 Keil 开发,STLink 下载调试,通过断点与变量观察验证阈值判断逻辑。功能测试结果如下:

测试项测试方法预期结果实测结果
温湿度采集DHT11 读取并与标准温度计对比40 位数据解析正确,校验和通过,数值准确稳定通过
低温报警使环境温度低于设定阈值蜂鸣器及时报警,APP 收到低温报警推送通过
通风控制使温湿度超出设定上限步进电机正确启动通风,响应及时通过
水位采样多次采集水位并对比实际液位ADC 均值采样稳定,电压准确换算为水位高度通过
自动补水降低水位至阈值以下再恢复继电器开阀补水,水位恢复后自动关闭通过
非法闯入检测布防状态下人员经过红外对管输出低电平被识别,蜂鸣器报警,信息上传 APP通过
无线通信配置 WiFi 连接并模拟异常工况MQTT 连接稳定,数据与报警信息实时上传 APP通过
远程布防APP 下发布防/撤防指令指令正确执行,布防状态 OLED 同步显示通过

六、总结

本文设计并实现了一套基于 STM32 单片机的小区供暖监控系统,集成 DHT11 温湿度传感器、SR-01 水位传感器、TCRT5000 红外对管、OLED 显示、ULN2003 电机驱动与 ESP8266 无线通信模块,实现了温湿度实时监测、水位检测与自动补水、非法闯入报警以及数据无线传输的完整功能闭环。系统根据设定阈值快速响应异常工况,触发蜂鸣器报警、通风与补水等联动操作,并通过 MQTT 协议将数据与报警信息推送至手机 APP,支持远程查看与布防管理。硬件选型兼顾可靠性与成本效益,软件采用模块化编程,经反复调试系统运行稳定、响应迅速、各模块协同良好,为传统供暖系统的智能化升级提供了一种高性价比、可扩展的解决方案。

七、资料内容完整工程资料(原理图、PCB、代码、元件清单)


八、资料获取方式

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐