#ifdef ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h> // Universal Telegram Bot Library written by Brian Lough: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
#include <ArduinoJson.h>
#include <DHT.h>
// Перевіряє наявність нових повідомлень кожну 1 секунду
#define botBeklemeSuresi 100
unsigned long lastTimeBotRan;
#define ledPin 2
bool ledDurum = LOW;
#define pirPin 34
bool hareketAlgilandi = LOW;
int hareketVar = 0;
#define dhtPin 4
#define sicaklikEsikDegeri 21
bool sicaklikDurum = LOW;
float temperature = 0;
float humidity = 0;
DHT dht(dhtPin, DHT11);
//Internete baglanilacak WiFi adlari ve sifreleri
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Telegram botu baslatma ayralari
#define BOTtoken "7044080444:AAF8YOFlyI6GKLxwW3n7beel8G71fyL48Eg"
#define CHAT_ID "6082166071"
#ifdef ESP8266
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
#endif
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
// Функція переривання, яка запускається при виявленні руху
void IRAM_ATTR ISR() {
Serial.println("HAREKET ALGILANDI!!!");
hareketAlgilandi = true;
hareketVar=1;
}
// Подбайте про те, що відбувається, коли ви отримуєте нові повідомлення
void handleNewMessages(int numNewMessages);
void setup() {
Serial.begin(115200);
#ifdef ESP8266
configTime(0, 0, "pool.ntp.org"); // отримати час UTC через NTP
client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
#endif
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledDurum);
// пін, до якого підключається датчик PIR
pinMode(pirPin, INPUT_PULLUP);
// цей пін як переривання, щоб код можна було зупинити та запустити в будь-який час. Встановлюємо його режим ПІДЙОМ.
attachInterrupt(digitalPinToInterrupt(pirPin), ISR, RISING);//Тобто, коли датчик зафіксує рух, спрацює функція виявлення.
// Connect to Wi-Fi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
#ifdef ESP32
client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
#endif
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Wifi Baglaniliyor..");
}
// Print ESP32 Local IP Address
Serial.println("Підключення до Інтернету встановлено");
Serial.println(WiFi.localIP());
bot.sendMessage(CHAT_ID, "ESP32 Ввімкнуто, готове вас вислухати /старт", "");
}
void loop() {
temperature = dht.readTemperature();
humidity = dht.readHumidity();
// Serial.println("Temperatue:\t"+ String(temperature) + "C");
// Serial.println("Humidity: \t"+String(humidity)+ "%");
//eğer hareket algılanırsa
if ((hareketAlgilandi) && hareketVar==1) {
hareketVar++;
//telegrama mesaj gönder
bot.sendMessage(CHAT_ID, "Виявлено рух!!", "");
Serial.println("Виявлено рух!");
hareketAlgilandi = false;//Оскільки ми використовуємо його, давайте скинемо його знову, щоб ми могли використовувати його знову.
}
if (millis() > lastTimeBotRan + botBeklemeSuresi) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while(numNewMessages) {
handleNewMessages(numNewMessages);
Serial.println("Telegrama mesaj gonderiliyor!");
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
lastTimeBotRan = millis();
}
}
void handleNewMessages(int numNewMessages) {
Serial.println("З Telegram прийшло нове повідомлення!");
Serial.println(String(numNewMessages));
for (int i=0; i<numNewMessages; i++) {
// Chat id of the requester
String chat_id = String(bot.messages[i].chat_id);
if (chat_id != CHAT_ID){
bot.sendMessage(chat_id, "ID незареєстрованого користувача!", "");
//continue;
}
// Роздрукуйте отримане повідомлення
String text = bot.messages[i].text;
Serial.println(text);
String from_name = bot.messages[i].from_name;
if (text == "/start") {
String welcome = "Ласкаво просимо, " + from_name + ".\n";
welcome += "Використовуйте наступні команди, щоб перевірити вихідні дані.\n\n";
welcome += "/led_on : ввімкнути світлодіод\n";
welcome += "/led_off : \n";
welcome += "/durum : отримує поточну інформацію \n";
welcome += "/темп ---- DHT значення температури \n";
welcome += "/nem: DHT nem getirir \n";
welcome += "/hareket: PIR Hareket bilgileri getirir \n";
bot.sendMessage(chat_id, welcome, "");
}else if (text == "/led_on") {
bot.sendMessage(chat_id, "Статус світлодіода встановлено на ON", "");
ledDurum = HIGH;
digitalWrite(ledPin, ledDurum);
}else if (text == "/led_off") {
bot.sendMessage(chat_id, "LED durum set to OFF", "");
ledDurum = LOW;
digitalWrite(ledPin, ledDurum);
}else if (text == "/sicaklik") {
String mesaj = "Sicaklik:\t"+ String(temperature) + "C";
bot.sendMessage(chat_id, mesaj, "");
ledDurum = LOW;
digitalWrite(ledPin, ledDurum);
}else if (text == "/nem") {
String mesaj = "Nem:\t"+ String(humidity) + "%";
bot.sendMessage(chat_id, mesaj, "");
ledDurum = LOW;
digitalWrite(ledPin, ledDurum);
}else if (text == "/hareket") {
if (digitalRead(pirPin)){
bot.sendMessage(chat_id, "Є рух!", "");
}
else{
bot.sendMessage(chat_id, "Жодного руху!", "");
}
}else if (text == "/durum") {
String mesaj = "Son durum bilgiler,\n";
if (digitalRead(ledPin)){
mesaj += "LED açık,\n";
}
else{
mesaj += "LED kapalı,\n";
}
if (digitalRead(pirPin)){
mesaj += "Hareket var,\n";
}
else{
mesaj += "Hareket yok,\n";
}
mesaj += "Sicaklik:\t"+ String(temperature) + "C\n";
mesaj += "Nem:\t"+ String(humidity) + "%";
bot.sendMessage(chat_id, mesaj, "");
}else{
bot.sendMessage(chat_id, "Geçersiz komut! /start", "");
}
}
}