/* ESP32 WiFi Scanning example */
#include <WiFi.h>
#include <Wire.h>
#include <RTClib.h>
#include <ESPAsyncWebSrv.h>
// WiFi credentials
const char* ssid = "YourWiFiName";
const char* password = "YourWiFiPassword";
// Pin definitions
const int RELAY_PIN = 26;
// RTC object
RTC_DS1307 rtc;
// Web server on port 80
AsyncWebServer server(80);
// Timer variables
bool timerEnabled = false;
int onHour = 0;
int onMinute = 0;
int offHour = 0;
int offMinute = 0;
void setup() {
Serial.begin(115200);
// Initialize relay pin
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
// Initialize RTC
Wire.begin(21, 22); // SDA, SCL
if (!rtc.begin()) {
Serial.println("RTC failed to initialize");
while (1);
}
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Serial.println(WiFi.localIP());
// Web server routes
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
String html = "<html><body>";
html += "<h1>Smart Socket Control</h1>";
html += "<button onclick='toggleRelay()'>Toggle Socket</button>";
html += "<script>function toggleRelay(){fetch('/toggle');}</script>";
html += "</body></html>";
request->send(200, "text/html", html);
});
server.on("/toggle", HTTP_GET, [](AsyncWebServerRequest *request) {
digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));
request->send(200);
});
server.begin();
}
void loop() {
if (timerEnabled) {
DateTime now = rtc.now();
// Check if it's time to turn on
if (now.hour() == onHour && now.minute() == onMinute) {
digitalWrite(RELAY_PIN, HIGH);
}
// Check if it's time to turn off
if (now.hour() == offHour && now.minute() == offMinute) {
digitalWrite(RELAY_PIN, LOW);
}
}
delay(1000);
}