1. 项目背景与核心功能
地下停车场和充电站的充电桩安全一直是行业痛点。去年我参与过一个商业项目,现场运维人员反馈说传统充电桩遇到环境异常时经常反应滞后,有次甚至因为温度过高导致电缆熔化。这个毕设项目就是要用物联网技术解决这类问题。
这套系统的核心在于实时环境监测+智能联动控制。STM32F103C8T6作为主控芯片,通过DHT11温湿度传感器和MQ-2烟雾传感器采集环境数据,当检测到温度超过55℃或烟雾浓度超标时,系统会在0.5秒内自动切断继电器停止充电,同时触发蜂鸣器报警。实测中,这个响应速度比市面普通充电桩快3倍以上。
2. 硬件架构设计
2.1 主控与通信模块选型
选择STM32F103C8T6是经过多轮对比测试的结果。相比ESP32,STM32在以下方面表现更优:
- 5V容忍IO口直接连接传感器
- 更稳定的PWM输出控制继电器
- 更低的工作电流(实测待机仅12mA)
ESP8266-01s WiFi模块的配置有个小技巧:在AT指令阶段需要先发送AT+CWMODE=1设置为Station模式,再用AT+CWJAP="SSID","PASSWORD"连接热点。我遇到过模块频繁掉线的问题,后来发现是电源不稳导致的,建议在VCC和GND之间加个100μF电容。
2.2 传感器电路设计
温湿度传感器接线要注意上拉电阻:
// DHT11接线示例 #define DHT11_PIN GPIO_Pin_0 GPIO_InitStructure.GPIO_Pin = DHT11_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; // 开漏输出烟雾传感器需要ADC采集:
// MQ-2配置 ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5);3. 软件系统实现
3.1 多任务调度设计
使用FreeRTOS创建了三个任务:
- 环境监测任务(优先级3)
- MQTT通信任务(优先级2)
- 用户界面刷新任务(优先级1)
关键代码片段:
xTaskCreate(vEnvMonitorTask, "EnvMonitor", 128, NULL, 3, NULL); xTaskCreate(vMQTTTask, "MQTT", 256, NULL, 2, NULL);3.2 MQTT协议实现
采用Paho MQTT嵌入式客户端,主题设计如下:
- 发布主题:/charger/status
- 订阅主题:/charger/control
消息格式采用JSON:
{ "temp": 28.5, "humidity": 45, "smoke": 120, "relay1": 0, "relay2": 1 }4. APP开发关键点
4.1 跨平台兼容方案
使用Flutter框架开发,重点解决了两个问题:
- Android权限处理:需要在AndroidManifest.xml添加网络权限
- MQTT连接保活:设置心跳间隔为60秒
4.2 数据可视化
采用折线图展示历史数据,关键依赖:
dependencies: fl_chart: ^0.55.1报警阈值设置界面使用了Slider组件:
Slider( value: tempThreshold, min: 30, max: 80, divisions: 50, label: tempThreshold.round().toString(), onChanged: (value) {...} )5. 系统测试与优化
5.1 压力测试方案
搭建了模拟环境进行72小时连续测试:
- 高温测试:用电吹风加热至60℃
- 烟雾测试:用香烟制造烟雾环境
- 网络测试:随机断开WiFi模拟弱网
测试数据对比表:
| 测试项 | 传统方案 | 本系统 |
|---|---|---|
| 响应时间 | 2.1s | 0.4s |
| 误报率 | 18% | 3% |
| 功耗 | 15W | 8W |
5.2 常见问题解决
- ESP8266断连问题:增加看门狗定时器,每30秒发送心跳包
- 传感器数据漂移:采用滑动平均滤波算法
- APP卡顿:优化MQTT回调函数,避免主线程阻塞
6. 项目扩展方向
实际部署时可以增加以下功能:
- 电能计量:接入HLW8032芯片监测用电量
- 摄像头联动:通过RTSP协议连接IPCamera
- 第三方对接:开发微信小程序控制端
有次在现场调试时发现,当多个充电桩同时工作时,WiFi信道拥堵会导致通信延迟。后来改用MQTT QoS1级别+消息去重机制,将通信成功率提升到99.7%。这个经验告诉我,物联网项目不仅要考虑单设备运行,更要测试多设备协同场景。