#include <Arduino.h>
#include <WiFi.h>
#include <WebServer.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_SDA 22
#define OLED_SCL 21
#define AUTO_PIN 35
#define MANUAL_PIN 34
#define FILTER_PIN 33
#define BACKWASH_PIN 32
#define RELAY_AUTO 4
#define RELAY_MANUAL 15
#define RELAY_FILTER 2
#define RELAY_BACKWASH 5
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
WebServer server(80);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
void setup() {
Serial.begin(115200);
pinMode(AUTO_PIN, INPUT_PULLUP);
pinMode(MANUAL_PIN, INPUT_PULLUP);
pinMode(FILTER_PIN, INPUT_PULLUP);
pinMode(BACKWASH_PIN, INPUT_PULLUP);
pinMode(RELAY_AUTO, OUTPUT);
pinMode(RELAY_MANUAL, OUTPUT);
pinMode(RELAY_FILTER, OUTPUT);
pinMode(RELAY_BACKWASH, OUTPUT);
display.begin(SSD1306_PAGEADDR, OLED_SDA, OLED_SCL);
display.display();
delay(1000);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
}
void loop() {
// Read switch states
bool autoSwitch = digitalRead(AUTO_PIN);
bool manualSwitch = digitalRead(MANUAL_PIN);
bool filterSwitch = digitalRead(FILTER_PIN);
bool backwashSwitch = digitalRead(BACKWASH_PIN);
// Update relay states and OLED display based on switch states
if (autoSwitch) {
digitalWrite(RELAY_AUTO, HIGH);
digitalWrite(RELAY_MANUAL, LOW);
digitalWrite(RELAY_FILTER, LOW);
digitalWrite(RELAY_BACKWASH, LOW);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("AUTOMATIC SWITCH ON");
display.display();
} else if (manualSwitch) {
digitalWrite(RELAY_AUTO, LOW);
digitalWrite(RELAY_MANUAL, HIGH);
digitalWrite(RELAY_FILTER, LOW);
digitalWrite(RELAY_BACKWASH, LOW);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("MANUAL SWITCH ON");
display.display();
} else if (filterSwitch) {
digitalWrite(RELAY_AUTO, LOW);
digitalWrite(RELAY_MANUAL, LOW);
digitalWrite(RELAY_FILTER, HIGH);
digitalWrite(RELAY_BACKWASH, LOW);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("SYSTEM IS FILTERING");
display.display();
} else if (backwashSwitch) {
digitalWrite(RELAY_AUTO, LOW);
digitalWrite(RELAY_MANUAL, LOW);
digitalWrite(RELAY_FILTER, LOW);
digitalWrite(RELAY_BACKWASH, HIGH);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("SYSTEM IS BACKWASHING");
display.display();
}
}
void handleRoot() {
String html = "<html><body>";
html += "<h1>ESP32 Control Panel</h1>";
html += "<p>Automatic Switch: ";
html += digitalRead(AUTO_PIN) ? "ON" : "OFF";
html += "</p>";
html += "<p>Manual Switch: ";
html += digitalRead(MANUAL_PIN) ? "ON" : "OFF";
html += "</p>";
html += "<p>Filtering Switch: ";
html += digitalRead(FILTER_PIN) ? "ON" : "OFF";
html += "</p>";
html += "<p>Backwash Switch: ";
html += digitalRead(BACKWASH_PIN) ? "ON" : "OFF";
html += "</p>";
html += "</body></html>";
server.send(200, "text/html", html);
}