Controlar Relé com NodeMcu ESP8266 através do Telegram

Neste artigo iremos criar um chat no Telegram capaz de controlar o seu ESP8266 em qualquer parte do mundo!

Iremos precisar do seguintes material:

Imagem Produto Comprar
 

 

 

NodeMcu Esp8266

 


 

 

 

Relé 5v 1 Canal

 


 

 

 

Cabos Jumper Femêa-Femêa

 


Preparar Telegram

1. Criar Bot

Para elaborarmos este projeto primeiramente precisamos de gerar um Bot que funcionará como intermediário entre o nosso telemóvel e o ESP8266.
Para criar o Bot deverá seguir os seguintes passos:

Telegram Anti-Phishing Admin Bot – Installation and Deployment – Zenchain
BotFather – Criar Bot
  1. Abrir Telegram e pesquisar por “botfather” e abrir a conversar correspondente;
  2. Receberá uma mensagem automática a qual deve responder com, /start;
  3. Responder com “/newbot” para criar um novo bot;
  4. Seguidamente deverá escolher um Nome e um Username para atribuir ao seu bot;
  5. Receberá uma API Key Guardar este Valor.

2. Obter ID de Perfil

Telegram: Request ESP32/ESP8266 Sensor Readings (Arduino IDE) – EmbedGyan Blogs
IDBot – Obter ID Perfil

Sendo que qualquer pessoa que tenha acesso ao username  do seu bot pode interagir com ele devemos filtrar os comandos enviados por pessoas autorizadas das pessoas não autorizadas, para isso, devemos adicionar o ID da sua conta Telegram:

  1. Pesquisar por “IDBot” e abrir a conversar correspondente;
  2. Responder com “/getid”;
  3. Receberá o ID da sua conta – Guardar este valor.

Preparar Arduino IDE:

Instalação da Placa:

Sendo que o NodeMcu não é uma placa nativa ao arduino IDE terá de ser adicionado manualmente ao ambiente:

1. Abrir Ficheiro – Preferências e adicionar o seguinte endereço:

  • https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json

Install ESP8266 Board add-on in Arduino IDE enter URL

2. Menu Ferramentas – Placas – Gestor de Placas – Pesquisar por “Esp8266“;

3. Instalar ESP8266 Community.

ESP8266 Thing Hookup Guide - learn.sparkfun.com
ESP8266 Community

 

Instalação das Bibliotecas:

Para executar este projeto com sucesso é necessário efetuar a instalação das bibliotecas:

  1. Universal Telegram Bot
  2. Arduino JSON

Universal Telegram Bot

Esta é a biblioteca responsável por comunicar com o nosso bot, para a transferir carregue aqui.

Para instalar deverá:

  1. Rascunho- Incluir Biblioteca – Adicionar Biblioteca Zip;
  2. Adicionar a biblioteca que acabou de transferir.

Arduino JSON

Biblioteca capaz de interpretar ficheiros JSON.

Para instalar deverá:

  1. Rascunho – Incluir Biblioteca – Gerir Bibliotecas;
  2. Pesquisar por ArduinoJson;
  3. Instalar a versão 6.15.2.

Esquema de Montagem

Esquema de Montagem
Esquema de Montagem

Código Utilizado

#include <ESP8266WiFi.h>
#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 = "SSID";
const char* password = "PASSWORD";

#define BOTtoken "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" // Bot API (Botfather)
#define CHAT_ID "XXXXXXXXXX" // Chat ID (IDBOT)

#ifdef ESP8266
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
#endif

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

int botRequestDelay = 1000;
unsigned long lastTimeBotRan;

const int relePin = D1;
bool releEstado = 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 += "/rele_on to turn GPIO ON \n";
welcome += "/rele_off to turn GPIO OFF \n";
welcome += "/state to request current GPIO state \n";
bot.sendMessage(chat_id, welcome, "");
}

if (text == "/rele_on") {
bot.sendMessage(chat_id, "Rele state set to ON", "");
releEstado = HIGH;
digitalWrite(relePin, releEstado);
}

if (text == "/rele_off") {
bot.sendMessage(chat_id, "RELE state set to OFF", "");
releEstado = LOW;
digitalWrite(relePin, releEstado);
}

if (text == "/state") {
if (digitalRead(relePin)) {
bot.sendMessage(chat_id, "RELE is ON", "");
}
else {
bot.sendMessage(chat_id, "RELE 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(relePin, OUTPUT);
digitalWrite(relePin, releEstado);

// Connect to Wi-Fi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
};
}

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();
}
}

Ter em Atenção:

  • Substituir “SSID” pelo nome da sua rede: const char* ssid = “SSID”;
  • Substituir “Password” pela palavra-passe da sua rede:  const char* password = “PASSWORD”;
  • Subsituir “XXXX” pelo token gerado pelo BotFather:  #define BOTtoken “XXX:XXXXXXX”
  • Subsituir “XXXX” pelo ID do seu chat obtido pelo IDBot#define CHAT_ID “XXXXXXXXXX” // Chat ID (IDBOT)

 

Finalizar

Para conseguir começar a controlar o seu relé deverá abrir a conversa com o bot previamente criado e utilizar um dos seguintes 4 comandos:

  1. /start – Inicia Bot;
  2. /rele_on – Ativa o Relé;
  3. /rele_off – Desativa o Relé;
  4. /state – Mostra o estado em que se encontra o Relé (ligado ou desligado).

Basta ligar qualquer dispositivo ao seu relé (lâmpada, ficha, eletrodoméstico, etc…) para que este possa ser controlado pelo seu Telegram em qualquer parte do mundo.

 

Veja o Nosso Video Sobre este Projeto!

 

Para mais projetos, percorram o nosso blog, onde podem encontrar vários artigos interessantes relacionados com eletrónica, robótica e muito mais! Visitem também o nosso site, onde encontram tudo para eletrónica e robótica!