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:
- Abrir Telegram e pesquisar por “botfather” e abrir a conversar correspondente;
- Receberá uma mensagem automática a qual deve responder com, /start;
- Responder com “/newbot” para criar um novo bot;
- Seguidamente deverá escolher um Nome e um Username para atribuir ao seu bot;
- Receberá uma API Key – Guardar este Valor.
2. Obter ID de 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:
- Pesquisar por “IDBot” e abrir a conversar correspondente;
- Responder com “/getid”;
- 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
2. Menu Ferramentas – Placas – Gestor de Placas – Pesquisar por “Esp8266“;
3. Instalar ESP8266 Community.
Instalação das Bibliotecas:
Para executar este projeto com sucesso é necessário efetuar a instalação das bibliotecas:
- Universal Telegram Bot
- Arduino JSON
Universal Telegram Bot
Esta é a biblioteca responsável por comunicar com o nosso bot, para a transferir carregue aqui.
Para instalar deverá:
- Rascunho- Incluir Biblioteca – Adicionar Biblioteca Zip;
- Adicionar a biblioteca que acabou de transferir.
Arduino JSON
Biblioteca capaz de interpretar ficheiros JSON.
Para instalar deverá:
- Rascunho – Incluir Biblioteca – Gerir Bibliotecas;
- Pesquisar por ArduinoJson;
- Instalar a versão 6.15.2.
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:
- /start – Inicia Bot;
- /rele_on – Ativa o Relé;
- /rele_off – Desativa o Relé;
- /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!