#include "WiFi.h"
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#include "ThingSpeak.h"
#include <HTTPClient.h>
WiFiClient client;
const char* server = "api.thingspeak.com";
const String apikey = "FFUY7TWKF4GYWJZ4";
#include "DHTesp.h"
DHTesp dhtSensor;
const int DHT_PIN = 15;
const int LDR_PIN = A0;
const float GAMMA = 0.7;
const float RL10 = 50;
int day = 0;
#include "FirebaseESP32.h"
#define FIREBASE_AUTH "Y0t4miyh4jOq6WoJMLHVaq0LGEg4Kubwa2QwMFKG"
#define FIREBASE_HOST "https://jobwokwi-default-rtdb.asia-southeast1.firebasedatabase.app/"
FirebaseData firebaseData;
String path = "/";
void initFirebase() {
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
if (!Firebase.beginStream(firebaseData, path))
{
Serial.println("REASON: " + firebaseData.errorReason());
Serial.println();
}
Serial.println("Kết nối Firebase thành công");
}
#include <ESP32Servo.h>
const int servoPin = 18;
Servo servo;
int pos = 0;
int PIR = 2; //pir
int nilai = 0;
void setup() {
Serial.begin(115200);
delay(200);
Serial.println();
Serial.print("Connecting to wifi: ");
Serial.println(ssid);
WiFi.begin(ssid, password,6);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Kết nối Wifi thành công!");
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); //DHT22
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(PIR, INPUT);
pinMode(LDR_PIN, INPUT);
servo.attach(servoPin, 500, 2400);
ThingSpeak.begin(client); // kết nối thingspeak
initFirebase(); // Kêt nối Firebase
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
String temp = String(data.temperature, 2);
String humidity = String(data.humidity, 2);
float valueLDR = analogRead(LDR_PIN);
valueLDR = map(valueLDR, 4095, 0, 1024, 0);
float voltage = valueLDR / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
String luxRes = String(lux,2);
if(isfinite(lux))
{
Serial.print("Ánh sáng: ");
Serial.print(lux);
Serial.println(" lx");
}
else
{
Serial.println("Too bright to measure");
luxRes = "oo";
}
day = digitalRead(33);
nilai = digitalRead(PIR);
if (nilai == HIGH) {
digitalWrite(12, HIGH);
Serial.println("");
Serial.println("Phat hien vat the!");
} else {
digitalWrite(12, LOW);
Serial.println("sensor not active!");
}
bool c1 = Firebase.setString(firebaseData, "/nhietdo", temp);
bool c2 = Firebase.setString(firebaseData, "/doam", humidity);
bool c3 = Firebase.setString(firebaseData, "/dosang", luxRes);
bool c4 = Firebase.setString(firebaseData, "/day", String(day,2));
bool c5 = Firebase.setString(firebaseData, "/pir", String(nilai,2));
if (c1 && c2 && c3 && c4 && c5) {
Serial.println("Firebase_nhietdo: " + temp);
Serial.println("Firebase_doam: " + humidity);
Serial.println("Firebase_dosang: " + String(lux,2));
Serial.println("Firebase_day: " + String(day,2));
Serial.println("Firebase_PIR: " + String(nilai,2));
}
ThingSpeak.setField(1, temp);
ThingSpeak.setField(2, humidity);
ThingSpeak.setField(3,lux);
int httpResponseCode = ThingSpeak.writeFields(1, apikey.c_str());
if (httpResponseCode == 200) {
Serial.println("Data sent to Thingspeak successfully");
} else {
Serial.print("Error sending data to Thingspeak. HTTP response code: ");
Serial.println(httpResponseCode);
}
// get data _ mo cua
if (Firebase.getInt(firebaseData, "/mocua")==true) {
int mocua = firebaseData.to<int>();
if (mocua==1){
Serial.println("Mo cua");
while (pos <= 180) {
servo.write(pos);
delay(15);
pos++;
}
} else {
Serial.println("Dong cua");
while (pos >= 0) {
servo.write(pos);
delay(15);
pos--;
}
}
}
// get data _ mo den
if (Firebase.getInt(firebaseData, "/batden")==true) {
int batden = firebaseData.to<int>();
if (batden ==1){
Serial.println("Bat den");
digitalWrite(13, HIGH);
} else {
Serial.println("Tat den");
digitalWrite(13, LOW);
}
}
Serial.println("");
delay(100);
}