站内搜索
发作品签到
基于立创·地阔星STM32实验室环境与安防检测系统
专业版

基于立创·地阔星STM32实验室环境与安防检测系统

工程标签

32位单片机

2.5k
0
0
8

简介

本项目是一个针对实验室、仓库或家庭环境设计的智能安防与环境监测系统。主控芯片采用 STM32F103C8T6,结合多种传感器(温湿度、光照、烟雾、人体红外),实现了对环境数据的实时采集........

简介:本项目是一个针对实验室、仓库或家庭环境设计的智能安防与环境监测系统。主控芯片采用 STM32F103C8T6,结合多种传感器(温湿度、光照、烟雾、人体红外),实现了对环境数据的实时采集........
立创开发板「课设/毕设」开源计划

开源协议

GPL 3.0

创建时间:2025-10-22 13:10:46更新时间:2025-12-15 11:35:56

描述

视频链接:

B站视频--功能演示及介绍

项目简介

系统通过 ESP-01S (ESP8266) WiFi模块接入 中国移动 OneNet 物联网云平台,支持MQTT协议数据上报与远程指令控制。用户不仅可以通过板载OLED屏幕查看状态,还能通过云平台或APP远程监控环境数据、控制继电器设备以及管理安防报警模式。

  • 项目主要应用场景:
  • 实验室/机房环境监控
  • 智能家居安防演示
  • 物联网MQTT协议学习与开发验证

项目功能

  1. 环境监测
  • 温湿度:采用 SHT30 高精度传感器。
  • 光照强度:采用 BH1750 光照传感器。
  • 可燃气体/烟雾:采用 MQ-2 传感器(通过ADC采集)。
  1. 安防报警
  • 人体感应:HC-SR501 PIR 传感器监测人体移动。
  • 门磁监测:监测门窗开关状态。
  • 声光报警:支持本地蜂鸣器报警与LED指示,支持远程消音。
  • 安防模式:可通过按键或云端一键开启/关闭布防模式。
  • 温湿度检测:调整温湿度的阈值,检测温湿度是否异常,进行报警。
  1. 远程控制
  • 集成两路继电器(Relay),可远程控制排气扇、灯光等外设。
  • 支持远程控制LED状态和蜂鸣器。
  1. 人机交互
  • OLED显示:0.96寸 OLED 实时显示传感器数值、WiFi/MQTT连接状态图标。
  • 按键控制:支持布防/撤防切换,支持长按进入配网模式;温湿度警告阈值修改。
  1. 网络与配置
  • AP配网模式:长按按键进入配置模式,设备开启热点,用户通过连接热点访问网页配置WiFi账号密码及OneNet设备信息(ID/Key/Token),参数掉电保存(Flash存储)。
  • MQTT通信:通过 AT 指令集封装,稳定连接 OneNet 平台。
  1. 温湿度警告阈值修改
  • 长按key3进入修改模式,长按key1保存退出;
  • 点击key3切换要调整的类型(温度或湿度)
  • 点击key1/key2 实现阈值增加/减少

硬件设计

  1. 核心元器件
    主控: STM32F103C8T6 (立创地阔星stm32f103c8t6)
    WiFi模块: ESP-01S (ESP8266) - 使用串口通信 (UART2)
    传感器:
  • SHT30 (I2C)
  • BH1750 (I2C)
  • MQ-2 (Analog ADC - PA0)
  • HC-SR501 (Digital Input - PA1)
    执行器:
  • 5V 继电器 x 2 (驱动电路)
  • 有源蜂鸣器
    显示: 0.96寸 OLED (I2C接口)
    电源: 5V DC输入,板载 AMS1117-3.3 稳压芯片供电。
    接口:
    Type-C USB: 提供电源输入及 USB 串口通信接口。
  1. 电路原理图说明
  2. 电源与调试接口 (Power & Debug):
    采用 Type-C 接口作为主要的电源输入和数据通信口,符合现代设备接口标准,使用更方便。
    板载集成 CH340N USB转串口芯片。CH340N 外围电路极其简单(内置晶振),仅需少量电容即可工作。
    连接逻辑: Type-C 的数据脚 (D+/D-) 连接至 CH340N,CH340N 的 TXD/RXD 引脚连接至 STM32 的 USART1 (PA10/PA9)。
    功能: 该设计实现了“一迁两用”:
    供电: 5V 输入经 AMS1117-3.3 降压给系统供电。
    通信: 支持通过 USB 线直接进行 程序下载 (ISP模式) 和 串口打印调试 (Printf Log),无需额外的 ST-Link 或串口模块,极大降低了开发和维护门槛。
  3. WiFi 通信 (UART2):
    ESP-01S 模块连接至 STM32 的 USART2 (PA2/PA3) 接口。
    这种双串口设计(UART1 用于调试/下载,UART2 用于云端通信)保证了数据传输的稳定性,互不干扰。
  4. 传感器与外设驱动:
    I2C 总线: SHT30、BH1750 和 OLED 显示屏共用一组 I2C 总线(PB6/PB7),通过软件地址区分设备。
    继电器驱动: 使用 S8050 NPN 三极管驱动继电器线圈,配合续流二极管保护电路,控制外部 220V 负载(如排气扇、照明)。
  5. PCB Layout 注意事项
    Type-C 接口: 在 PCB 布局时,Type-C 的 CC1/CC2 引脚需下拉 5.1k 电阻以识别设备(如果使用 CH340N 的内置配置可忽略,视具体电路而定),确保 C-to-C 线缆能正常供电。

