#include <Arduino.h>
#include <WiFi.h>
#include <Firebase_ESP_Client.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <LiquidCrystal.h>
#define DHTPIN 14
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
//Provide the token generation process info.
#include "addons/TokenHelper.h"
//Provide the RTDB payload printing info and other helper functions.
#include "addons/RTDBHelper.h"
// Insert your network credentials
#define WIFI_SSID "Kenthomes 3"
#define WIFI_PASSWORD "55555555"
#define USER_EMAIL "[email protected]"
#define USER_PASSWORD "112233"
// Insert Firebase project API Key
#define API_KEY "AIzaSyBAy1v8eWOYv3wymE_HvaeontwRsZ5uH0Q"
// Insert RTDB URLefine the RTDB URL */
#define DATABASE_URL "https://esp32-dc13c-default-rtdb.asia-southeast1.firebasedatabase.app/"
//Define Firebase Data object
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
unsigned long sendDataPrevMillis = 0;
int count = 0;
int intValue;
int changeState;
// bool signupOK = false;
float temp = 0;
float humi = 0;
void turnOnPin(int pinValue);
void reconnect();
// Create An LCD Object. Signals: [ RS, EN, D4, D5, D6, D7 ]
LiquidCrystal My_LCD(15, 4, 5, 18, 19, 21);
void setup(){
dht.begin();
Serial.begin(115200);
// Initialize The LCD. Parameters: [ Columns, Rows ]
My_LCD.begin(16, 2);
// Clears The LCD Display
My_LCD.clear();
// Display The First Message In Home Position (0, 0)
// My_LCD.print("DO AN 3: IoT");
// Set The Cursor Position To: [ Col 5, Row 1]
// The Next Message Will Start From The 6th Char Position in The 2nd Row
// Note: 1st Row Has An Index of 0, The 2nd Row Has An Index of 1
// My_LCD.setCursor(5, 1);
// Display The Second Message In Position (5, 1)
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(300);
}
Serial.println();
Serial.println(WiFi.localIP());
Serial.println();
/* Assign the api key (required) */
config.api_key = API_KEY;
/* Assign the RTDB URL (required) */
config.database_url = DATABASE_URL;
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
/* Sign up */
// if (Firebase.signUp(&config, &auth, USER_EMAIL, USER_PASSWORD)){
// signupOK = true;
// }
// else{
// Serial.printf("%s\n", config.signer.signupError.message.c_str());
// }
Firebase.reconnectWiFi(true);
/* Assign the callback function for the long running token generation task */
config.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h
// Assign the maximum retry of token generation
config.max_token_generation_retry = 5;
Firebase.begin(&config, &auth);
}
void loop(){
if (WiFi.status() != WL_CONNECTED) {
reconnect();
}
// temp = dht.readTemperature();
// humi = dht.readHumidity();
temp = random(13,16);
humi = random(60,80);
My_LCD.setCursor(0, 0);
My_LCD.print(temp);
My_LCD.print("'C ");
My_LCD.print(humi);
My_LCD.print("%");
delay(1000);
if (Firebase.ready() && (millis() - sendDataPrevMillis > 5500 || sendDataPrevMillis == 0)){
sendDataPrevMillis = millis();
// count++;
// Firebase.RTDB.setInt(&fbdo, "/test/int", count);
Firebase.RTDB.setFloat(&fbdo, "/DHT11/temperature", temp);
Firebase.RTDB.setFloat(&fbdo, "/DHT11/humidity", humi);
if (Firebase.RTDB.getInt(&fbdo, "/control/changeState")){
if (fbdo.dataType() == "int") {
changeState = fbdo.intData();
Serial.println(changeState);
}
}
if (Firebase.RTDB.getInt(&fbdo, "/control/buttonValue") && changeState == 1){
if (fbdo.dataType() == "int") {
intValue = fbdo.intData();
turnOnPin(intValue);
Serial.println(intValue);
changeState = 0;
Firebase.RTDB.setInt(&fbdo, "/control/changeState", 0);
}
}
}
My_LCD.setCursor(0, 1);
My_LCD.print("Power:");
My_LCD.print(intValue);
}
void turnOnPin(int pinValue){
if (pinValue == 1) {
digitalWrite(25, HIGH);
digitalWrite(26, LOW);
digitalWrite(27, LOW);
digitalWrite(28, LOW);
} else if (pinValue == 2) {
digitalWrite(25, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, LOW);
digitalWrite(28, LOW);
} else if (pinValue == 3) {
digitalWrite(25, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, LOW);
} else if (pinValue == 4) {
digitalWrite(25, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, HIGH);
}
else if (pinValue == 0) {
digitalWrite(25, LOW);
digitalWrite(26, LOW);
digitalWrite(27, LOW);
digitalWrite(28, LOW);
}
}
void reconnect() {
// Loop until reconnected
while (!WiFi.status() == WL_CONNECTED) {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
delay(500);
}
// Kết nối lại Firebase
Firebase.begin(&config, &auth);
}