ESP8266-12S 智能温湿度监控系统
项目简介
本项目基于 ESP8266-12S 开发板,结合 DHT11 温湿度传感器,实现了一套完整的物联网环境监测解决方案。系统通过 MQTT 协议实时上传环境数据,同时利用 InfluxDB 时序数据库进行数据持久化存储,适用于智能家居、农业大棚、工业监控等场景。
系统架构
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ DHT11 │────▶│ ESP8266-12S │────▶│ MQTT Broker│
│ 温湿度传感器│ │ │ │ (EMQX) │
└─────────────┘ └──────┬───────┘ └─────────────┘
│
▼
┌──────────────┐
│ InfluxDB │
│ 时序数据库 │
└──────────────┘
技术栈
| 技术组件 | 说明 |
|---|---|
| 硬件平台 | ESP8266-12S WiFi 模块 |
| 传感器 | DHT11 温湿度传感器 |
| 通信协议 | MQTT over TLS/SSL (8883 端口) |
| 消息中间件 | EMQX Cloud |
| 时序数据库 | InfluxDB Cloud |
| 时间同步 | NTP 协议 (阿里云 NTP 服务器) |
| 安全认证 | BearSSL + Digicert CA 证书 |
核心功能
1. 数据采集
- 温度采集(单位:摄氏度)
- 湿度采集(单位:百分比)
- WiFi 信号强度(RSSI)
- 设备运行时间戳
2. 数据传输
- MQTT 发布:通过加密通道实时推送传感器数据
- InfluxDB 写入:持久化存储历史数据用于分析
3. 网络特性
- WiFi STA 模式:连接主路由器获取互联网
- WiFi AP 模式:创建热点供其他设备接入
- 自动重连机制:断线后自动恢复连接
- 睡眠禁用:保持持续在线状态
4. 安全机制
- TLS/SSL加密传输(MQTT over SSL)
- X.509 证书验证
- MQTT 账号密码认证
MQTT Topic 设计
| Topic | 方向 | 描述 | 数据格式 |
|---|---|---|---|
mqtt-topic/home | 发布 | 温湿度数据 | {"temp":xx,"hum":xx,"time":xxx} |
mqtt-topic/wifi_status | 发布 | WiFi 状态 | {"rssi":xx,"uptime":xx,"time":xxx} |
mqtt-topic/online_status | 订阅/发布 | 设备在线状态 | {"mac":"x.x.x.x"} |
InfluxDB 数据模型
measurement: wifi_status
tags: ssid
fields: rssi, uptime
measurement: home
tags: room
fields: temp, hum
硬件连接
| ESP8266 引脚 | DHT11 引脚 | 说明 |
|---|---|---|
| GPIO4 (D2) | DATA | 单向串行数据 |
| 3.3V | VCC | 电源 |
| GND | GND | 接地 |
代码结构
main.ino
├── setup() // 初始化 WiFi、MQTT、传感器、时间同步
├── loop() // 主循环:数据采集与上报
├── connectToMQTT() // MQTT 连接建立(含 SSL 证书验证)
└── syncTime() // NTP 时间同步
关键配置项
// WiFi 配置
const char* ssid = "your_ssid";
const char* password = "your_password";
// MQTT 配置
const char* mqtt_server = "broker_address";
const int mqtt_port = 8883; // SSL 端口
// InfluxDB 配置
#define INFLUXDB_URL "https://your-influxdb-url"
#define INFLUXDB_TOKEN "your_token"
#define INFLUXDB_ORG "your_org"
#define INFLUXDB_BUCKET "your_bucket"
依赖库
使用 Arduino IDE 安装以下库:
ESP8266WiFi // ESP8266 官方 WiFi 库
Adafruit_Sensor // 传感器统一接口
DHT_Unified // DHT 系列传感器驱动
PubSubClient // MQTT 客户端
WiFiUDP // UDP 网络支持
NTPClient // NTP 时间同步
InfluxDbClient // InfluxDB 客户端
InfluxDbCloud // InfluxDB Cloud 支持
BearSSL // SSL/TLS 加密库
部署步骤
-
环境准备
- 安装 Arduino IDE 及 ESP8266 板卡支持
- 安装所需依赖库
-
配置修改
- 修改 WiFi 账号密码
- 配置 MQTT Broker 地址和凭证
- 配置 InfluxDB 连接参数
-
编译烧录
- 选择开发板:NodeMCU 1.0 (ESP-12E Module)
- 选择上传端口
- 点击上传
-
验证运行
- 打开串口监视器(115200 波特率)
- 观察连接状态和传感器读数
性能指标
- 采样间隔: 约 2.5 秒(受 DHT11 读取延迟影响)
- 内存占用: ~70%(ESP8266 Flash 受限)
- 功耗: 约 70mA(工作态),可通过深度睡眠优化
- 有效距离: WiFi 信号范围内
扩展建议
- 数据可视化: 配合 Grafana 搭建监控仪表盘
- 告警机制: 添加阈值判断触发告警
- OTA 升级: 实现远程固件更新
- 多传感器: 扩展 PM2.5、光照等传感器
- 本地缓存: WiFi 断开时本地暂存数据
注意事项
⚠️ 安全提示: 生产环境请修改默认密码,避免硬编码敏感信息
⚠️ 内存管理: ESP8266 内存有限,谨慎添加功能
⚠️ 散热问题: 长时间运行注意设备散热
开源协议
MIT License