image.png

软件说明

  1. 开发环境
    IDE: Keil uVision 5 (MDK-ARM)
    框架: STM32 HAL 库
    语言: C语言

  2. 核心代码逻辑
    系统采用轮询与中断结合的方式运行:
    初始化: 完成 HAL 库、GPIO、I2C、UART 及 Flash 参数读取。
    WiFi连接: 初始化 ESP-01S,读取 Flash 中的配置信息连接路由器,并建立 MQTT 连接到 OneNet。
    主循环:
    数据上报: 每 5秒 (DATA_INTERVAL) 读取所有传感器数据,封装为 JSON 格式并通过 MQTT Topic $sys/{PID}/{DeviceName}/thing/property/post 上报。
    指令处理: 监听 MQTT 订阅 Topic,解析云平台下发的 JSON 指令(控制继电器、LED、布防状态),并执行相应动作。
    安防逻辑: 若处于布防模式 (security_mode == 1),检测到 PIR 或 门磁触发,则通过蜂鸣器报警。
    配网模式: 长按 Key1,系统进入 AP 模式 (SSID: STM32_Config),开启 TCP Server (8080端口) 等待 APP 或网页下发配置信息。

  3. JSON 数据协议
    上报数据示例:JSON

    {
        "id": "123",
        "params": {
            "Temp": { "value": 25 },
            "Hum": { "value": 60 },
            "Alarm": { "value": false },
            "gas": { "value": 12 },
            "security": { "value": true }
        }
    }
    
    
  4. 关键代码:

  • 传感器数据封装与上报

    系统通过 MQTT 协议每隔 5 秒向 OneNet 平台发送一次传感器数据。数据采用 OneNet 规定的 OneJson 格式;使用 snprintf 动态构建 JSON 字符串,将 C 语言变量转换为 JSON 键值对,确保数据格式符合云平台要求

    void Send_Data_to_OneNet(void)
    {
        // 1. 读取传感器数据
        if (SHT30_ReadData(&hi2c1, &env) != HAL_OK) { ... } // 读取温湿度
        human = PIR_IsHumanDetected();                      // 读取人体红外
        gas_v = MQ2_ReadPercentage(&hadc1);                 // 读取烟雾浓度
    
        // 2. 封装 JSON 数据包 (OneJson 格式)
        // 格式: {"id":"123", "params": {"Temp": {"value": 25.5}, ...}}
        static char payload[512];
        snprintf(payload, sizeof(payload),
                 "{\"id\":\"123\",\"params\":{"
                 "\"Temp\":{\"value\":%d},"
                 "\"Hum\":{\"value\":%d},"
                 "\"Alarm\":{\"value\":%s},"
                 "\"gas\":{\"value\":%d},"
                 "\"security\":{\"value\":%s}"
                 "}}",
                 (int)env.temperature,
                 (int)env.humidity,
                 (buzzer ? "true" : "false"),
                 (int)gas_v,
                 security_mode ? "true" : "false"
                 );
    
        // 3. 通过 MQTT 发布数据到 Topic
         WIFI_MQTT_Publish(MQTT_TOPIC_POST, payload, 0);
    }
    
  • 云端指令接收与解析

    当 OneNet 下发控制指令(如开启排气扇)时,STM32 会收到 MQTT 订阅消息。get_param_value 函数通过字符串查找 (strstr) 定位参数位置,解析出 true/false 或数值,实现了高效的指令响应

    void Process_OneNet_Command(MQTT_MESSAGE *msg)
    {
        // 1. 解析接收到的 JSON 字符串
        char *json_data = msg->payload;
    
        // 2. 提取各个功能点的值 (自定义解析函数 get_param_value)
        // 查找 "RELAY1" 字段并在其后寻找 "value" 或布尔值
        int relay1_val = get_param_value(json_data, "RELAY1");
        int security_val = get_param_value(json_data, "security");
    
        // 3. 执行硬件动作
        if (relay1_val >= 0) {
            if(relay1_val == 1) Relay1_On(); // 继电器吸合
            else Relay1_Off();               // 继电器断开
        }
    
        // 4. 切换安防模式
        if (security_val >= 0) {
            security_mode = security_val; // 1=布防, 0=撤防
            // 更新 OLED 图标显示...
        }
    }
    
  • 本地安防逻辑

    无论是否连接 WiFi,本地安防逻辑始终在主循环中运行,确保断网情况下系统依然可靠;这里采用了简单的轮询机制。只要开启了 security_mode,系统就会持续监测传感器。一旦触发,蜂鸣器将鸣叫,直到用户按下 KEY2 键进行物理撤防。

    // 在主循环中轮询
    if(security_mode) // 如果处于“布防”模式
    {
        // 检测门磁状态 (高电平触发) 或 人体红外 (高电平触发)
        if(HAL_GPIO_ReadPin(door_GPIO_Port, door_Pin) == GPIO_PIN_SET || PIR_IsHumanDetected())
        {
            // 触发报警
            Buzzer_On(); 
            printf("[ALARM] Intruder Detected!\r\n");
        }
    }
    
    // 物理按键撤防逻辑
    if(Key_Scan(key2_GPIO_Port, key2_Pin) == KEY_SHORT_PRESS) 
    {
        security_mode = 0; // 关闭布防
        Buzzer_Off();      // 停止报警
        OLED_Show16x16Icon(0, 48, blank_icon_16x16); // 清除盾牌图标
    }
    

