#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://bmiapps-e0d35-default-rtdb.firebaseio.com"
//Ini mendefinisikan konstanta makro dengan nama FIREBASE_AUTH, yang nilainya adalah token otentikasi (authentication token) untuk mengakses firebase
#define FIREBASE_AUTH "tFCxSzaBV9I9pi1c0mjaMHV7SMZe7DUPR5erlHUX"
#define ECHO_PIN 4
#define TRIG_PIN 2
#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 12 //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
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
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
}
int readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void loop() {
int distance = readDistanceCM();
int t = dht.readTemperature(); //Membaca nilai suhu dari sensor DHT dan menyimpannya dalam variabel t
// Firebase.setInt(fbdo, "bmiapps/users/id1/temp", t);
// Firebase.setInt(fbdo, "bmiapps/users/id1/height", distance);
FirebaseJson json;
json.set("value/round/" , F("cool!"));
json.set(F("vaue/ts/.sv"), F("timestamp"));
json.set("test/data/suhu/" , t);
json.set("test/data/jarak/", distance);
Firebase.set(fbdo, F("bmiapps"), json);
// Serial.printf("Set json... %s\n", ? "ok" : fbdo.errorReason().c_str());
// Firebase.setInt(fbdo,"bmiapps/users/id2",h);
// Firebase.setFloat(fbdo, "/SUHU", t); //nilai suhu akan disimpan di dalam database Firebase dengan key atau path "/SUHU"
delay(1000);
}