#include <WiFi.h> // untuk mengaktifkan wifi pada ESP32, agar memungkinka perangkat terhubung kejaringan wifi untuk saling berkomunikasi
#include <DHT.h> // untuk membaca data dari sensor DHT yang terpasang pada peangkat
#include <FirebaseESP32.h> //Dengan menggunakan FirebaseESP32, ESP32 dapat terhubung ke layanan Firebase, platform pengembangan aplikasi mobile dan web dari Google
#include <HTTPClient.h> // memungkinkan ESP32 untuk membuat permintaan HTTP, misalnya untuk mengirimkan atau menerima data dari server
//#include "addons/TokenHelper.h"
//#include "addons/RTDBHelper.h"
const char* ssid = "Wokwi-GUEST"; //nama jaringan wifi SSID yang akan dihubungkan dan digunakan
const char* password = ""; //kata sandi untuk mengakses jaringan WiFi yang memiliki SSID "Wokwi-GUEST."
//Ini mendefinisikan sebuah konstanta makro dengan nama FIREBASE_HOST, yang nilainya adalah URL host untuk Firebase Realtime Database. Host ini menunjukkan di mana basis data Firebase berada
#define FIREBASE_HOST "https://rfid-5befd-default-rtdb.asia-southeast1.firebasedatabase.app/"
//Ini mendefinisikan konstanta makro dengan nama FIREBASE_AUTH, yang nilainya adalah token otentikasi (authentication token) untuk mengakses firebase
#define FIREBASE_AUTH "O3SfJnOfyPQxTledjMVikIGK8ce9Ytb8A0hzxymP"
#define DHTPIN 13 //sensor DHT22 dihubungkan ke pin 13 pada mikrokontroler
#define DHTTYPE DHT22 // untuk menndefinisikan jenis sensor DHT yang digunakan adalah DHT22
#define led 2 //digunakan untuk menentukan pin yang terhubung ke LED pin 2 pada mikrokontroler
FirebaseData fbdo; //Ini mendeklarasikan objek dari kelas FirebaseData dengan nama fbdo. Kelas FirebaseData adalah bagian dari pustaka FirebaseESP32 yang digunakan untuk berkomunikasi dengan layanan Firebase pada platform ESP32
void wifiConnection(){ //Memulai proses koneksi WiFi dengan menggunakan nama jaringan (SSID) dan kata sandi yang sudah ditentukan
WiFi.begin(ssid, password); // Memulai proses koneksi WiFi dengan menggunakan nama jaringan (SSID) dan kata sandi (password) yang telah ditentukan
while (WiFi.status() != WL_CONNECTED){ //Sebuah loop while yang akan dijalankan selama perangkat belum terhubung ke jaringan WiFi, memberikan kesempatan sampai koneksi berhasil
Serial.print("."); //untuk mengirim data ke Serial Monitor
delay(500); // perangkat menunggu selama 500 milidetik (setengah detik) sebelum melanjutkan eksekusi kode berikutnya
}
Serial.println("Wifi Connected"); //Mencetak pesan bahwa perangkat telah terhubung ke WiFi
Serial.println(WiFi.SSID()); //Mencetak SSID jaringan WiFi yang terhubung
Serial.println(WiFi.RSSI());//Mencetak kekuatan sinyal (RSSI) WiFi
Serial.println(WiFi.macAddress()); //Mencetak alamat MAC perangkat WiFi
Serial.println(WiFi.localIP()); //Mencetak alamat IP lokal perangkat
Serial.println(WiFi.gatewayIP()); //Mencetak alamat IP gateway WiFi
Serial.println(WiFi.dnsIP()); //Mencetak alamat IP server DNS yang digunakan
}
DHT dht(DHTPIN, DHTTYPE); //dapat digunakan untuk membaca nilai suhu dan kelembaban dari sensor yang terhubung
void firebase(void) { //Membuat fungsi bernama firebase yang bertanggung jawab untuk inisialisasi koneksi ke Firebase Realtime Database
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); //Memulai koneksi ke Firebase dengan menggunakan host dan token otentikasi yang telah ditentukan
Firebase.reconnectWiFi(true); //untuk memastikan bahwa koneksi WiFi tetap aktif dan menghubungkan kembali jika koneksi terputus
}
void setup() {
Serial.begin(115200); //Menginisialisasi komunikasi serial dengan kecepatan 115200 bps
wifiConnection(); //Fungsi ini digunakan untuk menginisialisasi koneksi WiFi
dht.begin(); //digunakan untuk memulai komunikasi dengan sensor DHT dan mempersiapkannya untuk membaca data suhu dan kelembaban
pinMode(led, OUTPUT); //Mengkonfigurasi pin yang terhubung ke LED (led) sebagai pin keluaran (OUTPUT)
firebase(); //Fungsi ini bertanggung jawab untuk menginisialisasi koneksi ke Firebase Realtime Database
}
void loop() {
float h = dht.readHumidity(); //Membaca nilai kelembaban dari sensor DHT dan menyimpannya dalam variabel h
float t = dht.readTemperature(); //Membaca nilai suhu dari sensor DHT dan menyimpannya dalam variabel t
Firebase.setFloat(fbdo, "/SUHU", t); //nilai suhu akan disimpan di dalam database Firebase dengan key atau path "/SUHU"
Firebase.setFloat(fbdo, "/KELEMBAPAN", h); //nilai kelembapan akan disimpan di dalam database Firebase dengan key atau path "/KELEMBAPAN"
}