本节课源码
#include <WiFi.h> // 引入WiFi库,用于WiFi功能
#include <WebServer.h> // 引入Web服务器库
const char *ssid = "2333"; // 定义WiFi的SSID
const char *password = "88888888";// 定义WiFi的密码
// 定义两个引脚:湿度传感器和水泵
const int ssrPin = 34; // 土壤湿度传感器连接的引脚,ADC模拟输入
const int waterPin = 23; // 控制水泵的引脚,数字输出
// 创建一个Web服务器实例,默认端口为80
WebServer server(80);
void setup() {
Serial.begin(115200); // 开始串行通信,波特率设置为115200
pinMode(ssrPin, INPUT); // 将土壤湿度传感器的引脚设置为输入模式
pinMode(waterPin, OUTPUT); // 将水泵控制的引脚设置为输出模式// 连接wifi
WiFi.begin(ssid, password); // 使用指定的SSID和密码开始WiFi连接
while (WiFi.status() != WL_CONNECTED) {
delay(1000); // 如果未连接,则每秒重试一次
Serial.println("正在连接中..."); // 在串行监视器上打印状态
}
Serial.println("连接成功:"); // 打印连接成功的消息
Serial.println(WiFi.localIP());// 打印分配给ESP32的IP地址
// 定义服务器路由
server.on("/", HTTP_GET, handleRoot); // 定义根路由,用于显示主页
server.on("/shidu", HTTP_GET, handleMoisture); // 定义湿度检测路由
server.on("/kai", HTTP_GET, kai); // 定义开启水泵的路由
server.on("/guan", HTTP_GET, guan); // 定义关闭水泵的路由
// 启动服务器
server.begin(); // 启动Web服务器
}
void loop() {
server.handleClient(); // 处理客户端的请求
}
void handleRoot() {
String html = "<html><meta charset='UTF-8'><body>";
html += "<h1>土壤湿度传感器</h1>";
html += "<p>湿度值: <span id='moistureValue'>0</span></p>";
html += "<a href='/kai'>开启</a><br>";
html += "<a href='/guan'>关闭</a><br><br>";
html += "<script>";
html += "setInterval(function() {fetch('/shidu').then(response => response.text()).then(data => document.getElementById('moistureValue').innerHTML = data);}, 2000);";
html += "</script>";
html += "</body></html>";
server.send(200, "text/html", html); // 发送HTML内容作为响应
}
void handleMoisture() {
int moistureValue = analogRead(ssrPin); // 读取土壤湿度传感器的值
server.send(200, "text/plain", String(moistureValue)); // 发送读取的湿度值作为响应
}
void kai() {
digitalWrite(waterPin, HIGH); // 将水泵控制引脚设置为高电平,开启水泵
server.send(204); // 发送HTTP状态码204,表示无内容响应
}
void guan() {
digitalWrite(waterPin, LOW); // 将水泵控制引脚设置为低电平,关闭水泵
server.send(204); // 发送HTTP状态码204,表示无内容响应
}