#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <HTTPClient.h>
#include <WiFiClient.h>
#include <WiFi.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS1307 rtc;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* webAppUrl = "https://script.google.com/macros/s/AKfycbwnxZJZYCeXxsIp3VwdFS0vNpjTuWm0aSf-b93LgmwdNpzdCHVBsaQoH1B0kOSoH4rD-g/exec";
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int YEAR, MONTH, DAY, HOUR, MIN, SEC, DAY_OF_WEEK;
#define ON HIGH
#define OFF LOW
#define Relay1_pin 19
#define Relay2_pin 18
#define Relay3_pin 17
// Prototipe fungsi
void Timer_ON(int Coil, int H, int M);
void Timer_OFF(int Coil, int H, int M);
void sendDataToScript(String status);
void setup() {
pinMode(Relay1_pin, OUTPUT);
pinMode(Relay2_pin, OUTPUT);
pinMode(Relay3_pin, OUTPUT);
digitalWrite(Relay1_pin, OFF);
digitalWrite(Relay2_pin, OFF);
digitalWrite(Relay3_pin, OFF);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
lcd.init();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("Premphon IoT");
lcd.setCursor(1, 3);
lcd.print("LiquidCrystal_I2C");
Serial.begin(115200);
Serial.println("Hello, ESP32!");
}
void loop() {
DateTime now = rtc.now();
YEAR = now.year();
MONTH = now.month();
DAY = now.day();
HOUR = now.hour();
MIN = now.minute();
SEC = now.second();
DAY_OF_WEEK = now.dayOfTheWeek();
lcd.setCursor(0, 1);
lcd.print(DAY); lcd.print("/");
lcd.print(MONTH); lcd.print("/");
lcd.print(YEAR); lcd.print(":");
lcd.print(HOUR); lcd.print(":");
lcd.print(MIN); lcd.print(":");
lcd.print(SEC);
lcd.setCursor(5, 2);
lcd.print(daysOfTheWeek[DAY_OF_WEEK]);
Serial.print(YEAR, DEC);
Serial.print('/');
Serial.print(MONTH, DEC);
Serial.print('/');
Serial.print(DAY, DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[DAY_OF_WEEK]);
Serial.print(") ");
Serial.print(HOUR, DEC);
Serial.print(':');
Serial.print(MIN, DEC);
Serial.print(':');
Serial.print(SEC, DEC);
Serial.println();
Timer_ON(1, 11, 49);
Timer_OFF(1, 11, 50);
// Kirim data ke server Google Apps Script
sendDataToScript(String(HOUR) + ":" + String(MIN) + ":" + String(SEC));
delay(1000);
}
void Timer_ON(int Coil, int H, int M) {
if((HOUR == H) && (MIN == M)) {
Serial.print("Relay " + String(Coil) + " is ON");
digitalWrite(Relay1_pin, ON);
digitalWrite(Relay2_pin, ON);
digitalWrite(Relay3_pin, ON);
}
}
void Timer_OFF(int Coil, int H, int M) {
if((HOUR == H) && (MIN == M)) {
Serial.print("Relay " + String(Coil) + " is OFF");
digitalWrite(Relay1_pin, OFF);
digitalWrite(Relay2_pin, OFF);
digitalWrite(Relay3_pin, OFF);
}
}
void sendDataToScript(String status) {
HTTPClient http;
String serverPath = String(webAppUrl) + "?status=" + status;
Serial.print("Connecting to server: ");
Serial.println(serverPath);
if (WiFi.status() == WL_CONNECTED) {
if (http.begin(serverPath)) {
int httpCode = http.GET();
if (httpCode > 0) {
Serial.print("Server response code: ");
Serial.println(httpCode);
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println("Payload: " + payload);
}
} else {
Serial.print("HTTP GET request failed with error code: ");
Serial.println(httpCode);
Serial.println(http.errorToString(httpCode).c_str());
}
http.end();
} else {
Serial.println("Unable to connect to the server");
}
} else {
Serial.println("WiFi is not connected");
}
}