// Inclusão das bibliotecas para conexão com o WiFi e MQTT e DHT22
#include <WiFi.h> // Biblioteca para gerenciar conexão com redes WiFi
#include <PubSubClient.h> // Biblioteca para gerenciar comunicação MQTT
#include "DHTesp.h" / Biblioteca para gerenciar o sendor DHT22
// -----------------------------------------------------
const int DHT_PIN = 23;
// Define o pino 23 para o sensor DHT.
DHTesp dhtSensor;
// Cria o objeto para usar o sensor DHT.
// Credenciais para acesso à rede WiFi e ao broker MQTT
const char* ssid = "Wokwi-GUEST"; // Nome da rede WiFi
const char* password = ""; // Senha da rede (nenhuma neste caso)
const char* mqtt_server = "test.mosquitto.org"; // Endereço do broker MQTT público
// Objetos para cliente WiFi e MQTT
WiFiClient WOKWI_Client; // Cria um objeto cliente WiFi para comunicação
PubSubClient client(WOKWI_Client); // Cria um objeto cliente MQTT associado ao cliente WiFi
// Função para conectar ao WiFi
void setup_wifi() {
delay(10); // Pequeno atraso para estabilizar antes de tentar conectar
Serial.println(); // Salta uma linha no monitor serial
Serial.print("Connecting to ");
Serial.println(ssid); // Exibe o nome da rede WiFi no monitor serial
WiFi.mode(WIFI_STA); // Define o modo WiFi como estação (não cria um ponto de acesso)
WiFi.begin(ssid, password); // Inicia o processo de conexão com a rede WiFi
// Loop que espera até que a conexão seja bem-sucedida
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("."); // Exibe um ponto no monitor serial a cada meio segundo enquanto tenta conectar
}
// Quando conectado, exibe a mensagem de sucesso e o endereço IP obtido
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); // Exibe o endereço IP local atribuído pelo roteador
}
// Função para reconectar ao broker MQTT caso a conexão seja perdida
void reconnect() {
// Loop que continua até que a conexão com o MQTT seja restabelecida
while (!client.connected()) {
Serial.print("Attempting MQTT connection..."); // Exibe no monitor serial a tentativa de conexão
// Tenta conectar usando o nome "WOKWI_Client"
if (client.connect("WOKWI_Client")) {
Serial.println("connected"); // Conexão bem-sucedida com o broker MQTT
} else {
// Se falhar, exibe o código de erro e tenta novamente em 5 segundos
Serial.print("failed, rc=");
Serial.print(client.state()); // Exibe o estado do cliente MQTT (código de erro)
Serial.println(" try again in 5 seconds");
delay(5000); // Atraso de 5 segundos antes de tentar conectar novamente
}
}
}
// Função de configuração inicial
void setup() {
pinMode(2, OUTPUT); // Define o pino 2 (LED) como saída
pinMode(15, OUTPUT); // Define o pino 15 (LED) como saída
Serial.begin(115200); // Inicia a comunicação serial com taxa de 115200 bps
setup_wifi(); // Chama a função para conectar ao WiFi
client.setServer(mqtt_server, 1883); // Define o endereço do servidor MQTT (broker) e a porta 1883
// Configura o sensor DHT no pino 23, especificando que é do tipo DHT22.
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); //
}
// Função para verificar a conexão WiFi e acionar o LED (no pino 2)
void Conecta_WiFi()
{
if(WiFi.status()) // Verifica se está conectado ao WiFi
digitalWrite(2,HIGH); // Liga o LED (pino 2) se estiver conectado
else
digitalWrite(2,LOW); // Desliga o LED se não estiver conectado
}
// Função para verificar a conexão MQTT e acionar o LED (no pino 15)
void Conecta_MQTT()
{
if(client.connected()) // Verifica se está conectado ao MQTT
digitalWrite(15,HIGH); // Liga o LED (pino 15) se estiver conectado
else
digitalWrite(15,LOW); // Desliga o LED se não estiver conectado
}
void captura_DTH() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// Lê temperatura e umidade do sensor.
// -----------
client.publish("TEMP_WOKWI_DHT_PV_TEMP",String(data.temperature).c_str());
client.publish("HUM_WOKWI_DHT_PV_HUM",String(data.humidity).c_str());
//------------
//monitor serial
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
// Exibe a temperatura no monitor serial com 2 casas decimais.
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
// Exibe a umidade no monitor serial com 1 casa decimal.
Serial.println("---");
// Imprime uma linha de separação para clareza.
delay(1000);
// Aguarda 2 segundos antes da próxima leitura.
}
// Função principal que roda continuamente
void loop()
{
reconnect(); // Verifica e reconecta ao broker MQTT, se necessário
Conecta_WiFi(); // Verifica a conexão WiFi e controla o LED
Conecta_MQTT(); // Verifica a conexão MQTT e controla o LED
captura_DTH(); //// Envia os dados
}