//інформація з додатку Blynk
#define BLYNK_TEMPLATE_ID "TMPL4Uj-RXMOV"
#define BLYNK_TEMPLATE_NAME "ESP32 photoresistorLDRsensor"
#define BLYNK_AUTH_TOKEN "SNXUeUC4odR_QFQHbW7-02bfm8sBPHir"
#define BLYNK_PRINT Serial
#include <LiquidCrystal_I2C.h> //використовуємо бібліотеку для використання дисплею I2C
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h> //використання бібліотеки додатку
char auth[] = "SNXUeUC4odR_QFQHbW7-02bfm8sBPHir"; // визначення маркеру авторизації
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
//вводимо дані про використовуємий дисплей
LiquidCrystal_I2C lcd(0x27,20,4);
BlynkTimer timer;
//оголошуємо змінну для кожного датчика
byte LED_O = 15;
byte LED_K = 2;
byte LED_R1 = 0;
byte LED_R2 = 4;
int luxO = analogRead(27), luxK = analogRead(26), luxR1 = analogRead(25), luxR2 = analogRead(33), autom;
BLYNK_WRITE(V4)
{
autom = param.asInt();
if(luxO = 0){
digitalWrite(LED_O, autom);
Blynk.virtualWrite(V0, autom);
}else{}
if(luxK = 0){
digitalWrite(LED_K, autom);
Blynk.virtualWrite(V1, autom);
}else{}
if(luxR1 = 0){
digitalWrite(LED_R1, autom);
Blynk.virtualWrite(V2, autom);
}else{}
if(luxR2 = 0){
digitalWrite(LED_R2, autom);
Blynk.virtualWrite(V3, autom);
}else{}
}
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
lcd.init();
lcd.backlight(); //дісплей буде підсвічений
timer.setInterval(1000, sendSensor);
pinMode(LED_O, OUTPUT); //лампочка двору (помаранчева)
pinMode(LED_K, OUTPUT); //лампочка кухні (фіолетова)
pinMode(LED_R1, OUTPUT); //лампочка першої комнати (червона)
pinMode(LED_R2, OUTPUT); //лампочка другої комнати (синя)
}
void loop() {
Blynk.run();
timer.run();
}
/* вказуємо, що на першому рядку та першому стовпці
показуватиме значення рівню світла на дворі*/
void sendSensor(){
lcd.setCursor(9,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("Outdoor: ");
lcd.print(luxO);
//показуватиме значення рівню світла в кухні
lcd.setCursor(9,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Kitchen: ");
lcd.print(luxK);
//показуватиме значення рівню світла в першій кімнаті
lcd.setCursor(8,2);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print("Room 1: ");
lcd.print(luxR1);
//показуватиме значення рівню світла в другій кімнаті
lcd.setCursor(8,3);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print("Room 2: ");
lcd.print(luxR2);
//на 17-ому стовпці першого рядку за умовою висвічуватиме увімкнулась лампочка чи ні
lcd.setCursor(17,0);
if (luxO < 50){
digitalWrite(LED_O, HIGH);
lcd.print("ON ");
}
else {
digitalWrite(LED_O, LOW);
lcd.print("OFF");
}
lcd.setCursor(17,1);
if (luxK < 130){
digitalWrite(LED_K, HIGH);
lcd.print("ON ");
} else {
digitalWrite(LED_K, LOW);
lcd.print("OFF");
}
lcd.setCursor(17,2);
if (luxR1 < 200){
digitalWrite(LED_R1, HIGH);
lcd.print("ON ");
} else {
digitalWrite(LED_R1, LOW);
lcd.print("OFF");
}
lcd.setCursor(17,3);
if (luxR2 < 200){
digitalWrite(LED_R2, HIGH);
lcd.print("ON ");
} else {
digitalWrite(LED_R2, LOW);
lcd.print("OFF");
}
//виводимо значення на екран симулятору
Blynk.virtualWrite(V0, luxO);
Blynk.virtualWrite(V1, luxK);
Blynk.virtualWrite(V2, luxR1);
Blynk.virtualWrite(V3, luxR2);
Serial.println("Outdoor ");
Serial.println(luxO);
Serial.println("Kitchen ");
Serial.println(luxK);
Serial.println("Room 1 ");
Serial.println(luxR1);
Serial.println("Room 2 ");
Serial.println(luxR2);
delay(200);
}