#include <Arduino.h>
#include <WiFi.h> //we are using the ESP32
#include <Firebase_ESP_Client.h> //https://github.com/rolan37/Firebase-ESP-Client-main//
#include "DHT.h"
#include "addons/TokenHelper.h"
#include "addons/RTDBHelper.h"
#define WIFI_SSID "Mi"
#define WIFI_PASSWORD "223344550"
#define API_KEY "AIzaSyAkD4lWzMBu8YMnlnLWRp4x9BaSRufnLuM"
#define DATABASE_URL "https://iot-11-10-default-rtdb.firebaseio.com/"
//----------------------------------------------------------------------------------------------------
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
unsigned long sendDataPrevMillis = 0;
int count = 0;
bool signupOK = false; //since we are doing an anonymous sign in
#define DHTPIN 2 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
unsigned long delay300 = 0; //300
unsigned long delay1000 = 0; //1000 delay
void setup(){
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED){
{
Serial.print(".");
}
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
config.api_key = API_KEY;
config.database_url = DATABASE_URL;
/* Sign up */
if (Firebase.signUp(&config, &auth, "", ""))
{
Serial.println("sign up 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; //see addons/TokenHelper.h
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
pinMode(12,OUTPUT); //quat
pinMode(27,OUTPUT); //den
pinMode(26,OUTPUT); //may lanh
}
void loop(){
//---------------------------------------------------
float h = dht.readHumidity();
float t = dht.readTemperature();
float g = analogRead(32);
if (isnan(h) || isnan(t)) {
if (millis() >= delay300 + 300)
{
delay300 += 300;
Serial.println(F("Failed to read from DHT sensor!"));
}
return;
}
//------------------------------------------------------
if (millis() >= delay1000 + 1000)
{
delay1000 += 1000;
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(F("% Khi gas: "));
Serial.print(g);
Serial.println(F("% "));
}
if (Firebase.ready() && signupOK && (millis() - sendDataPrevMillis > 100 || sendDataPrevMillis == 0)){
sendDataPrevMillis = millis();
// Write an Int number on the database path test/int
Firebase.RTDB.setFloat(&fbdo, "/khigas", g);
Firebase.RTDB.setFloat(&fbdo, "/nhietdo", t);
Firebase.RTDB.setFloat(&fbdo, "/doam", h);
}
/*
Serial.printf("Get int... %s\n", Firebase.RTDB.getInt(&fbdo, "/thietbi1/quat") ? String(fbdo.to<int>()).c_str() : fbdo.errorReason().c_str());
Serial.printf("Get int... %s\n", Firebase.RTDB.getInt(&fbdo, "/thietbi2/den") ? String(fbdo.to<int>()).c_str() : fbdo.errorReason().c_str());
Serial.printf("Get int... %s\n", Firebase.RTDB.getInt(&fbdo, "/thietbi3/maylanh") ? String(fbdo.to<int>()).c_str() : fbdo.errorReason().c_str());
*/
Firebase.RTDB.get(&fbdo, "/thietbi1/quat"); ///chi tra ve gia tri boolean 0 hoac 1
fbdo.dataType(); //tra ve gia tri kieu du lieu
Serial.println(fbdo.dataType());
int i1 = fbdo.to<int>(); //tu kieu du lieu o tren (tra ve int) -> to<int>
if(i1 ==1 ) {
Serial.println("quat on");
digitalWrite(12, HIGH);
}
else{
Serial.println("quat off");
digitalWrite(12, LOW);
}
Firebase.RTDB.getInt(&fbdo, "/thietbi2/den");
int i2 = fbdo.to<int>();
if(i2 ==1 ) {
Serial.println("den on");
digitalWrite(27, HIGH);
}
else{
Serial.println("den off");
digitalWrite(27, LOW);
}
Firebase.RTDB.getInt(&fbdo, "/thietbi3/maylanh");
int i3 = fbdo.to<int>();
if(i3 ==1 ) {
Serial.println("may lanh on");
digitalWrite(26, HIGH);
}
else{
Serial.println("may off");
digitalWrite(26, LOW);
}
}