#include <WiFi.h>
#include <PubSubClient.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
// Configurações Wi-Fi e MQTT
#define WIFI_SSID "Bancadas_01"
#define WIFI_PASSWORD "Kits@801"
const char* mqttServer = "broker.app.wnology.io";
const int mqttPort = 1883;
const char* mqttUser = "373b7fff-8264-4683-b311-d7a2083f8954";
const char* mqttPassword = "43b5b00e5f595b59c5caa9e1a831e4ef0dd4f1aac9ac6cde1fadc41b9bed8515";
const char* mqttID = "66e9829eec1f59bf1798e4d7";
const char* mqttTempTopic = "Temperatura/66e9829eec1f59bf1798e4d7"; // Tópico de temperatura
// Configurações do Telegram
const char* botToken = "7061326486:AAGu4jrqbl-hfPOgl__ucaaJHXWfsDtjQpc";
const char* chatID = "-1002493561972";
// Clientes WiFi, MQTT e Telegram
WiFiClient espClient;
WiFiClientSecure telegramClient;
PubSubClient client(espClient);
UniversalTelegramBot bot(botToken, telegramClient);
// Callback: O que fazer quando uma mensagem MQTT é recebida
void callback(char* topic, byte* payload, unsigned int length) {
Serial.println("Callback chamado."); // Depuração para verificar se o callback foi chamado
Serial.print("Mensagem recebida no tópico: ");
Serial.println(topic);
String message;
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
if (length == 0) {
Serial.println("Aviso: Mensagem recebida está vazia!");
} else {
Serial.println("Mensagem: " + message);
}
// Verifica se a mensagem recebida é do tópico de temperatura
if (String(topic) == mqttTempTopic) {
Serial.println("Temperatura lida do broker: " + message);
sendToTelegram("Temperatura recebida: " + message);
} else {
Serial.println("Tópico recebido não corresponde ao tópico de Temperatura.");
}
}
// Função para enviar a mensagem ao Telegram
void sendToTelegram(String message) {
telegramClient.setInsecure();
if (bot.sendMessage(chatID, message, "")) {
Serial.println("Mensagem enviada ao Telegram: " + message);
} else {
Serial.println("Falha ao enviar mensagem para o Telegram");
}
}
// Função para inicializar a conexão Wi-Fi
void init_wifi(void) {
delay(10);
Serial.println("Conectando ao WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println();
Serial.println("Conectado ao WiFi.");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
// Função para configurar o MQTT
void init_MQTT(void) {
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
client.setSocketTimeout(10);
}
// Função para conectar ao broker MQTT com depuração adicional
void connect_MQTT(void) {
while (!client.connected()) {
Serial.print("Conectando ao broker MQTT: ");
Serial.println(mqttServer);
if (client.connect(mqttID, mqttUser, mqttPassword)) {
Serial.println("Conectado ao broker MQTT com sucesso!");
// Tenta se inscrever no tópico de temperatura
if (client.subscribe(mqttTempTopic)) {
Serial.println("Inscrito no tópico de Temperatura: " + String(mqttTempTopic));
} else {
Serial.println("Falha ao se inscrever no tópico: " + String(mqttTempTopic));
}
} else {
Serial.print("Falha na conexão ao broker MQTT. Código de erro: ");
Serial.println(client.state());
delay(2000);
}
}
}
// Função para reconectar ao MQTT
void reconnect_MQTT() {
if (!client.connected()) {
connect_MQTT();
}
client.loop();
}
void setup() {
Serial.begin(115200);
// Inicializar a conexão Wi-Fi
init_wifi();
// Verificar se WiFi está conectado corretamente
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi desconectado. Tentando reconectar...");
} else {
Serial.println("WiFi conectado com IP: " + WiFi.localIP().toString());
}
// Inicializar e conectar ao broker MQTT
init_MQTT();
connect_MQTT();
// Inicializar o cliente do Telegram
telegramClient.setInsecure();
}
void loop() {
// Verifica se está conectado ao broker MQTT e mantém a conexão viva
reconnect_MQTT();
// Depuração adicional para monitorar a conexão
if (client.connected()) {
Serial.println("Conectado ao broker MQTT. Aguardando mensagens...");
} else {
Serial.println("Desconectado do broker MQTT. Tentando reconectar...");
}
}