#include <WiFi.h>
#include <Firebase_ESP_Client.h>
// Provide the token generation process info.
#include <addons/TokenHelper.h>
// Provide the RTDB payload printing info and other helper functions.
#include <addons/RTDBHelper.h>
/* 1. Define the WiFi credentials */
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
/* 2. Define the API Key */
#define API_KEY "ISI DENGAN API KEY YANG DIGENERATE FIREBASE KALIAN"
/* 3. Define the RTDB URL */
//<databaseName>.firebaseio.com or <databaseName>.<region>.firebasedatabase.app
#define DATABASE_URL "ISI DENGAN URL DARI RTDB FIREBASE YANG DIBUAT"
/* 4. Define the user Email and password that alreadey registerd or added in your project */
// #define USER_EMAIL "USER_EMAIL"
// #define USER_PASSWORD "USER_PASSWORD"
// Define Firebase Data objects
FirebaseData fbdo;
FirebaseData stream;
FirebaseAuth auth;
FirebaseConfig config;
#include <ESP32Servo.h>
const int TRIG_PIN = 33;
const int ECHO_PIN = 32;
float duration_us;
float distance_cm;
Servo servo;
const int SERVO_PIN = 26;
unsigned long prevMillisHCSR = 0;
unsigned long prevMillisRTDB = 0;
// bool signupOK = false;
/*======================================================================
FIREBASE
========================================================================*/
void setupFirebase(){
Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
/* Assign the api key (required) */
config.api_key = API_KEY;
/* Assign the user sign in credentials */
// auth.user.email = USER_EMAIL;
// auth.user.password = USER_PASSWORD;
/* Assign the RTDB URL (required) */
config.database_url = DATABASE_URL;
//Anonymous auth
if(Firebase.signUp(&config, &auth, "", "")){
Serial.println("signUp OK");
// signupOK = true;
} else{
Serial.printf("%s\n", config.signer.signupError.message.c_str());
}
/* Assign the callback function for the long running token generation task */
config.token_status_callback = tokenStatusCallback;
// Firebase.reconnectNetwork(true);
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
}
void setValueRTDB(float distance){
if(Firebase.RTDB.setFloat(&fbdo, "Sensor/Ultrasonik", distance)){
Serial.print(String(distance) + " - successfully saved to: " + fbdo.dataPath());
Serial.println(" (" + fbdo.dataType() + ")");
} else{
Serial.println("Failed: " + fbdo.errorReason());
}
}
/*======================================================================
MAIN FUNCTION
========================================================================*/
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.attach(SERVO_PIN);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.printf("Connecting to %s", WIFI_SSID);
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
setupFirebase();
}
void loop() {
//Baca nilai jarak melalui sensor HCSR-04
unsigned long currentMillisHCSR = millis();
if(currentMillisHCSR - prevMillisHCSR > 1000){
prevMillisHCSR = currentMillisHCSR;
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration_us = pulseIn(ECHO_PIN, HIGH);
distance_cm = duration_us * 0.017;
Serial.println("Distance : " + String(distance_cm));
//Perkondisian untuk servo berdasarkan dengan nilai Jarak HCSR-04
if(distance_cm < 30){
servo.write(90);
} else{
servo.write(0);
}
}
//Kirim nilai Ultrasonik ke dalam RTDB Firebase
unsigned long currentMillisRTDB = millis();
if(Firebase.ready() && (currentMillisRTDB - prevMillisRTDB > 2000)){
prevMillisRTDB = currentMillisRTDB;
setValueRTDB(distance_cm);
}
}