#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <WiFiClient.h>
#include <DHT.h>
#include <ThingSpeak.h>
#include <UniversalTelegramBot.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define motionSensor 5
#define redled 13
#define greenled 12
#define blueled 14
bool hareketAlgilandi = false;
int hareketvar=0;
//Kablosuz ağ bilgileri
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
//Telegram ve Thingspeak için kullanıcı oluşturma
WiFiClientSecure secure_client;
WiFiClient alfa;
//Telegram Bot için gereken token ve id bilgiler
#define BOT_token "6003191990:AAHamazzZRFY5aZJuxtJ53VzXo5HjCJV0bM"
#define CHAT_ID "1015325121"
UniversalTelegramBot bot(BOT_token, secure_client);
DHT dht (DHTPIN, DHTTYPE);
//Thingspeak API bilgileri
unsigned long ChannelID = 2020163;
const char * WriteAPI = "PM1ZUANFQL08AS1Z";
void IRAM_ATTR ISR() {
Serial.println("HAREKET ALGILANDI!");
hareketAlgilandi = true;
hareketvar=1;
}
void setup() {
Serial.begin(115200); // For ESP32
//DHT Sensörü kurulumu mode INPUT
pinMode(DHTPIN, INPUT);
//PIR Sensör kurulumu mode INPUT_PULLUP
pinMode(motionSensor, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(motionSensor), ISR, RISING);
//Led kurulumları
pinMode(redled, OUTPUT);
pinMode(greenled, OUTPUT);
pinMode(blueled, OUTPUT);
//İnternet bağlantısı
Serial.println("WiFi Aranıyor...");
int networks = WiFi.scanNetworks();
if(networks == 0){
Serial.println("WiFi Ağı Yok!");
}
else{
Serial.print(networks);
Serial.println(" Ağ Bulundu!");
for(int i = 0; i < networks; i++)
Serial.println(WiFi.SSID());
delay(10);
}
//WiFi bağlantısı kurulumu
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED){
delay(100);
}
Serial.println("WiFi Bağlandı!");
Serial.println(WiFi.localIP());
bot.sendMessage(CHAT_ID, "Bot Başlatıldı", "");
Serial.println("Bot Başlatıldı!");
//Thingspeak programını başlat
ThingSpeak.begin(alfa);
}
void loop() {
//eğer hareket algılanırsa
if ((hareketAlgilandi) && hareketvar==1) {
hareketvar++;
//telegrama mesaj gönder
//bot.sendMessage(CHAT_ID, "Hareket Tespit Edildi!", "");
Serial.println("Hareket Tespit Edildi!");
}
// End of motionSensor
//DHT22 sensörinden verileri alıp değişkenlere atıyoruz
float t = dht.readTemperature();
float h = dht.readHumidity();
//30 dereceden yüksekse hava çok sıcak yazacak kırmızı led yanacak
if (t>30){
digitalWrite(redled, HIGH);
digitalWrite(greenled, LOW);
digitalWrite(blueled, LOW);
Serial.println("\nHava çok sıcak!");
Serial.println("Sıcaklık: " + String(t));
Serial.println("Nem: " + String(h));
}
//10-30 derece aralığındaysa hava normal yazacak yeşil led yanacak
else if (t>10){
digitalWrite(redled, LOW);
digitalWrite(greenled, HIGH);
digitalWrite(blueled, LOW);
Serial.println("\nHava normal!");
Serial.println("Sıcaklık: " + String(t));
Serial.println("Nem: " + String(h));
}
//10 dereceden azsa hava soğuk yazacak mavi led yanacak
else {
digitalWrite(redled, LOW);
digitalWrite(greenled, LOW);
digitalWrite(blueled, HIGH);
Serial.println("\nHava soğuk!");
Serial.println("Sıcaklık: " + String(t));
Serial.println("Nem: " + String(h));
}
//Sıcaklık, nem değerleri ve hareket durumu thingspeak'te oluşturmuş olduğumuz kanala eklenecek
int x = ThingSpeak.writeField(ChannelID, 1, t, WriteAPI);
if (x == 200){
Serial.println("Sıcaklık değeri thingspeak kanalına yazıldı.");
} else{
Serial.println("Sıcaklık değeri thingspeak kanalına yazılamadı.");
}
delay(15000);
int y = ThingSpeak.writeField(ChannelID, 2, h, WriteAPI);
if (y == 200){
Serial.println("Nem değeri thingspeak kanalına yazıldı.");
} else{
Serial.println("Nem değeri thingspeak kanalına yazılamadı.");
}
delay(15000);
int p = ThingSpeak.writeField(ChannelID, 3, hareketAlgilandi, WriteAPI);
if ( p == 200){
Serial.println("Hareket durumu thingspeak kanalına yazıldı.");
} else{
Serial.println("Hareket durumu thingspeak kanalına yazılamadı.");
}
delay(15000);
//Hareket algılamasını tekrar kullanmak için resetlemek gerekiyor.
hareketAlgilandi = false;
//Thingspeak'e veri ekleyebilmek için 15 saniye geçmesi gerekiyor.
}