Introdução
Neste artigo, mostraremos como controlar as GPIOs da placa de desenvolvimento ESP32-C6 DevKitC-1 utilizando o Telegram.
Nosso projeto terá como objetivo controlar um LED, mas o mesmo conceito pode ser aplicado para controlar qualquer outra porta I/O. Basta enviar uma mensagem para seu bot do Telegram informando o valor desejado.
Para conhecer mais a placa de desenvolvimento consulte nosso artigo Introdução à Placa ESP32-C6-DevKitC-1: Ideal para IoT
O que é o Telegram
O Telegram é um mensageiro instantâneo baseado em nuvem, com suporte a chamadas de voz via IP. Ele está disponível para Android, iOS, Windows, macOS e Linux. É gratuito, sem anúncios, e permite a criação de bots, com os quais podemos interagir.
Para saber mais sobre o Telegram, consulte https://telegram.org
Criando um Bot no Telegram
- Instale o aplicativo Telegram no seu smartphone.
- Procure por “BotFather” ou acesse t.me/botfather.
- Inicie uma conversa com o BotFather e clique no botão Start.
- Digite o comando /newbot e siga as instruções:
- Dê um nome para o seu bot.
- Escolha um nome de usuário único, terminando com bot
Se o seu bot for criado com sucesso, você receberá um link para acessar o bot e o token de autenticação do bot.
Obtendo seu ID de usuário do Telegram
Qualquer pessoa que conhecer o nome do seu bot poderá interagir com ele. Para limitar o acesso apenas ao seu usuário (ou a usuários autorizados), você pode verificar o ID de quem envia mensagens ao bot.
Para descobrir seu Telegram User ID:
- Procure por “myidbot” ou acesse t.me/myidbot.
- Selecione o IDBot e envie o comando /getid
- O bot responderá com seu ID de usuário
Materiais Necessários
Para desenvolver nossa aplicação os materiais utilizados foram:
- Placa ESP23-C6 DevKitC-1
- Cabo USB-C
- LED
- Resistor 330 ohms
- Jumpers
- Arduino IDE
Para configurar o ambiente e instalar o suporte a ESP32-C6 veja o artigo ESP32-C6 na Prática: Seu Primeiro “Hello World”
Circuito
Instalação de Bibliotecas
Abra a Arduino IDE e siga os passos abaixo:
- Vá em Sketch > Incluir Biblioteca > Gerenciar Bibliotecas.
- Busque por UniversalTelegramBot by Brian Lough
- Instale a biblioteca mais recente e sua dependência ArduinoJson by Benoit Blanchon.
Código
No código a ser apresentado, será necessário que você preencha as credenciais do seu WiFi, Token do seu bot do Telegram e seu ID de usuário do Telegram.
Atenção: Caso ocorra alguma falha, tente utilizar as credenciais do hotspot do seu celular.
Definimos os comandos disponíveis do bot no código como sendo, /start, /led_on, /led_off e /state
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#define BOTtoken "*******:*******************" // Seu Telegram Bot Token (Obtenha do BotFather)
#define CHAT_ID "********" // Use @myidbot para obter o ID do chat
const uint8_t LED_PIN = 18;
// Configuração WiFi
const char* ssid = "******";
const char* password = "******";
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
const int botRequestDelay = 1000; // Intervalo entre requisições ao bot de 1 segundo
unsigned long lastTimeBot; // Armazena o último tempo em que o bot foi executado
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Certificado raiz para api.telegram.org
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println(WiFi.localIP());
}
void loop() {
if (millis() > lastTimeBot + botRequestDelay) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages) {
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
lastTimeBot = millis();
}
}
void handleNewMessages(int numNewMessages) {
Serial.println(String(numNewMessages));
for (int i = 0; i < numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
if (chat_id != CHAT_ID) {
bot.sendMessage(chat_id, "Usuário não autorizado", "");
continue;
}
String text = bot.messages[i].text;
Serial.println("Mensagem recebida: " + text);
if (text == "/start") {
String welcome = "Bem-vindo, " + String(bot.messages[i].from_name) + ".\n";
welcome += "Use os seguintes comandos para controlar suas saídas.\n\n";
welcome += "/led_on para ligar o GPIO \n";
welcome += "/led_off para desligar o GPIO \n";
welcome += "/state para solicitar o estado atual do GPIO \n";
bot.sendMessage(chat_id, welcome, "");
} else if (text == "/led_on") {
digitalWrite(LED_PIN, HIGH);
bot.sendMessage(chat_id, "LED ON", "");
} else if (text == "/led_off") {
digitalWrite(LED_PIN, LOW);
bot.sendMessage(chat_id, "LED OFF", "");
} else if (text == "/state") {
if (digitalRead(LED_PIN)) {
bot.sendMessage(chat_id, "LED ON", "");
} else {
bot.sendMessage(chat_id, "LED OFF", "");
}
} else {
bot.sendMessage(chat_id, "Comando inválido. Use /start para ajuda.", "");
}
}
}
Resultados

Conclusão
Neste artigo, mostramos como controlar GPIOs da placa ESP32-C6 DevKitC-1 por meio de mensagens enviadas via Telegram Bot. Essa abordagem permite interagir remotamente com o hardware usando uma interface simples e acessível: o aplicativo de mensagens Telegram.
Convidamos você a explorar outras aplicações integrando Telegram e ESP32, como: Monitoramento remoto de sensores, envio de alertas automáticos, integração com automações domésticas
Sinta-se à vontade para compartilhar seus resultados com a comunidade, seja por artigos, vídeos ou repositórios abertos. Sua experiência pode inspirar e auxiliar muitos outros desenvolvedores.




