ESP32 İle Telegram Üzerinden Led Açıp Kapatma. (Nesnelerin İnterneti Dersi | Video Ödev 5)

   ESP32 mikrodenetleyiciyi kullanarak Telegram üzerinden LED'in açılıp kapanmasını sağlamak oldukça ilginç bir IoT projesidir. Telegram botları, kullanıcıların belirli komutlarla etkileşime girmelerine olanak tanır ve bu botlar aracılığıyla ESP32 tarafından kontrol edilen cihazlar yönetilebilir. İşte adım adım bir rehber:



Gerekli Malzemeler:

  • ESP32 geliştirme kartı (örneğin, NodeMCU-32S veya benzeri)
  • LED
  • 220Ω direnç
  • Breadboard ve jumper kabloları
  • Telegram hesabı

Adım 1: Telegram Bot Oluşturma

  1. Telegram uygulamasında, "BotFather" adlı resmi bot ile bir sohbet başlatın.
  2. Yeni bir bot oluşturmak için /newbot komutunu gönderin ve gerekli adımları izleyerek bir bot adı ve kullanıcı adı belirleyin.
  3. Bot oluşturulduktan sonra, size verilen token'ı not edin, bu token'ı ESP32 kodunda kullanacağız.

(Konuşma başlatıp /start yazın.)


(Daha sonra /newbot yazın ad ve id belirleyin. )


Adım 2: IDBot Kullanıcı Numarasını Alma
  1. IDBot'a giriş yapıp sohbet başlatıp "/start" yazın.
  2. Daha sonra size verdiği kodu kaydedin.

(Konuşma başlatıp /start yazın.)


Adım 3: ESP32 Kodu Yazma ve Yükleme

Aşağıdaki Arduino kodunu kullanarak ESP32'nin Telegram botu aracılığıyla LED'i açıp kapatmasını sağlayabilirsiniz.

#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>

// Replace with your network credentials
const char* ssid = "İnternet adınız.";
const char* password = "İnternet şifreniz.";

// Initialize Telegram BOT
#define BOTtoken "BotFather'dan gelen kod."  // your Bot Token (Get from Botfather)

// Use @myidbot to find out the chat ID of an individual or a group
// Also note that you need to click "start" on a bot before it can
// message you
#define CHAT_ID "IDBot'dan gelen kod."

#ifdef ESP8266
  X509List cert(TELEGRAM_CERTIFICATE_ROOT);
#endif

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

// Checks for new messages every 1 second.
int botRequestDelay = 1000;
unsigned long lastTimeBotRan;

const int ledPin = 2;
bool ledState = LOW;

// Handle what happens when you receive new messages
void handleNewMessages(int numNewMessages) {
  Serial.println("handleNewMessages");
  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, "Unauthorized user", "");
      continue;
    }
   
    // Print the received message
    String text = bot.messages[i].text;
    Serial.println(text);

    String from_name = bot.messages[i].from_name;

    if (text == "/start") {
      String welcome = "Welcome, " + from_name + ".\n";
      welcome += "Use the following commands to control your outputs.\n\n";
      welcome += "/led_on to turn GPIO ON \n";
      welcome += "/led_off to turn GPIO OFF \n";
      welcome += "/state to request current GPIO state \n";
      bot.sendMessage(chat_id, welcome, "");
    }

    if (text == "/led_on") {
      bot.sendMessage(chat_id, "LED state set to ON", "");
      ledState = HIGH;
      digitalWrite(ledPin, ledState);
    }
   
    if (text == "/led_off") {
      bot.sendMessage(chat_id, "LED state set to OFF", "");
      ledState = LOW;
      digitalWrite(ledPin, ledState);
    }
   
    if (text == "/state") {
      if (digitalRead(ledPin)){
        bot.sendMessage(chat_id, "LED is ON", "");
      }
      else{
        bot.sendMessage(chat_id, "LED is OFF", "");
      }
    }
  }
}

void setup() {
  Serial.begin(115200);

  #ifdef ESP8266
    configTime(0, 0, "pool.ntp.org");      // get UTC time via NTP
    client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
  #endif

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, ledState);
 
  // 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("Connecting to WiFi..");
  }
  // Print ESP32 Local IP Address
  Serial.println(WiFi.localIP());
}

void loop() {
  if (millis() > lastTimeBotRan + botRequestDelay)  {
    int numNewMessages = bot.getUpdates(bot.last_message_received + 1);

    while(numNewMessages) {
      Serial.println("got response");
      handleNewMessages(numNewMessages);
      numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    }
    lastTimeBotRan = millis();
  }
}

Adım 4: ESP32 Bağlantısı ve Kodun Yüklenmesi

  1. ESP32'yi bir USB kablosu aracılığıyla bilgisayarınıza bağlayın.
  2. Arduino IDE'de, ESP32 kartını ve doğru portu seçin.
  3. Yukarıdaki kodu kopyalayın ve Arduino IDE'ye yapıştırın.
  4. Telegram botunuzun WiFi ağına bağlanması için SSID ve şifreyi, ayrıca Telegram botunuzun token'ını ve IDBot kodunu doğru şekilde ayarlayın.
  5. Kodu yükleyin ve seri monitörü açarak ESP32'nin bağlantısını kontrol edin.


Adım 5: Telegram Üzerinden LED Kontrolü

  1. Telegram uygulamasına gidin ve oluşturduğunuz bot ile bir sohbet başlatın.
  2. Botunuzu etkileşimli bir şekilde kullanarak "/on" komutu ile LED'i açın ve "/off" komutu ile LED'i kapatın.


  Bu adımları takip ederek ESP32 kullanarak Telegram üzerinden LED kontrolü sağlayabilirsiniz. Ancak, kodu ve botunuzu doğru bir şekilde yapılandırdığınızdan emin olun. Ayrıca, Telegram botunuzun token'ını ve ESP32'nin WiFi ağını doğru bir şekilde ayarladığınızdan emin olun.


(LİNKEDİN)

                                                                                                          

Yorum Gönder

0 Yorumlar