#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
#include <RTClib.h> // Library untuk Real-time Clock
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27,16,2); //Mengakses alamat LCD
const int BalkonDanTerasRelay = 9; // Pin untuk relay lampu balkon dan teras
const int RuangTengahDanKamarRelay = 10; // Pin untuk relay lampu ruang tengah dan kamar
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "Wokwi-GUEST"; // Wifi name
const char* pass = ""; // Wifi pass
const char* webAppUrl = "https://script.google.com/macros/s/AKfycby8Gbyf_Bd4BZvAFuNgAh6JOYeSOw8YItzwZy3fNqC1GkdNh_ZQ_v94aGsTSjSwBWCf/exec";
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(100);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
lcd.init(); // Reset LCD
lcd.backlight(); // Menyalakan background LCD
rtc.begin(); // Mulai Real time clock
pinMode(BalkonDanTerasRelay, OUTPUT);
pinMode(RuangTengahDanKamarRelay, OUTPUT);
rtc.adjust(DateTime(2024, 05, 20, 17, 59, 50));
}
void loop() {
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print("Tgl : "); lcd.print(now.day()); lcd.print("/"); lcd.print(now.month()); lcd.print("/"); lcd.print(now.year());
lcd.setCursor(0,1);
lcd.print("Jam : "); lcd.print(now.hour()); lcd.print(":"); lcd.print(now.minute()); lcd.print(":"); lcd.print(now.second());
if (now.hour() >= 18 && now.minute() >= 0 && now.second() >=0 ||now.hour()<6) {
// Saat pukul 18.00
digitalWrite(BalkonDanTerasRelay, HIGH); //Nyalakan lampu Teras dan Balkon
sendDataToScript("lampu Teras dan Balkon Hidup");
} else if (now.hour() >= 6 && now.minute() >= 0) {
// Saat pukul 06.00
digitalWrite(BalkonDanTerasRelay, LOW); // Matikan lampu Teras dan Balkon
sendDataToScript("lampu Teras dan Balkon Mati");
}
if (now.hour() >= 17 && now.minute() >= 0 && now.second() >= 0 || now.hour()<6) {
// Saat pukul 17.00
digitalWrite(RuangTengahDanKamarRelay, HIGH); //Nyalakan lampu Ruang Tengah dan Kamar
sendDataToScript("lampu Ruang Tengah dan Kamar Hidup");
} else if (now.hour() >= 6 && now.minute() >= 0) {
// Saat pukul 06.00
digitalWrite(RuangTengahDanKamarRelay, LOW); //Matikan lampu Ruang Tengah dan Kamar
sendDataToScript("lampu Ruang Tengah dan Kamar Mati");
}
}
void sendDataToScript(String lampu) {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi not connected, can't send data");
return;
}
HTTPClient http;
String serverPath = String(webAppUrl) + "?lampu=" + urlEncode(lampu);
Serial.print("Connecting to server: ");
Serial.println(serverPath);
// Send HTTP GET request
if (http.begin(serverPath.c_str())) {
int httpCode = http.GET();
if (httpCode > 0) {
Serial.print("Server response code: ");
Serial.println(httpCode);
// String payload = http.getString();
// Serial.println("Server response: " + payload);
} else {
Serial.print("HTTP GET request failed with error code: ");
Serial.println(httpCode);
Serial.println("Error message: " + http.errorToString(httpCode));
String payload = http.getString();
Serial.println("Server response: " + payload);
}
http.end();
} else {
Serial.println("Unable to connect to the server");
}
delay(2000);
}
String urlEncode(String str) {
String encodedString = "";
char c;
for (int i = 0; i < str.length(); i++) {
c = str.charAt(i);
if (isalnum(c)) {
encodedString += c;
} else {
encodedString += '%';
encodedString += charToHex(c >> 4);
encodedString += charToHex(c & 15);
}
}
return encodedString;
}
char charToHex(char c) {
if (c < 10) return '0' + c;
return 'A' + c - 10;
}