以下是基于ESP32的智能窗帘控制代码示例,利用Wi-Fi实现手机APP控制窗帘的开关。系统根据环境光强自动调节窗帘开关状态。

#include <WiFi.h>
#include <ESPAsyncWebServer.h>

#define MOTOR_PIN_1 23 // 电机驱动引脚1
#define MOTOR_PIN_2 22 // 电机驱动引脚2
#define LDR_PIN A0     // 光敏电阻输入引脚
#define LIGHT_THRESHOLD 500 // 光照强度阈值

// Wi-Fi设置
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// 创建Web服务器
AsyncWebServer server(80);

void setup() {
  Serial.begin(115200);
  pinMode(MOTOR_PIN_1, OUTPUT);
  pinMode(MOTOR_PIN_2, OUTPUT);
  pinMode(LDR_PIN, INPUT);

  // 连接Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("WiFi connected!");

  // 创建Web页面
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    String html = "<html><body><h1>智能窗帘控制</h1>";
    html += "<button onclick=\"window.location.href='/open'\">开窗帘</button><br><br>";
    html += "<button onclick=\"window.location.href='/close'\">关窗帘</button><br><br>";
    html += "</body></html>";
    request->send(200, "text/html", html);
  });

  // 开窗帘控制
  server.on("/open", HTTP_GET, [](AsyncWebServerRequest *request){
    openCurtain();
    request->send(200, "text/html", "窗帘已打开 <br><a href='/'>返回</a>");
  });

  // 关窗帘控制
  server.on("/close", HTTP_GET, [](AsyncWebServerRequest *request){
    closeCurtain();
    request->send(200, "text/html", "窗帘已关闭 <br><a href='/'>返回</a>");
  });

  // 启动服务器
  server.begin();
}

void loop() {
  // 自动控制窗帘:根据光照强度自动调节窗帘
  int lightLevel = analogRead(LDR_PIN);
  if (lightLevel < LIGHT_THRESHOLD) {
    openCurtain();
  } else {
    closeCurtain();
  }

  delay(1000); // 每秒检测一次光照强度
}

// 开窗帘的函数
void openCurtain() {
  digitalWrite(MOTOR_PIN_1, HIGH);
  digitalWrite(MOTOR_PIN_2, LOW);
}

// 关窗帘的函数
void closeCurtain() {
  digitalWrite(MOTOR_PIN_1, LOW);
  digitalWrite(MOTOR_PIN_2, HIGH);
}

代码解释

  • Wi-Fi连接:通过ESP32的Wi-Fi模块连接到家庭网络,使用ESPAsyncWebServer库创建一个简单的Web服务器,用户可以通过浏览器访问并控制窗帘的开关。
  • 光照传感器控制:通过光敏电阻(LDR)实时检测光照强度,当光照强度低于阈值时,自动打开窗帘;当光照强度超过阈值时,自动关闭窗帘。
  • 电机控制:通过控制电机驱动引脚(如使用H桥电路或继电器),来控制窗帘电机的方向,进而实现窗帘的开关。
  • Web控制:通过浏览器发送HTTP请求,实现对窗帘的远程控制(通过点击“开窗帘”或“关窗帘”按钮)。