在家庭种植和小型温室场景中,植物生长环境的光照、温湿度等参数对植物生长状态影响显著。本文将介绍一个基于FireBeetle 2 ESP32-C5开发的智能植物光照控制系统,该系统能够自动监测环境参数并智能调节光照,帮助植物在最佳环境中生长。
项目概述
本系统以FireBeetle 2 ESP32-C5为控制核心,集成了光照传感器、温湿度传感器(DHT11)、土壤湿度传感器等感知设备,以及WS2812 LED灯带作为光照输出设备。通过模块化设计实现了环境监测、光照智能控制、数据展示和远程管理等功能,具体特点包括:
- 实时监测光照强度、环境温湿度、土壤湿度等参数
- 支持自动和手动两种光照控制模式,可模拟植物不同生长阶段的光照需求
- 本地OLED屏幕显示关键数据,同时提供Web页面实现远程监控与控制
- 具备日志记录功能,便于追溯环境变化和系统操作
硬件设计
核心组件清单
组件 | 型号/规格 | 用途 |
---|---|---|
主控 | ESP32开发板 | 系统控制核心 |
光照传感器 | 模拟量输出 | 检测环境光照强度 |
温湿度传感器 | DHT11 | 检测环境温度和湿度 |
土壤湿度传感器 | 模拟量输出 | 检测土壤湿度 |
显示设备 | 12864 OLED屏幕(I2C) | 本地数据展示 |
光照设备 | WS2812 LED灯带(24灯珠) | 提供植物生长所需光照 |
引脚连接
系统引脚定义在Config.h
中集中管理,主要连接如下:
cpp
// 引脚定义(与硬件接线一致)
#define Moisture_Pin A4 // 土壤湿度传感器 AO 引脚
#define LED_PIN A3 // NeoPixel LED 数据引脚
#define LIGHT_SENSOR_PIN A2// 光照传感器 AO 引脚
#define DHT_PIN A1 // DHT11 数据引脚
#define LED_COUNT 24 // LED 灯珠数量
// OLED 配置
#define SCREEN_WIDTH 128 // OLED 宽度(像素)
#define SCREEN_HEIGHT 64 // OLED 高度(像素)
#define OLED_SDA 9 // OLED SDA 引脚
#define OLED_SCL 10 // OLED SCL 引脚
软件架构
系统采用模块化设计,各功能模块职责清晰,便于维护和扩展。主要模块包括:
核心模块介绍
-
配置模块(Config.h/.cpp)
系统配置中心,定义全局常量、引脚映射、全局变量和通用工具函数,集中管理WiFi、NTP等配置参数。
-
传感器模块(SensorModule.h/.cpp)
负责所有传感器的数据采集与处理,包括:
- 初始化传感器设备
- 定时读取光照、温湿度、土壤湿度数据
- 进行数据校验和异常判断(如温度过高/过低警告)
核心代码示例:
cpp// 读取所有传感器数据 void readSensors() { // 读取光照传感器 int lightValue = analogRead(LIGHT_SENSOR_PIN); currentLux = lightValue; // 读取温湿度传感器 float temp = dht.readTemperature(); float humi = dht.readHumidity(); if (!isnan(temp) && !isnan(humi)) { currentTemp = temp; currentHumidity = humi; } // 读取土壤湿度并转换为百分比 currentSoilMoisture = analogRead(Moisture_Pin); soilMoisturePercentage = constrain(100 - map(currentSoilMoisture, 1000, 3500, 0, 100), 0, 100); }
-
光照控制模块(LightControlModule.h/.cpp)
实现光照智能控制逻辑,支持:
- 自动模式:根据时间调度表自动调节光照参数
- 手动模式:提供生长、开花、育苗三种预设模式
- 基于环境光强度动态调整LED亮度
光照调度表示例:
cppLightSchedule schedules[] = { { 6, 8, 100, 50, 30, "Early morning" }, { 8, 12, 255, 150, 100, "Morning" }, { 12, 14, 200, 200, 150, "Noon" }, { 14, 18, 255, 180, 120, "Afternoon" }, { 18, 20, 150, 100, 80, "Evening" }, { 20, 6, 0, 10, 5, "Night" } };
-
显示模块(OledDisplayModule.h/.cpp)
控制OLED屏幕显示系统状态和环境数据,包括:
- 启动画面显示
- 实时更新传感器数据
- 显示系统时间和运行状态
-
网络与Web服务模块(WiFiNtpModule.h/.cpp & WebServerModule.h/.cpp)
实现网络连接和远程控制功能:
- WiFi连接管理和自动重连
- NTP时间同步
- Web服务器提供HTTP接口和控制页面
-
日志模块(LogModule.h/.cpp)
通过SPIFFS文件系统实现日志记录功能,包括:
- 系统事件和传感器数据记录
- 日志读取和清空操作
- 日志条目数量限制
系统工作流程
-
初始化阶段:系统启动后依次初始化各模块,包括传感器、OLED屏幕、WiFi和NTP服务、LED灯带等,并显示启动画面。
-
运行阶段:
- 按5秒间隔读取传感器数据并进行异常判断
- 按2秒间隔更新OLED显示内容
- 按1分钟间隔在自动模式下更新光照参数
- 维持WiFi连接,提供Web服务支持远程访问
-
光照控制逻辑:
- 自动模式下根据当前时间匹配光照调度表,结合环境光强度动态调节RGB亮度
- 手动模式下响应Web指令切换预设模式或调整亮度参数
远程控制实现
系统通过Web服务器提供远程监控和控制界面,主要功能包括:
- 查看实时环境数据(光照、温湿度、土壤湿度)
- 切换光照模式(自动/生长/开花/育苗)
- 手动调节RGB灯珠亮度
- 查看和清空系统日志
Web服务器路由配置:
cpp
// 配置Web服务器路由
server.on("/", handleRoot); // 根路径,显示控制页面
server.on("/mode", handleMode); // 处理光照模式切换
server.on("/setbright", handleBright); // 处理亮度调节
server.on("/clearlog", handleClearLog); // 处理日志清空
server.onNotFound(handleNotFound); // 处理404
总结与扩展
本项目实现了一个功能完整的智能植物光照控制系统,通过模块化设计保证了代码的可维护性和可扩展性。实际使用时,可根据具体植物品种的生长需求调整光照调度表和传感器阈值。
未来可扩展方向:
- 增加浇水控制模块,实现自动灌溉
- 集成MQTT协议,接入智能家居系统
- 添加数据历史曲线展示功能
- 实现多设备联动控制
通过这个项目,不仅可以为植物提供适宜的生长环境,还能深入学习ESP32开发、传感器应用、Web服务等物联网相关技术,是一个非常好的实践案例。
项目开源地址:https://gitee.com/akdxxdk/Plant-Lighting-Control-System/tree/master/PlantLightSystem