一个基于ESP32/ESP8266的完整环境监控解决方案,实现温度、湿度和水位的实时监测,数据可视化和远程阈值控制。
✨ 同时支持ESP32和ESP8266开发板
ESP32/ESP8266 (传感器) --WiFi--> Flask服务器 --HTTP--> Web浏览器
↓ ↓ ↓
读取数据 存储到SQLite 实时显示
控制LED 处理API请求 调整阈值
- WiFi连接(STA模式)
- DHT11/DHT22温湿度传感器读取
- 水位传感器读取(模拟输入)
- HTTP POST发送数据到服务器
- HTTP GET获取阈值更新
- 超阈值LED报警
- Flask RESTful API
- SQLite数据库存储
- 实时数据接收和处理
- 阈值管理
- 历史数据查询
- 统计分析(24小时)
- 实时数据展示(每5秒更新)
- 温度/湿度/水位可视化卡片
- 阈值远程调整
- 24小时统计数据
- 历史记录表格
- 响应式设计
ESP32 (推荐功能丰富):
- ESP32开发板 (ESP-WROOM-32或类似)
- 更多GPIO和ADC引脚
- 更强性能
ESP8266 (推荐性价比):
- NodeMCU v3 / Wemos D1 Mini
- 更便宜($2-3)
- 功耗更低
- 性能够用
详细对比见: ESP8266_GUIDE.md
- DHT11或DHT22温湿度传感器
- 水位传感器(可选,模拟输出)
- LED指示灯
- 杜邦线和面包板
DHT传感器:
- VCC -> 3.3V
- GND -> GND
- DATA -> GPIO 4
水位传感器:
- VCC -> 3.3V
- GND -> GND
- AOUT -> GPIO 34 (ADC1_CH6)
LED报警灯:
- 正极 -> GPIO 2 (内置LED)
- 负极 -> GND
- Arduino ESP32 Core (2.0.0+)
- DHT sensor library (1.4.4+)
- ArduinoJson (6.21.0+)
- Flask 3.0.0
- flask-cors 4.0.0
-
安装Arduino IDE和ESP32支持包
-
安装所需库:
- Sketch -> Include Library -> Manage Libraries
- 搜索并安装: DHT sensor library, ArduinoJson
-
配置WiFi和服务器:
cd esp32 cp config.example.h config.h # 编辑config.h,填入你的WiFi和服务器信息
-
上传代码到ESP32:
- 打开
esp32/ESPMonitor.ino - 选择开发板: Tools -> Board -> ESP32 Dev Module
- 选择端口: Tools -> Port -> (你的ESP32端口)
- 点击上传按钮
- 打开
-
安装Python依赖:
cd server pip install -r requirements.txt -
启动服务器:
python app.py
服务器将在
http://0.0.0.0:5000启动 -
访问Web界面:
http://你的服务器IP:5000
#define WIFI_SSID "your_wifi_name"
#define WIFI_PASSWORD "your_password"
#define SERVER_URL "http://192.168.1.100:5000"
#define DEVICE_ID "ESP32_01"#define DHT_PIN 4 // DHT传感器数据引脚
#define WATER_LEVEL_PIN 34 // 水位传感器引脚
#define ALERT_LED_PIN 2 // LED报警引脚POST /api/sensor-data
Content-Type: application/json
{
"device_id": "ESP32_01",
"temperature": 26.5,
"humidity": 58.2,
"water_level": 45.0
}GET /api/latest-data?limit=20GET /api/thresholds
Response:
{
"temperature": 30.0,
"humidity": 70.0,
"water_level": 80.0
}POST /api/thresholds
Content-Type: application/json
{
"temperature": 28.0,
"humidity": 75.0,
"water_level": 85.0
}GET /api/history?device_id=ESP32_01&limit=100GET /api/stats- 确保ESP32和Flask服务器在同一网络
- 修改ESP32的
config.h,填入正确的服务器IP - 上传固件到ESP32
- 启动Flask服务器
- ESP32会自动连接WiFi并开始发送数据
- 打开Web界面
http://服务器IP:5000 - 在"阈值设置"区域输入新的阈值
- 点击"更新阈值"按钮
- ESP32会在10秒内获取新阈值并应用
- 当任何读数超过阈值时:
- ESP32的LED会亮起
- Web界面对应卡片会变为警告色并闪烁
- 串口监视器会打印警告信息
- 检查SSID和密码是否正确
- 确保WiFi是2.4GHz频段(ESP32不支持5GHz)
- 查看串口监视器的连接日志
- 检查服务器IP是否正确
- 确保服务器已启动
- 检查防火墙是否阻止5000端口
- 查看串口监视器的HTTP响应代码
- 检查ESP32是否正常运行
- 确保ESP32能正常发送数据(查看串口)
- 刷新浏览器页面
- 数据库文件位于:
database/espmonitor.db - 如需重置,删除此文件后重启服务器
- 服务器会自动重建数据库
ESPMonitor/
├── esp32/
│ ├── ESPMonitor.ino # ESP32主程序
│ └── config.example.h # 配置模板
├── server/
│ ├── app.py # Flask主应用
│ ├── requirements.txt # Python依赖
│ ├── static/
│ │ ├── css/
│ │ │ └── style.css # 样式表
│ │ └── js/
│ │ └── dashboard.js # 前端逻辑
│ └── templates/
│ └── dashboard.html # 主页面
├── database/
│ └── espmonitor.db # SQLite数据库(自动创建)
└── README.md # 本文档
- 添加更多传感器(光照、气压、PM2.5等)
- 添加继电器控制(风扇、加湿器等)
- 使用OLED屏幕显示本地数据
- 添加蜂鸣器报警
- 实现WebSocket实时推送(替代轮询)
- 添加用户认证和授权
- 数据导出功能(CSV/Excel)
- 图表可视化(Chart.js)
- 微信/邮件报警通知
- 移动端APP
- 使用Nginx反向代理Flask
- 使用Gunicorn/uWSGI部署生产环境
- 使用MySQL/PostgreSQL替代SQLite
- 容器化部署(Docker)
- 硬件: ESP32, DHT11/22, 水位传感器
- 固件: Arduino C++
- 后端: Python 3.8+, Flask 3.0
- 数据库: SQLite 3
- 前端: HTML5, CSS3, Vanilla JavaScript
- 通信: HTTP REST API
MIT License - 自由使用、修改和分发
ESPMonitor v1.0
如有问题或建议,欢迎提交Issue或Pull Request。
- 初始版本发布
- ESP32传感器读取和WiFi通信
- Flask RESTful API
- Web实时监控界面
- SQLite数据存储
- 阈值远程控制
- LED报警功能