OneNet 平台配置教程

  1. 创建产品与设备
    登录 OneNet 官网,进入开发者中心。
  2. 点击 “创建产品”:
    • 类别选择:其他行业 / 智能家居
    • 智能化方式:设备接入
    • 协议:MQTT
    • 数据协议:OneJson (物模型)
  3. 进入 “产品开发” -> “设置物模型”,(或者直接导入我提供的物理模型)根据代码定义以下功能点:
    • Temp (温度, float/int)
    • Hum (湿度, float/int)
    • Light (光照, int)
    • gas (烟雾, int)
    • RELAY1, RELAY2, LED, Alarm, security (均为 bool 型)
  4. 点击 “设备接入” -> “添加设备”,生成设备名称(Device Name)。
  5. Token 生成与配置
    由于新版 OneNet 需要 Token 进行身份验证,请使用官方提供的 Token 生成工具或我提供安卓APP生成连接所需的 Token。
    所需参数:
    • Product ID (产品ID)
    • Device Name (设备名称)
    • Master Key (产品Key)
      app使用:

image.png

image.png

详情教程在附件文档里

使用说明

由于代码支持 Flash 存储配置,首次使用无需修改代码:

  1. 上电启动,OLED 显示初始化界面。
  2. 长按 Key1 按键,直到屏幕显示 "Config Mode"。
  3. 使用手机/电脑连接热点:STM32_Config (密码: 12345678)。
  4. 使用配套的 APP 或 TCP 工具连接 192.168.4.1:8080。
  5. 发送配置 JSON 数据:
    {"ssid":"你的WiFi名称","pwd":"WiFi密码","pid":"产品ID","id":"设备名称","key":"Token密钥"}
    
  6. 屏幕显示 "Config Saved!" 后自动重启,设备将自动连接 WiFi 和 OneNet。
  7. 或者你直接修改代码bsp_esp01s.h里对应配置云平台的宏定义

未来计划

为了进一步提升系统的实用性与交互体验,本项目制定了以下后续开发计划,欢迎社区开发者共同参与:
接入 Web 端可视化管理平台:
目前系统依赖 OneNet 控制台查看数据。未来计划开发一套独立的 Web 前端界面 (计划采用 Vue.js)

功能目标: 通过调用 OneNet 平台的 API 接口,将实验室的温湿度、光照、安全状态等数据以图表(ECharts)形式在网页上实时展示,实现“数据大屏”监控功能,并支持在网页上直接控制继电器开关。

按钮简单操作

  • Key1 短按:开启安防模式(屏幕显示盾牌图标)。
  • Key2 短按:关闭安防模式 / 停止报警。
  • 远程控制:在 OneNet 控制台或自定义 APP 上下发指令控制继电器开关。
  • key1 长按:配网模式
  • key3 长按:阈值修改模式

实物图

此处可放入组装完成后完整实物图
图:运行界面
说明:左下角图标的安防模式开启;右下角图标表示连接上MQTT服务器和wifi
微信图片_20251122155333_33_100.jpg
图:配网界面
eea64ba7691125ccd2c5283a5a417461.jpg
图:阈值修改界面

cbeecd1cdeec01d3edb8b452bf98bb56.jpg

代码

STM32代码: https://github.com/fantasy-Jin/-labguardian-stm32
安卓代码如果需要再整理发布出来

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
model (2).json
72
2
app配网和控制.apk
81
3
onenet步骤.pdf
59
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航