#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
#define RELAY_PIN 18
#define TEMP_THRESHOLD_C 40
DHT dht(DHTPIN, DHTTYPE);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const String telegramBotToken = "COLOQUE_SEU_TOKEN_AQUI";
const String chatID = "COLOQUE_SEU_ID_AQUI";
const String webhookURL = "COLOQUE_SEU_WEBHOOK_AQUI";
enum EstadoTemperatura {
NORMAL,
ALTA
};
EstadoTemperatura estadoAtual = NORMAL;
void conectaWiFi() {
Serial.print("Conectando ao Wi-Fi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n✅ Conectado ao Wi-Fi!");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
void enviaAlertaTelegram(String mensagem) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
// Construir a URL para enviar ao Telegram
String telegramURL = "https://api.telegram.org/bot" + telegramBotToken + "/sendMessage?chat_id=" + chatID + "&text=" + mensagem;
// Imprimir a URL gerada para depuração
Serial.println("Enviando mensagem para o Telegram...");
Serial.println(telegramURL); // Imprime a URL gerada
http.begin(telegramURL); // Conecta à URL do Telegram
int httpResponseCode = http.GET(); // Envia a requisição GET
// Imprimir o código de resposta para depuração
Serial.print("Código de resposta do Telegram: ");
Serial.println(httpResponseCode);
if (httpResponseCode > 0) {
Serial.print("📤 Mensagem enviada ao Telegram! Código HTTP: ");
Serial.println(httpResponseCode);
} else {
Serial.print("❌ Falha ao enviar mensagem ao Telegram. Erro: ");
Serial.println(http.errorToString(httpResponseCode).c_str());
}
http.end();
} else {
Serial.println("Wi-Fi não conectado. Não foi possível enviar mensagem ao Telegram.");
}
}
void enviaAlertaWebhook(String mensagem) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
// Enviar mensagem para o Webhook
String payload = "{\"mensagem\": \"" + mensagem + "\"}";
http.begin(webhookURL);
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.POST(payload); // Envia a mensagem para o Webhook
if (httpResponseCode > 0) {
Serial.print("📤 Mensagem enviada para o Webhook! Código HTTP: ");
Serial.println(httpResponseCode);
} else {
Serial.print("❌ Falha ao enviar mensagem para o Webhook. Erro: ");
Serial.println(http.errorToString(httpResponseCode).c_str());
}
http.end();
} else {
Serial.println("Wi-Fi não conectado. Não foi possível enviar mensagem ao Webhook.");
}
}
void setup() {
Serial.begin(115200);
conectaWiFi();
dht.begin();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
}
void loop() {
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Erro ao ler o DHT22!");
return;
}
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" °C | Umidade: ");
Serial.print(h);
Serial.println(" %");
if (t > TEMP_THRESHOLD_C) {
digitalWrite(RELAY_PIN, HIGH);
Serial.println(">>> Temperatura ALTA! Relé ATIVADO.");
if (estadoAtual != ALTA) {
// Envia alerta só na transição para temperatura alta
String mensagem = "⚠️ Temperatura alta detectada: " + String(t) + " °C | Umidade: " + String(h) + " %";
enviaAlertaTelegram(mensagem); // Envia alerta ao Telegram
enviaAlertaWebhook(mensagem); // Envia alerta ao Webhook
estadoAtual = ALTA;
}
} else {
digitalWrite(RELAY_PIN, LOW);
Serial.println("Temperatura normal. Relé DESLIGADO.");
if (estadoAtual != NORMAL) {
// Envia mensagem só na transição para temperatura normal
String mensagem = "✅ Temperatura voltou ao normal: " + String(t) + " °C | Umidade: " + String(h) + " %";
enviaAlertaTelegram(mensagem); // Envia alerta ao Telegram
enviaAlertaWebhook(mensagem); // Envia alerta ao Webhook
estadoAtual = NORMAL;
}
}
}