//connect WiFi
#include <WiFi.h> // Library untuk koneksi WiFi ESP32
// Menyimpan SSID dan password WiFi yang digunakan untuk koneksi
const char *ssid = "vivoV27"; // Nama WiFi (SSID), SESUAIKAN
const char *password = "persib1933"; // Password WiFi, SESUAIKAN
//Firebase
#include <FirebaseESP32.h> // Library untuk koneksi Firebase Realtime Database
// Konfigurasi Firebase
#define FIREBASE_HOST "https://lampu-dekat-jauh-starter-default-rtdb.firebaseio.com/"
// URL database realtime Firebase, SESUAIKAN
#define FIREBASE_AUTH "AIzaSyCq-KU54isRal6SJA1gDbOS1lDtUAIKaTQ"
// Token (database secrets / legacy token), SESUAIKAN
// Membuat objek yang digunakan library Firebase
FirebaseData firebaseData; // Objek untuk komunikasi data
FirebaseAuth firebaseAuth; // Objek autentikasi
FirebaseConfig firebaseConfig; // Objek konfigurasi koneksi
// Variabel untuk menampung data dari Firebase
String lampudekatdatafb, lampujauhdatafb; // Menyimpan data lampu dari widget aplikasi
int lampudekatvaluefb, lampujauhvaluefb; // Menyimpan nilai hasil konversi string ke integer
String lampudekatdatafbSpeech, lampujauhdatafbSpeech, mesinnyaladatafbSpeech, mesinmatidatafbSpeech; // Menyimpan data dari perintah suara (Speech)
int lampudekatvaluefbSpeech, lampujauhvaluefbSpeech, mesinnyalavaluefbSpeech, mesinmativaluefbSpeech; // Nilai integer dari perintah suara
NetworkServer server(80); // Membuat server dengan port 80 (untuk akses HTTP)
// Definisi pin
const int tomboldekat = 34; // Pin Input push button lampu dekat
const int tomboljauh = 35; // Pin Input push button lampu jauh
const int lampudekat = 21; // Pin Output lampu dekat
const int lampujauh = 19; // Pin Output lampu jauh
const int relayACC = 16;
const int relayON = 17;
const int relayST = 18;
int nilaitomboldekat = 0;
int nilaitomboljauh = 0;
int statusmesin = 0;
void setup() {
// Program yang dijalankan sekali saat ESP32 menyala
Serial.begin(115200); // Memulai komunikasi serial dengan baudrate 115200
Serial.println("Project Lampu Dekat dan Jauh");
// Koneksi ke WiFi
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid); // Tampilkan SSID yang sedang dihubungkan
WiFi.begin(ssid, password); // Memulai koneksi WiFi
// Looping sampai WiFi tersambung
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("."); // Cetak titik sebagai indikator proses koneksi
}
Serial.println("");
Serial.println("WiFi connected."); // Notifikasi koneksi berhasil
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); // Menampilkan IP ESP32 di jaringan
server.begin(); // Memulai server HTTP
// Konfigurasi Firebase
firebaseConfig.host = FIREBASE_HOST; // Set alamat database
firebaseConfig.signer.tokens.legacy_token = FIREBASE_AUTH; // Set token autentikasi
Firebase.begin(&firebaseConfig, &firebaseAuth); // Mulai koneksi Firebase
// Inisialisasi pin
pinMode(tomboldekat, INPUT); // Tombol dengan internal pull-up
pinMode(tomboljauh, INPUT );
pinMode(lampudekat, OUTPUT);
pinMode(lampujauh, OUTPUT);
pinMode(relayACC, OUTPUT);
pinMode(relayON, OUTPUT);
pinMode(relayST, OUTPUT);
}
void loop() {
// Program yang dijalankan berulang-ulang
// Membaca status tombol fisik
nilaitomboldekat = digitalRead(tomboldekat);
nilaitomboljauh = digitalRead(tomboljauh);
// Membaca data dari Firebase untuk lampu jauh
if (Firebase.getString(firebaseData, "/LAT1_LampuDEKAT_LampuJAUH2/StateLampuJauh")) {
if (firebaseData.dataType() == "string") { // Pastikan tipe data string
lampujauhdatafb = firebaseData.stringData(); // Simpan data string
lampujauhvaluefb = lampujauhdatafb.toInt(); // Ubah string ke integer (0/1)
}
}
// Membaca data dari Firebase untuk lampu dekat
if (Firebase.getString(firebaseData, "/LAT1_LampuDEKAT_LampuJAUH2/StateLampuDekat")) {
if (firebaseData.dataType() == "string") {
lampudekatdatafb = firebaseData.stringData();
lampudekatvaluefb = lampudekatdatafb.toInt();
}
}
// Membaca data perintah suara (Speech) untuk lampu jauh
if (Firebase.getString(firebaseData, "/LAT1_LampuDEKAT_LampuJAUH2/SpeechLampuJauh")) {
if (firebaseData.dataType() == "string") {
lampujauhdatafbSpeech = firebaseData.stringData();
lampujauhvaluefbSpeech = lampujauhdatafbSpeech.toInt();
}
}
// Membaca data perintah suara (Speech) untuk lampu dekat
if (Firebase.getString(firebaseData, "/LAT1_LampuDEKAT_LampuJAUH2/SpeechLampuDekat")) {
if (firebaseData.dataType() == "string") {
lampudekatdatafbSpeech = firebaseData.stringData();
lampudekatvaluefbSpeech = lampudekatdatafbSpeech.toInt();
}
}
// membaca data perintah suara mesin nyala
if (Firebase.getString(firebaseData, "/LAT1_LampuDEKAT_LampuJAUH2/SpeechEngineStart")) {
if (firebaseData.dataType() == "string") {
mesinnyaladatafbSpeech = firebaseData.stringData();
mesinnyalavaluefbSpeech = mesinnyaladatafbSpeech.toInt();
}
}
if (Firebase.getString(firebaseData, "/LAT1_LampuDEKAT_LampuJAUH2/SpeechEngineStop")) {
if (firebaseData.dataType() == "string") {
mesinmatidatafbSpeech = firebaseData.stringData();
mesinmativaluefbSpeech = mesinmatidatafbSpeech.toInt();
}
}
// Logika pengendalian lampu
// Lampu dekat ON jika tombol ditekan ATAU data Firebase (widget/speech) = 1
if (nilaitomboldekat == 1 || lampudekatvaluefb == 1 || lampudekatvaluefbSpeech == 1) {
digitalWrite(lampudekat, LOW); // Nyalakan lampu dekat
} else {
digitalWrite(lampudekat,HIGH); // Matikan lampu dekat
}
// Lampu jauh ON jika tombol ditekan ATAU data Firebase (widget/speech) = 1
if (nilaitomboljauh == 1 || lampujauhvaluefb == 1 || lampujauhvaluefbSpeech == 1) {
digitalWrite(lampujauh, LOW); // Nyalakan lampu jauh
} else {
digitalWrite(lampujauh, HIGH); // Matikan lampu jauh
}
if (mesinnyalavaluefbSpeech == 1 && statusmesin == 0 ) {
digitalWrite(relayACC, LOW);
delay(1000);
digitalWrite(relayON, LOW);
delay(1000);
digitalWrite(relayST, LOW);
digitalWrite(relayACC, HIGH);
delay(1000);
digitalWrite(relayACC, LOW);
digitalWrite(relayON, LOW);
digitalWrite(relayST,HIGH);
statusmesin = 1;
}
if (mesinmativaluefbSpeech == 1) {
digitalWrite(relayACC, HIGH);
digitalWrite(relayON, HIGH);
digitalWrite(relayST, HIGH);
statusmesin = 0;
}
}