#include <Arduino.h>
#include <WiFi.h>
#include <HX711.h>
#include <LiquidCrystal.h>
#include <FirebaseESP32.h>
#include <addons/TokenHelper.h>
/* Define the WiFi credentials */
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
/* Define the API Key */
#define API_KEY "AIzaSyDhnA-vAnO_OTMLMiLSjxLmB_KsvckOPpA"
/* Define the RTDB URL */
#define DATABASE_URL "bedsentry-6c705-default-rtdb.firebaseio.com"
/* Define the user Email and password */
#define USER_EMAIL "[email protected]"
#define USER_PASSWORD ""
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
int ledPin = 16;
const int DT = 23;
const int SCK_ESP32 = 22;
int counter = 1;
int rs = 12, en = 13, d4 = 2, d5 = 4, d6 = 5, d7 = 19;
HX711 scale;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int mins = 0;
int seconds = 0;
bool timer_running = false;
unsigned long timer_start_time = 0;
unsigned long sendDataPrevMillis = 0;
bool state_bed = 0;
String BED = "available";
void setup() {
pinMode(ledPin, OUTPUT);
scale.begin(DT, SCK_ESP32);
Serial.begin(115200);
lcd.begin(16, 2);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(300);
}
Serial.println("\nConnected!");
config.api_key = API_KEY;
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
config.database_url = DATABASE_URL;
config.token_status_callback = tokenStatusCallback;
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
}
void loop() {
lcd.setCursor(4, 0);
lcd.print("Bedsentry");
int value_weight = scale.get_units();
if (value_weight >= 1) {
state_bed = 1;
if (!timer_running) {
timer_start_time = millis();
timer_running = true;
digitalWrite(ledPin, HIGH);
}
if (millis() - timer_start_time >= 1000) {
seconds++;
timer_start_time += 1000;
if (seconds >= 60) {
mins++;
seconds = 0;
}
if (mins >= 60) {
mins = 0;
}
lcd.setCursor(6, 1);
lcd.print(mins < 10 ? "0" : "");
lcd.print(mins);
lcd.print(":");
lcd.print(seconds < 10 ? "0" : "");
lcd.print(seconds);
}
} else {
if (timer_running && (millis() - timer_start_time >= 5000)) {
mins = 0;
seconds = 0;
lcd.setCursor(6, 1);
lcd.print("00:00");
timer_running = false;
digitalWrite(ledPin, LOW);
state_bed = 0;
//counter++;
}
}
BED = state_bed == 0 ? "available" : "Occupied";
if (Firebase.ready() && (millis() - sendDataPrevMillis > 5000 || sendDataPrevMillis == 0)) {
sendDataPrevMillis = millis();
String path = "/Bedsentry/Bed/";
Firebase.setInt(fbdo, path + " Bed num",counter );
Firebase.setString(fbdo, path + "State", BED);
Firebase.setInt(fbdo, path + "Time",mins);
}
}