
基于立创·地阔星STM32实验室环境与安防检测系统
简介
本项目是一个针对实验室、仓库或家庭环境设计的智能安防与环境监测系统。主控芯片采用 STM32F103C8T6,结合多种传感器(温湿度、光照、烟雾、人体红外),实现了对环境数据的实时采集........
简介:本项目是一个针对实验室、仓库或家庭环境设计的智能安防与环境监测系统。主控芯片采用 STM32F103C8T6,结合多种传感器(温湿度、光照、烟雾、人体红外),实现了对环境数据的实时采集........开源协议
:GPL 3.0
描述
视频链接:
项目简介
系统通过 ESP-01S (ESP8266) WiFi模块接入 中国移动 OneNet 物联网云平台,支持MQTT协议数据上报与远程指令控制。用户不仅可以通过板载OLED屏幕查看状态,还能通过云平台或APP远程监控环境数据、控制继电器设备以及管理安防报警模式。
- 项目主要应用场景:
- 实验室/机房环境监控
- 智能家居安防演示
- 物联网MQTT协议学习与开发验证
项目功能
- 环境监测:
- 温湿度:采用 SHT30 高精度传感器。
- 光照强度:采用 BH1750 光照传感器。
- 可燃气体/烟雾:采用 MQ-2 传感器(通过ADC采集)。
- 安防报警:
- 人体感应:HC-SR501 PIR 传感器监测人体移动。
- 门磁监测:监测门窗开关状态。
- 声光报警:支持本地蜂鸣器报警与LED指示,支持远程消音。
- 安防模式:可通过按键或云端一键开启/关闭布防模式。
- 温湿度检测:调整温湿度的阈值,检测温湿度是否异常,进行报警。
- 远程控制:
- 集成两路继电器(Relay),可远程控制排气扇、灯光等外设。
- 支持远程控制LED状态和蜂鸣器。
- 人机交互:
- OLED显示:0.96寸 OLED 实时显示传感器数值、WiFi/MQTT连接状态图标。
- 按键控制:支持布防/撤防切换,支持长按进入配网模式;温湿度警告阈值修改。
- 网络与配置:
- AP配网模式:长按按键进入配置模式,设备开启热点,用户通过连接热点访问网页配置WiFi账号密码及OneNet设备信息(ID/Key/Token),参数掉电保存(Flash存储)。
- MQTT通信:通过 AT 指令集封装,稳定连接 OneNet 平台。
- 温湿度警告阈值修改
- 长按key3进入修改模式,长按key1保存退出;
- 点击key3切换要调整的类型(温度或湿度)
- 点击key1/key2 实现阈值增加/减少
硬件设计
- 核心元器件
主控: 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 串口通信接口。
- 电路原理图说明
- 电源与调试接口 (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 或串口模块,极大降低了开发和维护门槛。 - WiFi 通信 (UART2):
ESP-01S 模块连接至 STM32 的 USART2 (PA2/PA3) 接口。
这种双串口设计(UART1 用于调试/下载,UART2 用于云端通信)保证了数据传输的稳定性,互不干扰。 - 传感器与外设驱动:
I2C 总线: SHT30、BH1750 和 OLED 显示屏共用一组 I2C 总线(PB6/PB7),通过软件地址区分设备。
继电器驱动: 使用 S8050 NPN 三极管驱动继电器线圈,配合续流二极管保护电路,控制外部 220V 负载(如排气扇、照明)。 - PCB Layout 注意事项
Type-C 接口: 在 PCB 布局时,Type-C 的 CC1/CC2 引脚需下拉 5.1k 电阻以识别设备(如果使用 CH340N 的内置配置可忽略,视具体电路而定),确保 C-to-C 线缆能正常供电。

软件说明
-
开发环境
IDE: Keil uVision 5 (MDK-ARM)
框架: STM32 HAL 库
语言: C语言 -
核心代码逻辑
系统采用轮询与中断结合的方式运行:
初始化: 完成 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 或网页下发配置信息。 -
JSON 数据协议
上报数据示例:JSON{ "id": "123", "params": { "Temp": { "value": 25 }, "Hum": { "value": 60 }, "Alarm": { "value": false }, "gas": { "value": 12 }, "security": { "value": true } } } -
关键代码:
-
传感器数据封装与上报
系统通过 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 平台配置教程
- 创建产品与设备
登录 OneNet 官网,进入开发者中心。 - 点击 “创建产品”:
- 类别选择:其他行业 / 智能家居
- 智能化方式:设备接入
- 协议:MQTT
- 数据协议:OneJson (物模型)
- 进入 “产品开发” -> “设置物模型”,(或者直接导入我提供的物理模型)根据代码定义以下功能点:
- Temp (温度, float/int)
- Hum (湿度, float/int)
- Light (光照, int)
- gas (烟雾, int)
- RELAY1, RELAY2, LED, Alarm, security (均为 bool 型)
- 点击 “设备接入” -> “添加设备”,生成设备名称(Device Name)。
- Token 生成与配置
由于新版 OneNet 需要 Token 进行身份验证,请使用官方提供的 Token 生成工具或我提供安卓APP生成连接所需的 Token。
所需参数:- Product ID (产品ID)
- Device Name (设备名称)
- Master Key (产品Key)
app使用:


详情教程在附件文档里
使用说明
由于代码支持 Flash 存储配置,首次使用无需修改代码:
- 上电启动,OLED 显示初始化界面。
- 长按 Key1 按键,直到屏幕显示 "Config Mode"。
- 使用手机/电脑连接热点:STM32_Config (密码: 12345678)。
- 使用配套的 APP 或 TCP 工具连接 192.168.4.1:8080。
- 发送配置 JSON 数据:
{"ssid":"你的WiFi名称","pwd":"WiFi密码","pid":"产品ID","id":"设备名称","key":"Token密钥"} - 屏幕显示 "Config Saved!" 后自动重启,设备将自动连接 WiFi 和 OneNet。
- 或者你直接修改代码bsp_esp01s.h里对应配置云平台的宏定义
未来计划
为了进一步提升系统的实用性与交互体验,本项目制定了以下后续开发计划,欢迎社区开发者共同参与:
接入 Web 端可视化管理平台:
目前系统依赖 OneNet 控制台查看数据。未来计划开发一套独立的 Web 前端界面 (计划采用 Vue.js)
功能目标: 通过调用 OneNet 平台的 API 接口,将实验室的温湿度、光照、安全状态等数据以图表(ECharts)形式在网页上实时展示,实现“数据大屏”监控功能,并支持在网页上直接控制继电器开关。
按钮简单操作
- Key1 短按:开启安防模式(屏幕显示盾牌图标)。
- Key2 短按:关闭安防模式 / 停止报警。
- 远程控制:在 OneNet 控制台或自定义 APP 上下发指令控制继电器开关。
- key1 长按:配网模式
- key3 长按:阈值修改模式
实物图
此处可放入组装完成后完整实物图
图:运行界面
说明:左下角图标的安防模式开启;右下角图标表示连接上MQTT服务器和wifi

图:配网界面

图:阈值修改界面

代码
STM32代码: https://github.com/fantasy-Jin/-labguardian-stm32
安卓代码如果需要再整理发布出来
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










