{"id":32861912,"url":"https://github.com/jasonrobertdestiny/espmonitor","last_synced_at":"2025-11-08T22:02:00.446Z","repository":{"id":322358655,"uuid":"1089181825","full_name":"JasonRobertDestiny/ESPMonitor","owner":"JasonRobertDestiny","description":"IoT environmental monitoring system with ESP32, Flask, and Web UI - Real-time temperature, humidity, and water level monitoring with threshold alerts","archived":false,"fork":false,"pushed_at":"2025-11-04T02:23:56.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-04T04:18:26.130Z","etag":null,"topics":["arduino","dht11","dht22","environmental-monitoring","esp32","flask","iot","realtime-monitoring","rest-api","sensors","sqlite","web-dashboard"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JasonRobertDestiny.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-04T02:00:14.000Z","updated_at":"2025-11-04T02:23:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/JasonRobertDestiny/ESPMonitor","commit_stats":null,"previous_names":["jasonrobertdestiny/espmonitor"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/JasonRobertDestiny/ESPMonitor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasonRobertDestiny%2FESPMonitor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasonRobertDestiny%2FESPMonitor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasonRobertDestiny%2FESPMonitor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasonRobertDestiny%2FESPMonitor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JasonRobertDestiny","download_url":"https://codeload.github.com/JasonRobertDestiny/ESPMonitor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JasonRobertDestiny%2FESPMonitor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":283424652,"owners_count":26833720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-08T02:00:06.281Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","dht11","dht22","environmental-monitoring","esp32","flask","iot","realtime-monitoring","rest-api","sensors","sqlite","web-dashboard"],"created_at":"2025-11-08T22:01:01.240Z","updated_at":"2025-11-08T22:02:00.435Z","avatar_url":"https://github.com/JasonRobertDestiny.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ESPMonitor - 物联网环境监控系统\n\n一个基于ESP32/ESP8266的完整环境监控解决方案,实现温度、湿度和水位的实时监测,数据可视化和远程阈值控制。\n\n**✨ 同时支持ESP32和ESP8266开发板**\n\n---\n\n## 系统架构\n\n```\nESP32/ESP8266 (传感器) --WiFi--\u003e Flask服务器 --HTTP--\u003e Web浏览器\n       ↓                             ↓                     ↓\n    读取数据                    存储到SQLite            实时显示\n    控制LED                     处理API请求             调整阈值\n```\n\n---\n\n## 功能特性\n\n### ESP32端\n- WiFi连接(STA模式)\n- DHT11/DHT22温湿度传感器读取\n- 水位传感器读取(模拟输入)\n- HTTP POST发送数据到服务器\n- HTTP GET获取阈值更新\n- 超阈值LED报警\n\n### 服务器端\n- Flask RESTful API\n- SQLite数据库存储\n- 实时数据接收和处理\n- 阈值管理\n- 历史数据查询\n- 统计分析(24小时)\n\n### Web界面\n- 实时数据展示(每5秒更新)\n- 温度/湿度/水位可视化卡片\n- 阈值远程调整\n- 24小时统计数据\n- 历史记录表格\n- 响应式设计\n\n---\n\n## 硬件需求\n\n### 开发板选择 (二选一)\n\n**ESP32** (推荐功能丰富):\n- ESP32开发板 (ESP-WROOM-32或类似)\n- 更多GPIO和ADC引脚\n- 更强性能\n\n**ESP8266** (推荐性价比):\n- NodeMCU v3 / Wemos D1 Mini\n- 更便宜($2-3)\n- 功耗更低\n- 性能够用\n\n**详细对比见**: [ESP8266_GUIDE.md](ESP8266_GUIDE.md)\n\n### 传感器\n- DHT11或DHT22温湿度传感器\n- 水位传感器(可选,模拟输出)\n- LED指示灯\n- 杜邦线和面包板\n\n### 引脚连接\n```\nDHT传感器:\n  - VCC  -\u003e 3.3V\n  - GND  -\u003e GND\n  - DATA -\u003e GPIO 4\n\n水位传感器:\n  - VCC  -\u003e 3.3V\n  - GND  -\u003e GND\n  - AOUT -\u003e GPIO 34 (ADC1_CH6)\n\nLED报警灯:\n  - 正极 -\u003e GPIO 2 (内置LED)\n  - 负极 -\u003e GND\n```\n\n---\n\n## 软件依赖\n\n### ESP32 (Arduino IDE)\n```\n- Arduino ESP32 Core (2.0.0+)\n- DHT sensor library (1.4.4+)\n- ArduinoJson (6.21.0+)\n```\n\n### 服务器 (Python 3.8+)\n```\n- Flask 3.0.0\n- flask-cors 4.0.0\n```\n\n---\n\n## 安装步骤\n\n### 1. ESP32固件部署\n\n1. 安装Arduino IDE和ESP32支持包\n2. 安装所需库:\n   - Sketch -\u003e Include Library -\u003e Manage Libraries\n   - 搜索并安装: DHT sensor library, ArduinoJson\n\n3. 配置WiFi和服务器:\n   ```bash\n   cd esp32\n   cp config.example.h config.h\n   # 编辑config.h,填入你的WiFi和服务器信息\n   ```\n\n4. 上传代码到ESP32:\n   - 打开 `esp32/ESPMonitor.ino`\n   - 选择开发板: Tools -\u003e Board -\u003e ESP32 Dev Module\n   - 选择端口: Tools -\u003e Port -\u003e (你的ESP32端口)\n   - 点击上传按钮\n\n### 2. Flask服务器部署\n\n1. 安装Python依赖:\n   ```bash\n   cd server\n   pip install -r requirements.txt\n   ```\n\n2. 启动服务器:\n   ```bash\n   python app.py\n   ```\n\n   服务器将在 `http://0.0.0.0:5000` 启动\n\n3. 访问Web界面:\n   ```\n   http://你的服务器IP:5000\n   ```\n\n### 3. 配置说明\n\n#### ESP32配置 (esp32/config.h)\n```cpp\n#define WIFI_SSID \"your_wifi_name\"\n#define WIFI_PASSWORD \"your_password\"\n#define SERVER_URL \"http://192.168.1.100:5000\"\n#define DEVICE_ID \"ESP32_01\"\n```\n\n#### 修改传感器引脚 (ESPMonitor.ino)\n```cpp\n#define DHT_PIN 4           // DHT传感器数据引脚\n#define WATER_LEVEL_PIN 34  // 水位传感器引脚\n#define ALERT_LED_PIN 2     // LED报警引脚\n```\n\n---\n\n## API文档\n\n### 1. 接收传感器数据\n```http\nPOST /api/sensor-data\nContent-Type: application/json\n\n{\n  \"device_id\": \"ESP32_01\",\n  \"temperature\": 26.5,\n  \"humidity\": 58.2,\n  \"water_level\": 45.0\n}\n```\n\n### 2. 获取最新数据\n```http\nGET /api/latest-data?limit=20\n```\n\n### 3. 获取阈值\n```http\nGET /api/thresholds\n\nResponse:\n{\n  \"temperature\": 30.0,\n  \"humidity\": 70.0,\n  \"water_level\": 80.0\n}\n```\n\n### 4. 更新阈值\n```http\nPOST /api/thresholds\nContent-Type: application/json\n\n{\n  \"temperature\": 28.0,\n  \"humidity\": 75.0,\n  \"water_level\": 85.0\n}\n```\n\n### 5. 获取历史数据\n```http\nGET /api/history?device_id=ESP32_01\u0026limit=100\n```\n\n### 6. 获取统计数据\n```http\nGET /api/stats\n```\n\n---\n\n## 使用说明\n\n### 首次启动\n1. 确保ESP32和Flask服务器在同一网络\n2. 修改ESP32的`config.h`,填入正确的服务器IP\n3. 上传固件到ESP32\n4. 启动Flask服务器\n5. ESP32会自动连接WiFi并开始发送数据\n\n### 调整阈值\n1. 打开Web界面 `http://服务器IP:5000`\n2. 在\"阈值设置\"区域输入新的阈值\n3. 点击\"更新阈值\"按钮\n4. ESP32会在10秒内获取新阈值并应用\n\n### 监控报警\n- 当任何读数超过阈值时:\n  - ESP32的LED会亮起\n  - Web界面对应卡片会变为警告色并闪烁\n  - 串口监视器会打印警告信息\n\n---\n\n## 故障排查\n\n### ESP32无法连接WiFi\n- 检查SSID和密码是否正确\n- 确保WiFi是2.4GHz频段(ESP32不支持5GHz)\n- 查看串口监视器的连接日志\n\n### 数据无法发送到服务器\n- 检查服务器IP是否正确\n- 确保服务器已启动\n- 检查防火墙是否阻止5000端口\n- 查看串口监视器的HTTP响应代码\n\n### Web界面显示\"离线\"\n- 检查ESP32是否正常运行\n- 确保ESP32能正常发送数据(查看串口)\n- 刷新浏览器页面\n\n### 数据库问题\n- 数据库文件位于: `database/espmonitor.db`\n- 如需重置,删除此文件后重启服务器\n- 服务器会自动重建数据库\n\n---\n\n## 项目结构\n\n```\nESPMonitor/\n├── esp32/\n│   ├── ESPMonitor.ino         # ESP32主程序\n│   └── config.example.h       # 配置模板\n├── server/\n│   ├── app.py                 # Flask主应用\n│   ├── requirements.txt       # Python依赖\n│   ├── static/\n│   │   ├── css/\n│   │   │   └── style.css      # 样式表\n│   │   └── js/\n│   │       └── dashboard.js   # 前端逻辑\n│   └── templates/\n│       └── dashboard.html     # 主页面\n├── database/\n│   └── espmonitor.db          # SQLite数据库(自动创建)\n└── README.md                  # 本文档\n```\n\n---\n\n## 扩展建议\n\n### 硬件扩展\n- 添加更多传感器(光照、气压、PM2.5等)\n- 添加继电器控制(风扇、加湿器等)\n- 使用OLED屏幕显示本地数据\n- 添加蜂鸣器报警\n\n### 软件扩展\n- 实现WebSocket实时推送(替代轮询)\n- 添加用户认证和授权\n- 数据导出功能(CSV/Excel)\n- 图表可视化(Chart.js)\n- 微信/邮件报警通知\n- 移动端APP\n\n### 部署建议\n- 使用Nginx反向代理Flask\n- 使用Gunicorn/uWSGI部署生产环境\n- 使用MySQL/PostgreSQL替代SQLite\n- 容器化部署(Docker)\n\n---\n\n## 技术栈\n\n- **硬件**: ESP32, DHT11/22, 水位传感器\n- **固件**: Arduino C++\n- **后端**: Python 3.8+, Flask 3.0\n- **数据库**: SQLite 3\n- **前端**: HTML5, CSS3, Vanilla JavaScript\n- **通信**: HTTP REST API\n\n---\n\n## 许可证\n\nMIT License - 自由使用、修改和分发\n\n---\n\n## 作者\n\nESPMonitor v1.0\n\n如有问题或建议,欢迎提交Issue或Pull Request。\n\n---\n\n## 更新日志\n\n### v1.0 (2025-10-29)\n- 初始版本发布\n- ESP32传感器读取和WiFi通信\n- Flask RESTful API\n- Web实时监控界面\n- SQLite数据存储\n- 阈值远程控制\n- LED报警功能\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjasonrobertdestiny%2Fespmonitor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjasonrobertdestiny%2Fespmonitor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjasonrobertdestiny%2Fespmonitor/lists"}