#include <WiFi.h>
#include <Firebase_ESP_Client.h>
//WIFI
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#include "addons/TokenHelper.h"
#include "addons/RTDBHelper.h"
#define API_KEY "XX"
#define DATABASE_URL "XX"
// Define Firebase Data object.
FirebaseData fbdo;
// Define firebase authentication.
FirebaseAuth auth;
// Definee firebase configuration.
FirebaseConfig config;
// Boolean variable for sign in status.
bool signupOK = false;
//times
int drinkTimer1 = 3000;
int drinkTimer2 = 3000;
int drinkTimer3 = 3000;
int drinkTimer4 = 3000;
int drinkTimer5 = 3000;
#define BTN 14
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println();
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println("---------------Connection");
Serial.print("Connecting to : ");
Serial.println(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
}
pinMode(BTN,INPUT);
// Assign the api key (required).
config.api_key = API_KEY;
// Assign the RTDB URL (required).
config.database_url = DATABASE_URL;
// Sign up.
Serial.println();
Serial.println("---------------Sign up");
Serial.print("Sign up new user... ");
if (Firebase.signUp(&config, &auth, "", "")){
Serial.println("ok");
signupOK = true;
}
else{
Serial.printf("%s\n", config.signer.signupError.message.c_str());
}
Serial.println("---------------");
// Assign the callback function for the long running token generation task.
config.token_status_callback = tokenStatusCallback; //--> see addons/TokenHelper.h
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
writeData();
}
void loop(){
readData();
}
void writeData(){
if(Firebase.ready() && signupOK){
//DRINK 1
if (Firebase.RTDB.setInt(&fbdo, "/drinkDispenser/drink1/drinkTimer1", drinkTimer1)) {
Serial.println("PASSED");
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
}
else {
Serial.println("FAILED");
Serial.println("REASON: " + fbdo.errorReason());
}
//DRINK 2
if (Firebase.RTDB.setInt(&fbdo, "/drinkDispenser/drink2/drinkTimer2", drinkTimer2)) {
Serial.println("PASSED");
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
}
else {
Serial.println("FAILED");
Serial.println("REASON: " + fbdo.errorReason());
}
//DRINK 3
if (Firebase.RTDB.setInt(&fbdo, "/drinkDispenser/drink3/drinkTimer3", drinkTimer3)) {
Serial.println("PASSED");
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
}
else {
Serial.println("FAILED");
Serial.println("REASON: " + fbdo.errorReason());
}
//DRINK 4
if (Firebase.RTDB.setInt(&fbdo, "/drinkDispenser/drink4/drinkTimer4", drinkTimer4)) {
Serial.println("PASSED");
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
}
else {
Serial.println("FAILED");
Serial.println("REASON: " + fbdo.errorReason());
}
//DRINK 5
if (Firebase.RTDB.setInt(&fbdo, "/drinkDispenser/drink5/drinkTimer5", drinkTimer5)) {
Serial.println("PASSED");
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
}
else {
Serial.println("FAILED");
Serial.println("REASON: " + fbdo.errorReason());
}
}
}
void readData(){
if(Firebase.ready() && signupOK && digitalRead(BTN) == HIGH){
//DRINK 1
if (Firebase.RTDB.getInt(&fbdo, "/drinkDispenser/drink1/drinkTimer1")) {
if (fbdo.dataType() == "float") {
drinkTimer1 = fbdo.floatData();
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
Serial.print("drinkTimer1 : ");
Serial.println(drinkTimer1);
}
}
else {
Serial.println(fbdo.errorReason());
}
Serial.println();
//DRINK 2
if (Firebase.RTDB.getInt(&fbdo, "/drinkDispenser/drink2/drinkTimer2")) {
if (fbdo.dataType() == "float") {
drinkTimer2 = fbdo.floatData();
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
Serial.print("drinkTimer2 : ");
Serial.println(drinkTimer2);
}
}
else {
Serial.println(fbdo.errorReason());
}
Serial.println();
//DRINK 3
if (Firebase.RTDB.getInt(&fbdo, "/drinkDispenser/drink3/drinkTimer3")) {
if (fbdo.dataType() == "float") {
drinkTimer3 = fbdo.floatData();
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
Serial.print("drinkTimer3 : ");
Serial.println(drinkTimer3);
}
}
else {
Serial.println(fbdo.errorReason());
}
Serial.println();
//DRINK 4
if (Firebase.RTDB.getInt(&fbdo, "/drinkDispenser/drink4/drinkTimer4")) {
if (fbdo.dataType() == "float") {
drinkTimer4 = fbdo.floatData();
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
Serial.print("drinkTimer4 : ");
Serial.println(drinkTimer4);
}
}
else {
Serial.println(fbdo.errorReason());
}
Serial.println();
//DRINK 5
if (Firebase.RTDB.getInt(&fbdo, "/drinkDispenser/drink5/drinkTimer5")) {
if (fbdo.dataType() == "float") {
drinkTimer5 = fbdo.floatData();
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
Serial.print("drinkTimer5 : ");
Serial.println(drinkTimer5);
}
}
else {
Serial.println(fbdo.errorReason());
}
Serial.println();
Serial.println("---------------");
//----------------------------------------
}
}