摘要
ESP32_DHT11_Get_temp_humi 是一个完整的温湿度物联网原型:ESP32 读取 DHT11 与 DS18B20 数据,在 OLED 上显示当前状态,并通过 HTTP 上传到 Flask 服务;服务端将数据写入 MySQL,网页再读取历史数据并绘制温湿度曲线。仓库还包含 BOM 和 Gerber 文件,覆盖从电路到软件展示的主要环节。
项目背景
温湿度监测看似简单,却很适合作为 IoT 全链路练习。一个完整系统需要处理传感器读取、设备联网、数据上报、服务端校验、数据库存储、跨域访问和网页可视化。这个项目将这些环节放在同一仓库中,方便观察数据如何从物理世界进入浏览器。
核心功能
- ESP32 读取 DHT11 湿度和 DS18B20 温度。
- SSD1306 OLED 实时显示时间与传感器值。
- 设备通过 HTTP JSON 周期上报数据。
- 写入服务验证设备令牌并保存到 MySQL。
- 读取服务提供历史数据接口。
- 网页使用 Chart.js 展示当前值和历史曲线。
- 提供 PCB BOM、Gerber 与部署资料。
技术架构与技术栈
设备端基于 MicroPython,使用 machine、dht、onewire、ds18x20、ssd1306 和 urequests。服务端采用 Python、Flask、PyMySQL 与 Flask-CORS,数据库为 MySQL;前端是原生 HTML、JavaScript 和 Chart.js。
安全更新将 Wi‑Fi、服务器地址、数据库连接和设备令牌全部移出源码。设备端通过本地 config.py 读取配置,服务端使用环境变量;写入接口要求 X-Device-Token,服务也不再输出数据库连接内容。
项目亮点
项目的亮点是链路完整:不仅有传感器代码,也保留了 PCB 制造资料、服务端和可视化页面。经过安全整理后,它更适合作为公开参考项目,读者可以用示例配置启动自己的环境,而不会误用仓库作者的网络参数。
使用与部署
设备端需要先刷入 MicroPython,并安装显示屏与传感器相关模块。复制 ESP32/config.example.py 为设备本地的 config.py,填写自己的 Wi‑Fi、写入服务地址和随机设备令牌后上传到 ESP32。
服务端参考 Server/env.example 设置 MySQL、令牌、允许的网页来源与监听地址,然后分别启动写入和读取服务。网页默认访问同源 /api/fetch-data,也可以使用 URL 参数指定 API 地址。生产环境建议通过反向代理提供 HTTPS,并限制数据库与写入端口的网络范围。
适用场景
- 家庭或实验室环境监测。
- MicroPython 传感器与 OLED 入门。
- IoT 数据上报、鉴权、存储和可视化教学。
- 继续扩展告警、设备管理和时间序列数据库的基础项目。