#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// Configurações MQTT
const char* MQTT_BROKER = "74bb395166a24d0db1d9cd51237e789e.s1.eu.hivemq.cloud";
//const int MQTT_PORT = 8883; // Porta para conexão TLS/SSL
const char* MQTT_USER = "teste";
const char* MQTT_PASSWORD = "TESTEteste@2024";
const char* MQTT_TOPIC = "teste_topico";
// Configurações do sensor DHT22
#define DHTPIN 15 // Pino ao qual o DHT22 está conectado
#define DHTTYPE DHT22 // Definir o tipo do sensor como DHT22
DHT dht(DHTPIN, DHTTYPE);
// Configuração Wi-Fi
const char* WIFI_SSID = "Wokwi-GUEST"; // Substitua pelo seu SSID
const char* WIFI_PASSWORD = ""; // Substitua pela sua senha, se necessário
// Configuração do cliente MQTT
WiFiClient espClient;
PubSubClient client(espClient);
// Função para conectar ao Wi-Fi
void connect_wifi() {
Serial.print("Conectando ao WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Conectado ao WiFi!");
}
// Função de callback para tratar mensagens recebidas
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mensagem recebida no tópico: ");
Serial.println(topic);
}
// Função para conectar ao servidor MQTT
void connect_mqtt() {
client.setServer(MQTT_BROKER);
client.setCallback(mqtt_callback);
while (!client.connected()) {
Serial.print("Conectando ao servidor MQTT...");
if (client.connect("esp32_client", MQTT_USER, MQTT_PASSWORD)) {
Serial.println("Conectado ao servidor MQTT!");
} else {
Serial.print("Falha na conexão, rc=");
Serial.print(client.state());
delay(5000);
}
}
}
// Função principal
void setup() {
Serial.begin(115200);
dht.begin();
connect_wifi();
connect_mqtt();
}
void loop() {
if (!client.connected()) {
connect_mqtt();
}
client.loop();
// Leitura dos dados do sensor DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Verificando se houve erro na leitura
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Falha ao ler do sensor DHT!");
return;
}
// Publicando os dados no tópico MQTT
String payload = "{\"temperature\": " + String(temperature) + ", \"humidity\": " + String(humidity) + "}";
client.publish(MQTT_TOPIC, payload.c_str());
Serial.println("Dados publicados: " + payload);
delay(10000); // Intervalo de 10 segundos entre leituras
}