#include <WiFi.h>
#include <WebServer.h>
// Thông tin WiFi
const char* ssid = "Wokwi-GUEST"; // Đổi nếu cần
const char* password = ""; // Wokwi không cần mật khẩu
// Địa chỉ IP tĩnh
IPAddress local_IP(192, 168, 1, 5);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
WebServer server(80);
// Chân Relay
const int relayPins[4] = {21, 19, 18, 5};
// Xử lý bật/tắt relay
void handleRelay() {
String relayID = server.arg("relay");
String state = server.arg("state");
if (relayID.length() > 0 && state.length() > 0) {
int relayIndex = relayID.toInt();
int relayState = state.toInt();
if (relayIndex >= 0 && relayIndex < 4) {
digitalWrite(relayPins[relayIndex], relayState);
Serial.printf("Relay %d is %s\n", relayIndex, relayState ? "ON" : "OFF");
server.send(200, "text/plain", "Relay " + relayID + " is " + (relayState ? "ON" : "OFF"));
} else {
server.send(400, "text/plain", "Invalid relay ID");
}
} else {
server.send(400, "text/plain", "Missing parameters");
}
}
// Trang web điều khiển
void handleRoot() {
server.send(200, "text/html",
"<h1>ESP32 Relay Control - Group1</h1>"
"<button onclick=\"fetch('/relay?relay=0&state=1')\">Relay 1 ON</button>"
"<button onclick=\"fetch('/relay?relay=0&state=0')\">Relay 1 OFF</button>"
"<br>"
"<button onclick=\"fetch('/relay?relay=1&state=1')\">Relay 2 ON</button>"
"<button onclick=\"fetch('/relay?relay=1&state=0')\">Relay 2 OFF</button>"
"<br>"
"<button onclick=\"fetch('/relay?relay=2&state=1')\">Relay 3 ON</button>"
"<button onclick=\"fetch('/relay?relay=2&state=0')\">Relay 3 OFF</button>"
"<br>"
"<button onclick=\"fetch('/relay?relay=3&state=1')\">Relay 4 ON</button>"
"<button onclick=\"fetch('/relay?relay=3&state=0')\">Relay 4 OFF</button>"
);
}
void setup() {
Serial.begin(115200);
// Kết nối WiFi
WiFi.mode(WIFI_STA); // Đảm bảo ESP32 chạy ở chế độ Station
if (!WiFi.config(local_IP, gateway, subnet)) {
Serial.println("⚠ IP Static failed!");
}
WiFi.begin(ssid, password);
Serial.print("Đang kết nối WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n✅ Kết nối WiFi thành công!");
Serial.print("📡 Địa chỉ IP của ESP32: ");
Serial.println(WiFi.localIP());
// Cấu hình relay
for (int i = 0; i < 4; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], LOW);
}
// Định tuyến
server.on("/", handleRoot);
server.on("/relay", handleRelay);
server.begin();
}
void loop() {
server.handleClient();
}