#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define BOT_TOKEN "7146515476:AAE3OqSh5_ZwQ_wTljNlArD2Jk7pHUivFdE"
#define LDR_PIN 33
#define Obogrevatel 19
#define Konder 18
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
unsigned long bot_lasttime;
#include "DHTesp.h"
#define DHT_PIN 12
DHTesp dhtSensor;
TempAndHumidity data;
float lux=0;
const float GAMMA = 0.7;
const float RL10 = 50;
#define HUMRELAY_PIN 16
#include <Adafruit_NeoPixel.h>
#define LENTA 17
#define NUM_P 20
Adafruit_NeoPixel NeoPixel(NUM_P, LENTA, NEO_GRB + NEO_KHZ800);
int numNewMessages = 0;
void setup()
{
NeoPixel.begin();
pinMode(LDR_PIN, INPUT);
pinMode(HUMRELAY_PIN, OUTPUT);
pinMode(Obogrevatel, OUTPUT);
pinMode(Konder, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Serial.begin(115200);
analogReadResolution(10);
Serial.println();
Serial.print("Connecting to Wifi SSID ");
Serial.print(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
while (WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(500);
}
Serial.print("\nWiFi connected. IP address: ");
Serial.println(WiFi.localIP());
}
void loop(){
int analogValue = analogRead(LDR_PIN);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
data = dhtSensor.getTempAndHumidity();
if (data.humidity < 40) digitalWrite(HUMRELAY_PIN, HIGH);
if (data.humidity >= 40) digitalWrite(HUMRELAY_PIN, LOW);
if (data.temperature < 18) {
digitalWrite(Obogrevatel, HIGH);
digitalWrite(Konder, LOW);}
if (data.temperature > 24) {
digitalWrite(Obogrevatel, LOW);
digitalWrite(Konder, HIGH);}
if(data.temperature >= 18 && data.temperature <=24){
digitalWrite(Obogrevatel, LOW);
digitalWrite(Konder, LOW);
}
if(lux<400){
for (int pixel=0; pixel<NUM_P; pixel++){
NeoPixel.setPixelColor(pixel,NeoPixel.Color(255,255,255));
NeoPixel.show();
}
}
if(lux>400){
for (int pixel=0; pixel<NUM_P; pixel++){
NeoPixel.setPixelColor(pixel,NeoPixel.Color(0,0,0));
NeoPixel.show();
}
}
numNewMessages = numNewMessages + 1;
while (numNewMessages){
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
}
void handleNewMessages(int numNewMessages)
{
for (int i = 0; i < numNewMessages; i++){
String chat_id = bot.messages[i].chat_id;
bot.sendMessage(chat_id,
"🌡 Температура в классе: " + String(data.temperature) + " °С"
+ "\n💧 Bлажность в классе: " + String(data.humidity) + " %"
+ "\n💡 Освещённость в классе: " + String(lux) + " лк"
,"");
}
}