资讯详情

STM32+ESP01S+OneNET:智能厨房安全监测系统完整设计方案

📅 2026/9/9 7:39:18 | 华诺云谱 👁 阅读
STM32+ESP01S+OneNET:智能厨房安全监测系统完整设计方案
对于想用 STM32 做物联网项目的同学来说厨房安全监测是一个非常适合练手的综合题目。它既有传感器采集又有无线通信还涉及云平台、APP 小程序和 PCB 设计基本覆盖了一个嵌入式物联网产品从硬件到软件再到云端的完整链路。本文围绕“STM32ESP01SOneNETAPP小程序PCB”这套方案从系统架构、硬件选型、云平台配置、代码实现到常见问题排查完整拆解新版简洁型厨房安全监测系统的设计过程。无论是准备毕业设计、参加电子设计竞赛还是为春招秋招积累项目经验都可以直接参考这套流程。1. 厨房安全监测系统的技术背景与系统架构1.1 为什么需要一套厨房安全监测系统厨房是家庭中用火用电最集中的区域燃气泄漏、油温过高、烟雾浓度异常等隐患如果发现不及时很容易酿成事故。传统燃气报警器只能在本机发出声音人不在厨房就很难第一时间收到告警。把传感器数据通过 WiFi 模块上传到云平台再通过 APP 或小程序远程查看才能真正实现“人不在现场也能掌握厨房安全状态”。这套系统的核心价值在于实时采集温度、湿度、烟雾浓度和火焰状态。当指标超过阈值时本地蜂鸣器报警同时云端产生告警记录。用户通过手机端远程查看当前环境数据和报警状态。如果配合继电器还能进一步联动电磁阀、排气扇等设备。1.2 整体方案选型常见物联网通信方案有蓝牙、Zigbee、WiFi 和 4G。厨房安全监测属于固定场景的室内设备对移动性要求不高WiFi 覆盖足够而且成本低、实时性也能满足。整套系统采用三层结构感知层MQ-2 烟雾传感器、DHT11 温湿度传感器、火焰传感器。传输层STM32F103C8T6 作为主控采集并处理传感器信号ESP01S 作为 WiFi 模块通过 AT 指令与主控通信把数据上报到 OneNET 云平台。应用层OneNET 云端存储数据手机 APP 或微信小程序通过 OneNET 开放 API 拉取并展示数据。这套方案选择 STM32F103C8T6 是因为它资源足够、资料丰富、成本低无论是学习还是做毕设几乎不会遇到找不到资料的困难。ESP01S 则把复杂的 WiFi 协议栈封装在模块内部开发者只需要通过串口发送 AT 指令即可完成联网和数据传输。1.3 系统数据流整个系统的数据流向可以用下面这个顺序理解传感器采集 → STM32 数据处理 → 本地阈值判断 → ESP01S 串口通信 → OneNET 云平台存储 → APP/小程序 API 查询 → 用户远程查看同时OneNET 也支持命令下行。云平台可以下发控制指令给 ESP01S再通过串口传给 STM32实现远程断电或关闭阀门等操作。2. 硬件选型与接线设计2.1 主控芯片STM32F103C8T6STM32F103C8T6 是意法半导体推出的 Cortex-M3 内核芯片主频最高 72MHz拥有 64KB Flash 和 20KB SRAM资源对于本系统完全够用。它自带多路 ADC、USART、I2C、SPI 和定时器可以满足传感器采集、串口驱动 ESP01S、PWM 控制报警声音等需求。开发时建议使用 STM32CubeMX 生成初始化代码配合 HAL 库开发。相比直接操作寄存器HAL 库的可读性更好迁移也方便。2.2 传感器与执行器件下表是这套系统用到的传感器和执行器件器件型号功能输出形式烟雾传感器MQ-2检测可燃气体和烟雾浓度模拟电压输出温湿度传感器DHT11获取环境温度和相对湿度单总线数字信号火焰传感器红外火焰检测明火/火焰光谱数字高低电平蜂鸣器有源蜂鸣器本地声光报警高低电平驱动继电器5V 继电器模块联动排气扇或电磁阀高低电平控制WiFi 模块ESP01S连接路由器并接入 OneNET串口 AT 指令MQ-2 需要注意传感器上电后需要预热一段时间读数才会稳定。它输出的是模拟量通过电位器可以调节灵敏度。DHT11 精度不高但性价比好适合做环境监测演示。火焰传感器通常输出数字信号检测到火焰时输出低电平使用时要注意避免阳光直射和红外干扰源。2.3 模块与 STM32 接线表把各模块与 STM32 引脚的接法整理成表格方便焊接时对照模块STM32 引脚说明MQ-2 模拟输出PA0 (ADC1_IN0)12 位 ADC 采样DHT11 DATAPA1单总线数据线需 4.7kΩ 上拉火焰传感器 OUTPB0数字输入默认高电平触发时低电平蜂鸣器PB1GPIO 输出高电平响继电器PB10GPIO 输出高电平吸合ESP01S TXPA3 (USART2_RX)STM32 接收 ESP01S 数据ESP01S RXPA2 (USART2_TX)STM32 发送 AT 指令给 ESP01SESP01S CH_PD3.3V使能引脚需接高电平ESP01S VCC3.3V注意电流需求见下方说明ESP01S 的供电是一个很容易踩坑的地方。它虽然标称工作电压 3.3V但射频发射瞬间电流可能达到几百毫安直接用 STM32 最小系统板上的 LDO 输出往往会出现电压跌落导致模块反复重启。正确的做法是单独用一块 AMS1117-3.3 稳压模块给 ESP01S 供电并加上 100μF 电解电容和 0.1μF 陶瓷电容滤波。3. 开发环境准备3.1 STM32 开发环境Windows 下最常见的组合是 STM32CubeMX Keil MDK。STM32CubeMX 负责图形化配置引脚、时钟和外设自动生成工程初始化代码Keil MDK 负责编译、下载和调试。安装时需要留意两点Keil MDK 安装完成后需要额外安装 STM32F1 系列器件支持包否则新建工程时找不到 STM32F103C8T6。如果之前安装过 C51 版本的 Keil注意 C51 和 MDK 可以共存但器件包路径不要混用。工程配置建议如下启用 USART1 作为调试串口波特率 115200。启用 USART2 连接 ESP01S波特率 115200。启用 ADC1 通道 0 采集烟雾浓度。启用 PB0、PB1、PB10 作为普通 GPIO。PA1 初始化时配置为开漏输出或推挽输出方便模拟 DHT11 时序。3.2 云平台与工器具准备除了嵌入式开发环境还需要准备以下工具工具用途OneNET 物联网平台账号创建产品、设备获取 APIKey手机 APP 或微信小程序开发工具开发远程监测页面串口调试助手调试 AT 指令查看 ESP01S 返回信息ST-Link 下载器给 STM32 下载固件万用表检查供电电压、通路和信号电平逻辑分析仪或示波器排查 UART 时序和 DHT11 波形版本说明STM32CubeMX、Keil、OneNET 平台版本更新较快本文示例以常见环境为主具体版本号请以你本机安装的软件为准。核心思路比版本号更重要。4. OneNET 云平台配置与接入4.1 注册并创建产品登录 OneNET 平台后进入控制台选择“多协议接入”或“MQTT 物联网套件”然后创建一个新产品。产品名称可以定义为“厨房安全监测系统”协议类型选择 MQTT。创建产品后系统会生成一个产品 ID例如123456。这个产品 ID 在后面配置设备连接时会用到先记录好。4.2 添加设备与获取鉴权信息在产品下添加设备设备名称填“kitchen_sensor”。添加成功后可以获取设备 ID 和设备级 APIKey。OneNET 的鉴权信息通常包括参数含义product_id产品 ID标识接入的产品device_id设备 ID标识具体设备api_key与设备绑定的 APIKey请求数据时放在 HTTP 头中在 MQTT 接入方式下常见登录参数对应关系为ClientID产品 IDUsername设备 IDPasswordAPIKey由于 OneNET 平台不同版本对参数的要求略有差异初次接入时务必以平台当前文档和调试工具为准。4.3 数据流设计约定OneNET 把传感器数据组织为“数据流”形式。可以预先规划以下数据流数据流 ID含义数据类型temperature温度floathumidity湿度floatsmoke烟雾浓度百分比intflame火焰状态intalarm是否报警int数据上报时OneNET 通常使用$dp主题发布数据点经典格式如下{ type: 1, dev_id: 123456789, ds_id: temperature, value: 26.5 }一次也可以带多个数据流实际以上报代码中封装的数据为主。命令下发主题一般为$sys/{product_id}/{device_id}/cmd如果需要做远程控制可以订阅这个主题。5. STM32 核心代码实现5.1 工程结构与代码分层为了让代码清晰建议把工程代码分为几个独立模块Core/ ├── Inc/ │ ├── main.h │ ├── sensor.h // 传感器相关头文件 │ ├── dht11.h │ ├── esp01s.h │ └── mqtt.h └── Src/ ├── main.c ├── sensor.c // MQ-2 采样 ├── dht11.c // DHT11 时序读取 ├── esp01s.c // AT 指令与数据上报 └── mqtt.c // MQTT 报文封装这种分层方式把硬件操作、协议封装和业务逻辑分开。以后更换传感器或通信模块时只需要改动对应文件不需要重写整个工程。5.2 MQ-2 烟雾传感器采集首先看 MQ-2 的 ADC 采样代码。// 文件路径Core/Src/sensor.c #include sensor.h #include adc.h // 获取 ADC 原始值 uint16_t Smoke_GetRawValue(void) { HAL_ADC_Start(hadc1); if (HAL_ADC_PollForConversion(hadc1, 100) HAL_OK) { return HAL_ADC_GetValue(hadc1); } return 0; } // 转换为百分比 0~100% float Smoke_GetPercent(void) { uint16_t raw Smoke_GetRawValue(); float voltage raw * 3.3f / 4096.0f; float percent voltage / 3.3f * 100.0f; if (percent 0) percent 0; if (percent 100) percent 100; return percent; }这里的计算思路是12 位 ADC最大值 4096 对应参考电压 3.3V因此通过原始值反推出电压再换算成百分比。实际项目中不建议直接用这个百分比作为气体浓度的物理值因为它只代表传感器输出电压的比例。你可以在实际环境下标定阈值例如记录正常燃烧、浓烟两种情况下的读数取中间值作为报警阈值。5.3 DHT11 温湿度读取DHT11 是单总线协议读取一次数据需要严格的时序控制。下面是核心的读取字节函数为了简洁省略了微秒级延时函数的实现。// 文件路径Core/Src/dht11.c #include dht11.h #include main.h #define DHT11_PORT GPIOA #define DHT11_PIN GPIO_PIN_1 // 切换为输出模式用于发送起始信号 static void DHT11_SetOutput(void) { GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStruct.Pin DHT11_PIN; GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(DHT11_PORT, GPIO_InitStruct); } // 切换为输入模式用于读取数据位 static void DHT11_SetInput(void) { GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStruct.Pin DHT11_PIN; GPIO_InitStruct.Mode GPIO_MODE_INPUT; GPIO_InitStruct.Pull GPIO_PULLUP; HAL_GPIO_Init(DHT11_PORT, GPIO_InitStruct); } // 读取一个字节 uint8_t DHT11_ReadByte(void) { uint8_t data 0; for (uint8_t i 0; i 8; i) { // 等待低电平结束 while (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN) GPIO_PIN_RESET); delay_us(40); if (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN) GPIO_PIN_SET) { data | (0x80 i); } while (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN) GPIO_PIN_SET); } return data; }读回 5 个字节后前 4 个字节分别是湿度整数、湿度小数、温度整数、温度小数第 5 个字节是校验和。校验方法为uint8_t sum byte0 byte1 byte2 byte3; if (sum ! byte4) { /* 校验失败丢弃本次数据 */ }DHT11 的代码中存在等待电平跳变的循环实际工程中要加入超时退出机制否则传感器接线异常时程序会卡死在等待循环里。这个细节在调试时非常重要。5.4 ESP01S AT 指令驱动ESP01S 默认固件支持 AT 指令。上电后先发送AT\r\n确认模块响应正常然后依次配置模组连接 WiFi。// 文件路径Core/Src/esp01s.c #include esp01s.h #include usart.h #include string.h #include stdio.h // 发送 AT 指令等待返回 ack 关键字 uint8_t ESP01S_SendCmd(const char *cmd, const char *ack, uint16_t timeout) { char buf[256] {0}; uint16_t bufLen 0; uint16_t elapsed 0; HAL_UART_Transmit(huart2, (uint8_t *)cmd, strlen(cmd), 1000); HAL_UART_Transmit(huart2, (uint8_t *)\r\n, 2, 1000); while (elapsed timeout) { uint8_t ch; if (HAL_UART_Receive(huart2, ch, 1, 100) HAL_OK) { if (bufLen sizeof(buf) - 1) { buf[bufLen] ch; buf[bufLen] \0; } if (strstr(buf, ack) ! NULL) { return 1; } } else { elapsed 100; } } return 0; } // ESP01S 连接 WiFi uint8_t ESP01S_JoinAP(const char *ssid, const char *password) { ESP01S_SendCmd(ATE0, OK, 2000); // 关闭回显 ESP01S_SendCmd(ATCWMODE1, OK, 2000); // Station 模式 char cmd[128]; snprintf(cmd, sizeof(cmd), ATCWJAP\%s\,\%s\, ssid, password); return ESP01S_SendCmd(cmd, WIFI GOT IP, 10000); }连接 WiFi 时有两个容易失败的地方。一个是密码中如果包含特殊字符需要转义另一个是路由器信号弱时等待时间要足够长。建议调试时先用串口助手单独测试 ESP01S 的 AT 指令确认每一步返回都正常后再接入 STM32 工程。5.5 MQTT 数据上报与本地报警逻辑为了保证数据能持续上报到 OneNET需要先和 OneNET MQTT 服务器建立 TCP 连接然后发送 MQTT CONNECT 报文和 MQTT PUBLISH 报文。这里给出数据封装和上报的核心流程。OneNET MQTT 服务器地址和端口请以平台文档为准常见配置为183.230.40.40:6002。使用 ESP01S 时先建立 TCP 连接uint8_t ESP01S_ConnectOneNET(void) { char cmd[128]; snprintf(cmd, sizeof(cmd), ATCIPSTART\TCP\,\%s\,%s, ONENET_HOST, ONENET_PORT); return ESP01S_SendCmd(cmd, CONNECT, 10000); }TCP 连接建立成功后通过ATCIPSEND进入透传发送。MQTT 报文需要自行封装这里重点看 PUBLISH 报文结构和 OneNET 数据区。PUBLISH 报文结构 [固定报头] 0x30 [剩余长度] 主题长度 载荷长度 2 [主题长度] 2 字节 [主题名] $dp [载荷] OneNET 数据流 JSON为了降低手写 MQTT 报文的复杂度可以在 mqtt.c 中维护一个发送缓冲区// 文件路径Core/Src/mqtt.c 核心思路 // mqtt_build_publish 函数把主题和载荷封装为 PUBLISH 报文 // 然后通过 huart2 发送给 ESP01SESP01S 再透传到 OneNET。OneNET 的数据区采用 JSON 格式示例{ type: 1, dev_id: 123456789, ds_id: temperature, value: 26.5 }如果一次上报多个数据流可以把ds_id和value分别组织也可以逐条上报。注意 JSON 中的值类型要与数据流定义保持一致否则平台可能拒绝写入。主循环的报警逻辑如下// 文件路径Core/Src/main.c 主循环核心逻辑 while (1) { float temperature DHT11_ReadTemperature(); float humidity DHT11_ReadHumidity(); float smoke Smoke_GetPercent(); uint8_t flame HAL_GPIO_ReadPin(FLAME_PORT, FLAME_PIN); // 本地阈值判断温度过高、烟雾过大、火焰触发任一条件即报警 if (temperature TEMP_THRESHOLD || smoke SMOKE_THRESHOLD || flame GPIO_PIN_RESET) { HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET); alarm_flag 1; } else { HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET); alarm_flag 0; } // 定时上报避免每次都发送造成数据冗余 if (send_tick 2000) { mqtt_publish_temperature(temperature); mqtt_publish_humidity(humidity); mqtt_publish_smoke((uint16_t)smoke); mqtt_publish_flame(flame GPIO_PIN_SET ? 0 : 1); if (alarm_flag) { mqtt_publish_alarm(1); } send_tick 0; } HAL_Delay(10); }定时上报的时间可以根据项目需要调整。演示项目 2 秒一次比较直观真实产品建议 10 秒甚至更长以减少云端 API 调用量和功耗。6. APP 小程序端设计6.1 APP 端功能规划手机端需要完成三个核心功能实时展示厨房当前温度、湿度、烟雾浓度和火焰状态。当报警标志位变化时通过页面提示或平台推送通知用户。展示历史数据曲线方便查看趋势。如果是毕业设计可以采用微信小程序作为应用端开发成本低且不用上架应用商店就能演示。小程序通过 OneNET 开放 API 拉取数据核心请求需要携带api-key请求头。6.2 小程序拉取数据示例下面给出小程序请求 OneNET 数据点接口的简化示例。OneNET 开放 API 路径不同版本可能有差异实际地址以平台文档为准。// 文件路径pages/dashboard/dashboard.js const ONENET_API_KEY 你的设备APIKey; const ONENET_DEVICE_ID 你的设备ID; Page({ data: { temperature: --, humidity: --, smoke: --, flame: --, alarmStatus: false, }, onShow() { this.fetchLatestData(); }, fetchLatestData() { wx.request({ url: https://api.heclouds.com/devices/${ONENET_DEVICE_ID}/datapoints?datastream_idtemperature,humidity,smoke,flamelimit1, method: GET, header: { api-key: ONENET_API_KEY, }, success: (res) { console.log(OneNET 返回:, res.data); // 根据返回数据结构更新页面 data }, fail: (err) { console.error(请求失败, err); }, }); }, });如果 OneNET 返回的数据流较多可以在 onShow 里进行一次聚合请求并把返回值解析后格式化到页面。需要刷新历史曲线时可以请求带起始时间和结束时间的数据点绘制成折线图。6.3 告警推送实现思路小程序的实时推送依赖微信订阅消息或云开发推送。如果不想申请模板消息可以采用一个简化的方案在 onShow 和定时轮询时检查最新的 alarm 数据流如果值为 1就在页面顶部显示红色告警条同时调用 wx.vibrateLong 震动提示。checkAlarm(data) { if (data.alarm 1) { this.setData({ alarmStatus: true }); wx.vibrateLong({}); wx.showModal({ title: 厨房安全告警, content: 检测到烟雾浓度过高或温度异常请及时处理, showCancel: false, }); } else { this.setData({ alarmStatus: false }); } }这种轮询方案虽然实时性不如 MQTT 长连接但胜在实现简单适合演示项目。如果希望真正实时收到推送可以考虑在小程序中通过 WebSocket 连接 OneNET 消息通道或使用第三方推送服务。7. PCB 设计实战7.1 原理图设计要点如果项目只是功能验证用杜邦线和面包板也可以跑通。但作为毕业设计作品或者竞赛作品一块定制的 PCB 会让整个项目看起来专业很多。原理图设计时建议拆分电源、主控、传感器接口、通信接口和继电器输出几个部分电源入口预留 USB Type-C 或 DC 插座经过保险丝和防反接二极管后进入稳压电路。STM32 最小系统包含 8MHz 晶振、复位按键、BOOT0 下拉电阻、SWD 下载接口。传感器接口做成 4Pin/3Pin 排针方便插拔替换传感器。ESP01S 使用 2×4Pin 排针引出天线区域附近不要铺铜。7.2 PCB 布局与布线规范布局布线直接影响系统稳定性尤其是包含 WiFi 射频、继电器这类大电流器件的板子。下面几条经验值得记下电源线至少要加宽到 1mm 以上GND 尽量大面积铺铜降低回路阻抗。ESP01S 天线区域正下方不要铺铜和走信号线否则 WiFi 信号会严重衰减。继电器线圈工作时会产生反向电动势需要在线圈两端并联续流二极管。蜂鸣器和继电器靠近板边布置远离 MCU 和晶振减少开关噪声干扰。晶振紧贴 MCU 摆放下方不要走其他信号线。走线优先 45 度角避免 90 度直角信号线尽量短而粗。模拟信号线如 MQ-2 的 ADC 线要与继电器控制线保持距离防止干扰。7.3 生成 Gerber 文件与打样PCB 设计完成后需要生成 Gerber 文件交给板厂生产。使用嘉立创 EDA 或 Altium Designer 导出 Gerber 时输出文件通常包含文件类型作用顶层铜层Top Layer底层铜层Bottom Layer顶层丝印Top Overlay阻焊层Solder Mask钻孔文件Drill File打样前在 3D 预览里检查一遍元件方向、接插件位置和丝印是否清晰。常用做法是让板厂同时拼板几块小样第一批打样主要用于验证电路不建议一次生产太多。焊接时先焊电源部分上电检查 5V 和 3.3V 是否正常再逐个焊接 MCU 最小系统、下载接口、ESP01S 模块座和传感器接口。每焊完一个模块就测试对应的功能避免全部焊完后无法定位问题。8. 常见问题与排查思路8.1 硬件连接类问题问题现象常见原因排查思路ST-Link 下载报错No STM32 target foundSWD 接线错误、芯片供电异常、BOOT 配置不对检查 3.3V 和 GND确认 SWDIO/SWCLK 是否接反尝试按住复位再下载板子上电后没有电流电源短路用万用表二极管档量电源输入检查钽电容和 IC 方向ESP01S 反复重启3.3V 供电不足换独立 AMS1117 供电并联 100μF 电容测量模块供电电压是否低于 3.2V串口收到乱码波特率不匹配ESP01S 默认 115200确认代码和串口助手波特率一致No STM32 target found是新手非常容易遇到的问题。大多数情况是 ST-Link 与板子之间的 SWD 连线错误或者板子供电不稳。如果确认连线正确可以在 Keil 的“Options for Target → Debug → Settings”里降低 SWD 通信速率再试一次。8.2 云平台接入类问题问题现象常见原因排查思路ESP01S 无法连接 WiFi密码错误、路由器 5G 频段导致无法识别ESP01S 只支持 2.4G检查路由器是否同时发射 2.4G 信号TCP 连接成功但收不到 CONNECT 响应ClientID、用户名、密码对应错误核对 OneNET MQTT 参数产品ID/设备ID/APIKey上报数据在平台看不到数据流 ID 与上报 payload 不一致在 OneNET 设备调试界面查看原始数据确认 JSON 格式API 请求返回权限错误APIKey 与设备不匹配复制设备级 APIKey注意 APIKey 不要混用产品级与设备级ESP01S 连不上 WiFi 时最好的调试方式是用串口助手单独连接模块发送ATCWJAP看它返回的是WIFI GOT IP还是FAIL。如果一直返回FAIL优先检查 WiFi 密码和路由器频段设置。8.3 数据异常类问题传感器数据不准也是最常见的反馈之一。MQ-2 传感器在首次上电时读数会漂移需要预热后在新鲜空气中校准零点。DHT11 如果读到温湿度为 0通常是起始时序不完整或者线长超过了 DHT11 的要求建议连线在 20 厘米以内数据线上接 4.7kΩ 上拉电阻。烟雾传感器还会受酒精、炒菜油烟干扰误报率偏高。实际项目中可以通过多次采样取中位值的方法滤除偶然波动或者把报警阈值调高一些。9. 最佳实践与工程化建议9.1 代码健壮性与异常处理真实项目里不能只写“理想路径”的代码还要考虑异常情况。以数据上报为例WiFi 断开、TCP 连接失败、平台响应超时都可能发生。建议在代码里增加状态机和失败重试机制ESP01S 每 10 秒检测一次 TCP 连接是否存活。发送数据后等待平台返回 ACK超时则标记上报失败。连续失败 5 次后重新执行 ATCWJAP 连接 WiFi。传感器读取失败时使用上次的有效值而不是把无效数据直接上报云端。这样即使网络抖动系统也能在短时间内自愈不会因为一次上报失败就导致整个监控流程停止。9.2 低功耗与稳定性优化如果是长期运行的厨房监测设备低功耗需要提前考虑降低 ADC 采样频率烟雾传感器不需要每毫秒都采样。上报周期适当延长默认 30 秒或更长。进入待机模式时关闭 ESP01S 电源通过定时唤醒后重新联网。电源部分加入 TVS 和保险丝防止雷击浪涌和过流。硬件稳定性方面需要注意继电器驱动电路必须用三极管或光耦隔离不要直接用 STM32 引脚驱动继电器线圈。复位电路建议加上看门狗定时器防止程序跑飞后设备“死机”。9.3 毕设与竞赛答辩注意事项如果这个项目用于毕业设计或竞赛建议从三个方面突出亮点工程完整度不只是传感器采集而是从硬件、嵌入式、云平台到手机端的完整闭环。系统扩展性预留了继电器接口和命令下行通道能实现远程排烟、远程关阀。数据处理能力在云平台端对历史数据做趋势分析比单纯展示当前值更有吸引力。答辩时可以现场演示厨房环境下烟雾浓度升高时手机端立刻出现告警的过程这种可视化效果比讲一百页 PPT 都有说服力。10. 总结基于 STM32 的厨房安全监测系统看起来涉及的东西很多但拆开后其实就是“采集、传输、展示”三个环节。硬件上STM32F103C8T6 负责控制和采集ESP01S 负责联网软件上STM32 通过 AT 指令与 ESP01S 通信把数据送到 OneNET手机端则通过开放 API 把云端数据拉取出来展示。这套方案的最大优势在于每个环节都有成熟方案和丰富资料适合初学者一步步从零搭建。顺着这条路线做完你不仅能加深对串口、ADC、GPIO、时序协议的理解还能建立起完整的物联网系统思维。后续可以继续探索的方向包括把 WiFi 换成 NB-IoT 或 4G 模组、接入除油烟机和天然气电磁阀联动、把上报协议改成更适合量产场景的 CoAP 或自定义 TCP 协议。建议先照着文章把本地报警和云端上报跑通再逐步增加远程控制、历史曲线、推送通知等功能。如果遇到问题优先用串口助手逐层排查数据链路本地传感器输出是否正常、ESP01S 是否正确连网、OneNET 是否收到数据点这几步定位完之后大部分问题都能迎刃而解。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。