STM32F103C8T6实战:从零构建智能家庭安全监测系统(附完整工程代码)

清晨6点,厨房的烟雾传感器突然触发警报——原来是你昨晚设置的炖锅忘了关火。与此同时,卧室的温湿度传感器检测到空气干燥,自动启动了加湿器。这一切都得益于你亲手搭建的STM32家庭安全监测系统。本文将带你完整实现这个能真正保护家人的智能项目,从硬件焊接、代码编写到手机远程控制,每个环节都有可落地的解决方案。

1. 硬件设计与核心器件选型

1.1 主控芯片:为什么选择STM32F103C8T6

这款被称为"蓝色药丸"的MCU在创客圈经久不衰,其核心优势在于:

  • 72MHz主频的Cortex-M3内核,轻松处理多传感器数据融合
  • 64KB Flash+20KB RAM的存储配置,满足复杂逻辑需求
  • 37个GPIO接口,可同时连接各类外设
  • 3个USART接口,方便扩展WiFi/蓝牙模块

提示:购买时注意区分正版(ST原厂)与国产兼容版,后者价格更低但需验证稳定性

1.2 传感器阵列配置方案

传感器类型 型号 检测范围 接口方式 供电电压
温湿度 DHT22 -40~80℃/0~100% 单总线 3.3V
烟雾 MQ-5 300-10000ppm 模拟量ADC 5V
人体红外 AM312 3-7米 数字信号 3.3V
水浸 水滴传感器 液面接触检测 数字信号 5V

关键电路设计技巧

  • 为MQ系列传感器增加可调电位器,方便校准报警阈值
  • HC-SR501人体传感器安装时避免正对窗户,减少误触发
  • 火焰传感器的LED指示灯需朝外安装,确保检测灵敏度

1.3 通信模块选型对比

// ESP8266 AT指令初始化示例
void ESP8266_Init(void) {
    HAL_UART_Transmit(&huart2, "AT+RST\r\n", 8, 1000);  // 复位模块
    HAL_Delay(2000);
    HAL_UART_Transmit(&huart2, "AT+CWMODE=1\r\n", 13, 1000); // 设为STA模式
    HAL_UART_Transmit(&huart2, "AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n", 30, 3000); // 连接WiFi
}

实际测试发现,ESP-01S模块在长时间工作时会出现以下现象:

  • 连续运行48小时后,TCP连接成功率下降至82%
  • 环境温度超过45℃时容易死机
  • 解决方案:添加硬件看门狗,定期重启模块

2. 软件开发环境搭建与核心逻辑实现

2.1 开发工具链配置

推荐使用PlatformIO+VSCode组合,相比Keil具有以下优势:

  • 自动管理依赖库(如DHTlib、Adafruit_SSD1306)
  • 内置串口绘图器,实时可视化传感器数据
  • 支持版本控制,方便团队协作

安装步骤:

  1. 在VSCode中安装PlatformIO IDE扩展
  2. 新建STM32F103C8T6工程
  3. 修改platformio.ini配置文件:
    [env:bluepill_f103c8]
    platform = ststm32
    board = bluepill_f103c8
    framework = stm32cube
    upload_protocol = stlink
    

2.2 多任务调度设计

采用时间片轮询架构,避免RTOS的学习成本:

void main_loop() {
    static uint32_t tick = 0;
    
    if(HAL_GetTick() - tick > 200) { // 每200ms循环一次
        tick = HAL_GetTick();
        
        read_sensors();      // 传感器数据采集
        process_algorithms();// 安防逻辑处理
        update_display();    // OLED刷新
        check_network();     // 网络状态监测
        handle_buttons();    // 按键处理
    }
}

2.3 报警逻辑优化实践

原始方案中直接使用传感器原始值比较,导致误报率高。改进后的三级滤波算法:

  1. 硬件级滤波:在模拟信号输入端增加RC低通滤波电路
  2. 软件级滤波:采用滑动窗口平均算法
    #define FILTER_LEN 5
    float smoke_filter(float new_val) {
        static float buffer[FILTER_LEN] = {0};
        static uint8_t index = 0;
        
        buffer[index++] = new_val;
        if(index >= FILTER_LEN) index = 0;
        
        float sum = 0;
        for(uint8_t i=0; i<FILTER_LEN; i++) {
            sum += buffer[i];
        }
        return sum / FILTER_LEN;
    }
    
  3. 逻辑级滤波:连续3次超阈值才触发报警

3. 云平台对接与手机控制实现

3.1 阿里云IoT平台接入步骤

  1. 创建产品:登录阿里云IoT平台→设备管理→创建产品"HomeSecurity"
  2. 定义功能:
    • 属性:温度、湿度、烟雾值
    • 服务:报警开关、设备控制
  3. 生成三元组(ProductKey、DeviceName、DeviceSecret)
  4. 移植LinkSDK到STM32工程

关键代码片段:

void upload_to_cloud() {
    char payload[256];
    snprintf(payload, sizeof(payload),
        "{\"params\":{\"temp\":%.1f,\"humi\":%.1f,\"smoke\":%d}}",
        temperature, humidity, smoke_value);
    
    IOT_Linkkit_Report(devid, ITM_JSON, payload, strlen(payload));
}

3.2 自主开发APP的替代方案

对于不想学习Android开发的用户,推荐以下方案:

  1. Blinker+微信小程序

    • 配置设备密钥
    • 拖拽UI组件构建界面
    • 绑定事件处理函数
  2. Home Assistant集成

    • 在树莓派上部署HA
    • 通过MQTT协议接入STM32
    • 使用Lovelace UI自定义仪表盘

4. 系统调试与性能优化实战

4.1 常见问题排查指南

现象 可能原因 解决方案
传感器读数异常 电源干扰/接触不良 增加退耦电容,检查接线
WiFi频繁断开 信号弱/供电不足 改用5V供电,添加PA+LNA模块
误报警 阈值设置不合理 动态阈值校准算法
显示花屏 I2C地址冲突 修改OLED的I2C地址为0x3D

4.2 功耗优化技巧

  1. 硬件层面:

    • 选用低功耗传感器(如BME280替代DHT22)
    • 为不常用模块设计MOS管开关电路
  2. 软件层面:

    void enter_low_power() {
        HAL_GPIO_WritePin(SENSOR_PWR_GPIO_Port, SENSOR_PWR_Pin, GPIO_PIN_RESET);
        HAL_UART_DeInit(&huart2);  // 关闭串口
        HAL_ADC_DeInit(&hadc1);    // 关闭ADC
        HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
    }
    

    实测待机电流从85mA降至12mA

4.3 扩展功能实现

摄像头联动方案

  1. 选用ESP32-CAM模块
  2. 通过HTTP触发拍照
  3. 将图片保存到TF卡并上传云端
# 服务器端图像处理示例
import cv2
def detect_person(img):
    hog = cv2.HOGDescriptor()
    hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
    (rects, _) = hog.detectMultiScale(img, winStride=(4,4))
    return len(rects) > 0

项目源码已托管至GitHub仓库,包含:

  • 完整Keil工程文件
  • 电路原理图(Altium Designer格式)
  • 手机APP安装包(APK)
  • 3D打印外壳设计文件
Logo

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

更多推荐