#include <WiFi.h>
#include <WebServer.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
// Setup NTP
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 8*3600, 60000);
// 8*3600 = GMT+8 (Malaysia), 60000 = update setiap 60s
// Definisi saiz skrin
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// Buat objek display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const char* ssid = "kingfinix"; // tukar ikut wifi awak
const char* password = "09090909";
WebServer server(80);
#define RELAY_PIN 2 // tukar ikut pin relay awak
void setup() {
Serial.begin(115200);
// Mula display
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("OLED tak detect! Semak wiring..."));
for(;;); // Stop kalau tak jumpa
}
display.clearDisplay();
// Teks demo
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,10);
display.println("Hello!");
display.display();
delay(2000);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // mula-mula relay
WiFi.begin(ssid, password);
Serial.print("Sambung WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("ESP32 IP: ");
Serial.println(WiFi.localIP());
// Bila dapat request /on → hidupkan relay
server.on("/on", []() {
digitalWrite(RELAY_PIN, LOW);
server.send(200, "text/plain", "Relay ON");
Serial.println("Relay ON");
});
// Bila dapat request /off → matikan relay
server.on("/off", []() {
digitalWrite(RELAY_PIN, HIGH);
server.send(200, "text/plain", "Relay OFF");
Serial.println("Relay OFF");
});
server.begin();
Serial.println("Server bermula");
}
void loop() {
server.handleClient();
}