#include <WiFi.h>
#include <WiFiClientSecure.h> // ADICIONADO: Biblioteca para conexão segura
#include <PubSubClient.h>
#include <DHT.h>
// ===== CONFIGURAÇÕES DO DHT =====
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// ===== CONFIGURAÇÕES WIFI =====
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ===== CONFIGURAÇÕES MQTT =====
const char* mqtt_server = "ec9645db9cda4fea82a45fdbc3e019d1.s1.eu.hivemq.cloud";
const int mqtt_port = 8883;
const char* mqtt_topic = "esp32/dht22";
const char* mqtt_user = "hivemq.webclient.1775692369426"; // ADICIONADO: Usuário do Cluster HiveMQ
const char* mqtt_pass = "&ETo3@9v0adP#Hkb1C!L"; // ADICIONADO: Senha do Cluster HiveMQ
// ===== OBJETOS =====
WiFiClientSecure espClient; // MODIFICADO: Usando cliente seguro para a porta 8883
PubSubClient client(espClient);
// ===== FUNÇÃO WIFI =====
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Conectando ao WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi conectado!");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
// ADICIONADO: Permite a conexão SSL/TLS sem precisar fornecer o certificado raiz
espClient.setInsecure();
}
// ===== FUNÇÃO MQTT =====
void reconnect() {
while (!client.connected()) {
Serial.print("Conectando ao MQTT...");
// MODIFICADO: Passando usuário e senha na conexão
if (client.connect("ESP32Client", mqtt_user, mqtt_pass)) {
Serial.println("Conectado ao broker!");
} else {
Serial.print("Falha, rc=");
Serial.print(client.state());
Serial.println(" tentando novamente em 2s...");
delay(2000);
}
}
}
// ===== SETUP =====
void setup() {
Serial.begin(115200);
dht.begin();
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
// ===== LOOP =====
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
float temperatura = dht.readTemperature();
float umidade = dht.readHumidity();
if (isnan(temperatura) || isnan(umidade)) {
Serial.println("Erro ao ler o DHT22!");
delay(2000);
return;
}
// ===== MONTAR JSON =====
String payload = "{";
payload += "\"temperatura\":";
payload += temperatura;
payload += ",\"umidade\":";
payload += umidade;
payload += "}";
// ===== SERIAL =====
Serial.println("Enviando:");
Serial.println(payload);
// ===== PUBLICAR MQTT =====
client.publish(mqtt_topic, payload.c_str());
delay(5000);
}