Francisco Moreira
Published © GPL3+

Gas Alert System with IoT and Telegram

You will learn how to create a telegram bot to generate a gas leak alarm in your kitchen.

BeginnerFull instructions provided2 hours94
Gas Alert System with IoT and Telegram

Things used in this project

Hardware components

PCBGOGO Printed Circuit Board
×1
ESP32S
Espressif ESP32S
×1
3.3K OHM 1/4W 1% METAL FILM RESISTOR
TaydaElectronics 3.3K OHM 1/4W 1% METAL FILM RESISTOR
×2

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

PCB Gerber Files

Code

Source Code of the Project

Arduino
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

/* Definição do sensor de gás */
#define GPIO_SENSOR_GAS 34

/* Definição do token de seu Bot Telegram
(valor obtido no @BotFather) */
#define BOT_TELEGRAM_TOKEN " "
#define TEMPO_ESPERA_SENSOR 100 //ms

/* Wifi */
/* Coloque aqui o SSID (nome da rede wifi) que o
ESP32 deve se conectar
*/
char ssid_wifi[] = " ";

/* Coloque aqui o password (senha da rede wifi) que o
ESP32 deve se conectar
*/
char password_wifi[] = " ";

/* Variáveis e objetos para usar o wifi e Bot Telegram */
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TELEGRAM_TOKEN, client);

/* Coloque aqui o auth_id de sua conta telegram
(auth_id da conta que o bot deve alertar sobre o gás
*/
String auth_id = " ";

/* Protótipos */
void init_wifi(void);
void conecta_wifi(void);
void verifica_conexao_wifi(void);
void configura_gpio_sensor_gas(void);

/* Função: inicializa wi-fi
* Parametros: nenhum
* Retorno: nenhum
*/
void init_wifi(void)
{
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("------WI-FI -----");
Serial.print("Conectando-se a rede: ");
Serial.println(ssid_wifi);
Serial.println("Aguarde...");
conecta_wifi();
}

/* Função: conecta-se a rede wi-fi
* Parametros: nenhum
* Retorno: nenhum
*/
void conecta_wifi(void)
{
/* Se ja estiver conectado, nada é feito. */
if (WiFi.status() == WL_CONNECTED)
return;
/* refaz a conexão */
WiFi.begin(ssid_wifi, password_wifi);
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
Serial.print(".");
}
Serial.println();
Serial.print("Conectado com sucesso a rede wi-fi ");
Serial.println(ssid_wifi);
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}

/* Função: verifica se a conexao wi-fi está ativa
* (e, em caso negativo, refaz a conexao)
* Parametros: nenhum
* Retorno: nenhum
*/
void verifica_conexao_wifi(void)
{
conecta_wifi();
}

/* Função: configura GPIO para leitura do sensor de gás
* Parametros: nenhum
* Retorno: nenhum
*/
void configura_gpio_sensor_gas(void)
{
pinMode(GPIO_SENSOR_GAS, INPUT);
}
void setup()
{
Serial.begin(115200);

/* Configura GPIO para leitura do sensor de gás */
configura_gpio_sensor_gas();
/* Inicialização e conexao wifi */
init_wifi();
conecta_wifi();
}
void loop()
{

/* Verifica se conexão wifi está ok.
Caso não estiver, refaz a conexão. */
verifica_conexao_wifi();

/* Verifica se há detecção de gás */
if (digitalRead(GPIO_SENSOR_GAS) == HIGH)
{

/* Avisa, por Telegram, a detecção do gás */
bot.sendMessage(auth_id, "ALERTA: Gas detectado!", "");
Serial.println("Gas detectado! Avisando usuario pelo Telegram...");

/* Aguarda detecção de gás acabar
(para notificar via Telegram só uma vez) */
while(digitalRead(GPIO_SENSOR_GAS) == HIGH)
{
delay(1);
}

/* Espera alguns ms para evitar que, se ocorrer
oscilações da saída digital do sensor, sejam
erroneamente detectadas como alertas. */
delay(TEMPO_ESPERA_SENSOR);
}

}

Credits

Francisco Moreira

Francisco Moreira

4 projects • 0 followers

Comments