Introduction: Telegram Flame Alarm Bot

In this article I will present IoT project that allows to sense flame and send notification to user`s Telegram.

What You’ll Need:

  • Flame sensor module
  • Microcontroller NodeMCU ESP8266
  • Power source
  • WiFi
  • Output device with telegram

Step 1: Hardware

    Flame Sensor Module
    This module contains a phototransistor and signal conditioning electronics. A phototransistor conducts more electrical current when exposed to light. Physics taught us that (visible) light comprises of all colors, from red to violet. By coating the phototransistor with black epoxy, it becomes more sensitive to red or even invisible below red or infrared. Interestingly, flame emits infrared radiation. Thus, when this sensor sees flame, it conducts more current.
    The NodeMCU is an Arduino-compatible board that features the ESP8266 at its core. It became popular because it is a WiFi-ready microcontroller by itself - no need for an Arduino. The aim of this article is to show all NodeMCU pinout and boards that are currently available. Note that when programming these boards using the ESP core in Arduino IDE, the GPIO numbers are used instead of what's on the board.

    Step 2: Connection

    Sensor connected to GPIO0 for interrupts.

    Interrupts are useful for making things happen automatically in microcontroller programs and can help solve timing problems. With interrupts you don’t need to constantly check the current pin value. When a change is detected, an event is triggered – a function is called. This function is called interrupt service routine (ISR). When an interrupt happens, the processor stops the execution of the main program to execute a task, and then gets back to the main program

    Step 3: Telegram Bot

    Bots are third-party applications that run inside Telegram. Users can interact with bots by sending messages, commands and inline requests. We can control our bots through HTTP APIs provided by Telegram.

    A Telegram bot is an application hosted on a server (here it is ESP8266) that uses Telegram bot API to connect to Telegram Messenger clients. A great advantage of Telegram bots is that they have zero install requirements and run seamlessly on all computer or mobile platforms where Telegram Messenger runs. Configure Telegram Bot Install Telegram on your Laptop or Phone and search for BotFather. Through BotFather we can create a new bot. After creating a new bot, we have to note down the token which is the interaction key between device and Telegram bot API.

    Step 4: Software

    Download the Telegram Bot library

    Open Arduino IDE, Go to “Sketch”, Select “Include Library” and Click on “Add .ZIP Library”.

    #include <ESP8266WiFi.h>
    #include <WiFiClientSecure.h>
    #include <ESP8266TelegramBOT.h>
    
    // Initialize Wifi connection to the router
    char ssid[] = "wifi";              // SSID (name) 
    char password[] = "12345678";            // your network key
    int status = 0;
    
    
    // Initialize Telegram BOT
    
    #define BOTtoken "1234567890:AAEsdxDfSL57kpfZz1bduD9j4fddsiyfg"  //token from @BotFather
    #define BOTname "ESP8266 FireBot" // bot name
    #define BOTusername "esp8266fire_bot" // bot username
    TelegramBOT bot(BOTtoken, BOTname, BOTusername);
    
    int Bot_mtbs = 1000; //refresh time
    long Bot_lasttime;
    
    bool Start = false;
    bool isfire = false;
    bool haveid = false;
    int var = 0;
    String id;
    
    
    void Bot_EchoMessages() {
      for (int i = 1; i < bot.message[0][0].toInt() + 1; i++)      {
        bot.sendMessage(bot.message[i][4], bot.message[i][5], "");
        bot.message[i][5]=bot.message[i][5].substring(1,bot.message[i][5].length());
           
        if (bot.message[i][5] == "start") {
          String wellcome = "Device connected to your account!";
          bot.sendMessage(bot.message[i][4], wellcome, "");
          Start = true;
        }
      }
      bot.message[0][0] = "";   // All messages have been replied - reset new messages
    }
    
    void alarm_if_fire(){
      if (isfire == true){
          String message = "🔥🔥🔥Flame🔥🔥🔥";
          bot.sendMessage(bot.message[1][4], message, "");
          isfire = false;
        }
      }
    
    
    void setup() {
     
      Serial.begin(115200);
      delay(3000);
     // attempt to connect to Wifi network:
      Serial.print("Connecting Wifi: ");
      Serial.println(ssid);
      WiFi.begin(ssid, password);
    
      while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(500);
      }
    
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());
      
      pinMode(0, INPUT_PULLUP);
      attachInterrupt(digitalPinToInterrupt(0), handleInterrupt, RISING);
      bot.begin();      
    }
    
    
    void loop() 
    { 
      if (millis() > Bot_lasttime + Bot_mtbs)  {
        bot.getUpdates(bot.message[0][1]);     
        Bot_EchoMessages();   // reply to message with Echo
        Bot_lasttime = millis();
      }
        alarm_if_fire();
    }
    
    void handleInterrupt() {
      Serial.println("Interrupt Detected");
      isfire=true;
    }

    Step 5: Video (in Ukrainian)