ESP8266太阳能气象站
概述
这篇文章介绍了使用太阳能板、ESP8266开发板和 DHT11 传感器模块制作气象站,开发板定时采集温湿度数据上报到服务器,白天使用太阳能板给 18650 电池充电,晚上和光线弱的环境使用电池供电,支持低功耗长时间运行。

物料
硬件
| 名称 | 数量 | 价格 | 备注 |
|---|---|---|---|
| ESP8266 | 1 | ¥10 | |
| 3V太阳能板 | 1 | ¥3 | 已焊线,60*60多晶滴胶板 |
| DHT11温湿度传感器模块 | 1 | ¥2.2 | |
| TP4056锂电池充电模块 | 1 | ¥6.8 | 购买的套装,包含充电模块、升压板、电池盒 |
| 移动电源升压板(带USB口) | 1 | - | |
| 18650电池盒(单节) | 1 | - | |
| 18650锂电池 | 1 | ¥10 | |
| MT3608升压板 | 1 | ¥4 | |
| 杜邦线(母对母) | 4 | 0.4 | 连接ESP8266与DHT11模块,短接ESP8266的D0与RST引脚 |
| 导线 | 4 | 0.2 | 焊接连接板卡 |
软件
| 名称 | 版本 | 下载链接 | 备注 |
|---|---|---|---|
| Arduino | 1.8.9 | https://www.arduino.cc/en/software | 编写、烧录ESP8266代码 |
| IntelliJ IDEA | 2025.2.3 | https://www.jetbrains.com/idea/ | 编写、运行服务端代码 |
| MySQL | 8.0.39 | https://www.mysql.com/cn/downloads/ | 存储上报的温湿度传感器数据 |
| Docker Desktop | 4.79.0 | https://www.docker.com/products/docker-desktop/ | (可选)用于安装MySQL |
工具
| 名称 | 用途 | 备注 |
|---|---|---|
| Windows电脑 | 编写、烧录 ESP8266 代码,编写、运行服务端代码与数据库 | |
| 电烙铁 | 用于焊接导线和板卡模块 | |
| micro数据线 | 开发调试时将 ESP8266连到电脑上烧录程序,后期连接开发板和锂电池升压板,用于给开发板供电 | |
| 万用表 | 检测 MT3608升压板输出电压 | |
| 直流电源 | (可选)调试阶段可给MT3608升压板供电,用于调节配置 |
原理
太阳能充电
本次使用的太阳能板标称输出电压为 3V,经测试在光照充足的情况下,输出电压为 3.5V,光照不足时电压降低,此电压无法直接给 ESP8266 供电(需要5V),也无法给锂电池充电(锂电池充电电压需高于4.2V)。
因此,需要使用 DC-DC 升压板,将 3.5V先升压到 5V,再送进充电模块。本次使用的是 MT3608 模块,支持输入2.5V-15V,输出电压可调(最大 28V),最大输出电流 2A。

本项目使用带充放电保护的 TP4056 锂电池充电模块,太阳能板提供的 3.5V电压经过 MT3608 升压到 5V,再输入到 TP4056 为电池充电。

锂电池供电
本项目使用单节 18650 电池作为电源,充满时能够提供 4.2V输出,但 ESP8266 需要 5V电源输入,因此在电池输出端还需要使用升压模块将电压提升到 5V给开发板供电。
本次使用的是带 USB口的锂电池升压模块,能够将锂电池输出电压提升至 5V,同时自带了 USB口,方便使用 USB-Micro 数据线给开发板供电。

读取温湿度数据
项目中使用 DHT11 温湿度模块采集数据,在Arduino 开发工具的库管理器中添加DHT11 库即可获取到相关示例。
上传温湿度数据到服务端
ESP8266 从DHT11 传感器读取到数据后,连接WiFi,使用http请求调用服务器的接口,将数据上传到服务器。
安装与连线
graph TD;
subgraph ESP8266
subgraph 定时唤醒短接
ESP8266_RST[RST]---ESP8266_D0[D0]
end
ESP8266_VCC[3.3V]
ESP8266_GND[GND]
ESP8266_D2[D2]
ESP8266_MICRO(Micro口)
end
subgraph 锂电池升压板
HW106_IN+[+]
HW106_IN-[-]
HW106_USB(USB)==数据线===ESP8266_MICRO
end
subgraph TP4056
TP4056_IN+[+]
TP4056_IN-[-]
TP4056_OUT+[OUT+]---HW106_IN+
TP4056_OUT-[OUT-]---HW106_IN-
TP4056_B+[B+]
TP4056_B-[B-]
end
subgraph 18650锂电池
B18650_Z[+]---TP4056_B+
B18650_F[-]---TP4056_B-
end
subgraph MT3608
MT3608_VIN_Z(VIN+)
MT3608_VIN_F(VIN-)
MT3608_VOUT_Z(VOUT+)---TP4056_IN+
MT3608_VOUT_F(VOUT-)---TP4056_IN-
end
subgraph 太阳能板
SOLAR_PANEL_Z[+]---MT3608_VIN_Z
SOLAR_PANEL_F[-]---MT3608_VIN_F
end
subgraph DHT11
ESP8266_VCC---DHT11_VCC[VCC]
ESP8266_GND---DHT11_GND[GND]
ESP8266_D2---DHT11_OUT[OUT]
end
代码
开发板代码
代码主要逻辑:
- 设定 WiFi名称、密码、服务端地址、DHT11数据读取引脚。
- 在 setup 函数中完成连接 WiFi、读取 DHT11 数据、向服务器发送上报数据请求,调用
ESP.deepSleep()函数让开发板深度休眠。 - loop 函数为空。
1 |
|
服务器代码
本次服务端使用 Java 开发,使用 springboot 快速搭建 web 服务。
提供一个 /api/weather/upload 接口接收设备上报的温湿度数据,接收后到控制台,给设备返回上传成功信息。
1 | import org.springframework.boot.SpringApplication; |
测试
运行服务器代码,将在8080端口启动web服务。
烧录开发板代码到ESP8266,把各个组件的连线连好,上电后会读取上报一次温湿度数据,在服务器的控制台能看到打印的数据。

总结
这个项目里学习了使用太阳能板,通过升压模块将3.6V电压升压至5V给锂电池充电。
学习了使用锂电池充放电板。
经观察,DHT11传感器的灯在 ESP8266 休眠期间是亮着的,还是在耗电,实际使用期间,大概三四天会把锂电池电量耗光,要重新给电池充电才能继续使用,做不到太阳能自给自足,优化方案有:
- 把DHT11换成功耗更低、响应更快的数字传感器,比如SHT30、BME280
- 增加太阳能板并联接入,提高充电能力
后续其它玩法:
- 更换上传数据的协议,比如使用MQTT、TCP、UDP上报数据到服务器
- 扩展服务器功能,比如数据存库,增加统计图,增加告警等
- 添加更多类型的传感器,采集更丰富的数据