在本篇文章中,我们将详细介绍如何使用ESP32开发板制作一个智能植物浇水系统。这个项目将结合硬件和软件知识,通过传感器检测土壤湿度,并根据湿度值自动控制水泵进行浇水。
首先明确项目的需求:
以下是所需的主要硬件组件:
ESP32通过模拟输入引脚(ADC)读取土壤湿度传感器的电压值。传感器输出的电压与土壤湿度成比例关系,通常需要通过实验标定具体数值范围。
代码示例:
#include <Arduino.h>
const int soilSensorPin = 34; // ADC 引脚
float soilMoistureValue;
void setup() {
Serial.begin(115200);
}
void loop() {
soilMoistureValue = analogRead(soilSensorPin); // 读取传感器值
Serial.print("Soil Moisture Value: ");
Serial.println(soilMoistureValue);
delay(1000); // 每秒读取一次
}
通过数字引脚控制NPN三极管或继电器模块来开关水泵。需要注意的是,水泵的工作电压通常高于ESP32的供电电压,因此必须使用外部电源供电。
代码示例:
const int pumpControlPin = 2; // GPIO2 作为控制引脚
bool isPumpOn = false;
void setup() {
pinMode(pumpControlPin, OUTPUT);
}
void controlPump(bool state) {
digitalWrite(pumpControlPin, state ? HIGH : LOW);
isPumpOn = state;
}
void loop() {
if (soilMoistureValue < 1000) { // 假设湿度低于某个阈值时需要浇水
controlPump(true);
} else {
controlPump(false);
}
delay(1000);
}
利用ESP32的WiFi功能,可以实现远程访问和控制。我们可以创建一个简单的Web服务器,用户通过浏览器访问即可查看湿度信息并控制水泵。
代码示例:
#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "your_SSID"; // 替换为你的WiFi名称
const char* password = "your_PASSWORD"; // 替换为你的WiFi密码
WebServer server(80);
void handleRoot() {
String html = "<h1>Smart Plant Watering System</h1>";
html += "<p>Soil Moisture: " + String(soilMoistureValue) + "</p>";
html += "<a href=\"/wateron\">Turn Pump On</a><br>";
html += "<a href=\"/wateroff\">Turn Pump Off</a>";
server.send(200, "text/html", html);
}
void handleWaterOn() {
controlPump(true);
server.send(200, "text/plain", "Pump Turned On");
}
void handleWaterOff() {
controlPump(false);
server.send(200, "text/plain", "Pump Turned Off");
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
server.on("/", handleRoot);
server.on("/wateron", handleWaterOn);
server.on("/wateroff", handleWaterOff);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
以下是整个系统的逻辑流程图:
flowchart TD A[开始] --> B{读取湿度值} B -->|湿度低于阈值| C[开启水泵] B -->|湿度正常| D[关闭水泵] C --> E{是否达到目标湿度?} E -->|是| D E -->|否| F[继续浇水] D --> G[返回主循环]