#include <ESP32Firebase.h>
#include <DHT.h>
#include <WiFi.h>
#include <ThingSpeak.h>
#include <ESP32Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define REFERENCE_URL "https://test-a25bf-default-rtdb.firebaseio.com/"
#define DHTPIN 13
#define DHTTYPE DHT22
//#define Relay 18
#define Gled 16
#define Rled 5
//#define LDR_PIN 0
#define servoPin 4
#define I2C_ADDR 0x27
//const float GAMMA = 0.7;
//const float RL10 = 50;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
unsigned long myChannelNumber = 2549032;
const char * myWriteAPIKey = "ZRX7D59HRL9767W3";
int sv_active=0;
WiFiClient client;
Servo servo;
LiquidCrystal_I2C lcd(I2C_ADDR, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
Firebase firebase(REFERENCE_URL);
void setup() {
servo.attach(servoPin, 500, 2400);
Wire.begin(21, 22);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("TRAN HONG PHUC");
lcd.setCursor(0, 1);
lcd.print("21142350");
pinMode(Gled, OUTPUT);
pinMode(Rled, OUTPUT);
//pinMode(Relay, OUTPUT);
digitalWrite(Gled, HIGH);
digitalWrite(Rled, LOW);
//digitalWrite(Relay, LOW);
servo.write(0);
//pinMode(LDR_PIN, INPUT);
Serial.begin(9600);
delay(1000);
}
void loop()
{
//Ket noi wifi
if(WiFi.status() != WL_CONNECTED){
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
while(WiFi.status() != WL_CONNECTED){
WiFi.begin(ssid, pass);
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected.");
}
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
//Doc du lieu
dht.begin();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Nhiet do: ");
Serial.print(t);
Serial.print("*C ");
Serial.print("Do am: ");
Serial.print(h);
Serial.println("% ");
//if (digitalRead(LDR_PIN) == LOW)
//{
// Serial.println("Light!");
// digitalWrite(Relay, LOW);
//}
//else {
// Serial.println("Dark!");
// digitalWrite(Relay, HIGH);
//}
if ((t >30 )||(h>70)) {
digitalWrite(Rled, HIGH);
digitalWrite(Gled, LOW);
servo.write(90);
sv_active=1;
}
else if ((t<25)&&(h<60))
{
digitalWrite(Gled, HIGH);
digitalWrite(Rled, LOW);
servo.write(0);
sv_active=0;
}
firebase.setFloat("Humidity", h);
firebase.setFloat("Temperature", t);
/*if (digitalRead(LDR_PIN) == LOW)
{
firebase.setString("Lux", "Light");
firebase.setString("Relay", "Off");
}
else
{
firebase.setString("Lux","Dark" );
firebase.setString("Relay", "On");
}*/
if (sv_active) firebase.setInt("Servo Angle",90 );
else firebase.setInt("Servo Angle",0 );
ThingSpeak.setField(1, t);
ThingSpeak.setField(2, h);
if (sv_active) ThingSpeak.setField(3,90 );
else ThingSpeak.setField(3,0 );
/*if (digitalRead(LDR_PIN) == LOW) ThingSpeak.setField(6, 0 );
else ThingSpeak.setField(6, 1);*/
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if(x == 200){
Serial.println("Channel update successful.");
}
else{
Serial.println("Problem updating channel. HTTP error code " + String(x));
}
Serial.print("Complete Update\n");
delay(200);
}