#include <WiFi.h> // Biblioteca para Wi-Fi ESP32
#include <PubSubClient.h> // Biblioteca para MQTT
#include <DHT.h> // Biblioteca para o sensor DHT22
// Configurações de Wi-Fi
const char* SSID = "UEA-EST_WIFI"; // SSID / nome da rede WI-FI
const char* PASSWORD = "somosumasoest"; // Senha da rede WI-FI
// Configurações do MQTT
const char* topic_pub_temp = "/sihs/sams/temperature";
const char* topic_pub_hum = "/sihs/sams/humidity";
const char* topic_sub = "/sihs/sams/listener";
const char* mqtt_server = "broker.mqttdashboard.com"; // Servidor MQTT
// Configurações do sensor DHT22
#define DHTPIN 15 // Pino digital conectado ao DHT22 (GPIO 15)
#define DHTTYPE DHT22 // Definindo o tipo do sensor DHT
DHT dht(DHTPIN, DHTTYPE);
// Definição dos pinos
int pinLED = 4; // Pino do LED (GPIO 4)
WiFiClient espClient;
PubSubClient client(espClient);
// Função para receber mensagens MQTT
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived: ");
Serial.print(topic);
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.println(message);
// Controle do LED baseado na mensagem recebida
if (message.equals("ligar")) {
digitalWrite(pinLED, HIGH);
} else if (message.equals("desligar")) {
digitalWrite(pinLED, LOW);
}
}
// Função para conectar ao Wi-Fi
void setup_wifi() {
Serial.print("Conectando ao Wi-Fi...");
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Conectado ao Wi-Fi!");
}
// Função para reconectar ao MQTT
void reconnect() {
while (!client.connected()) {
Serial.print("Tentando conexão MQTT...");
if (client.connect("ESP32Client")) {
Serial.println("Conectado ao MQTT.");
client.subscribe(topic_sub); // Subscrevendo ao tópico
} else {
Serial.print("Falha na conexão, rc=");
Serial.print(client.state());
Serial.println(" Tentando novamente em 5 segundos.");
delay(5000);
}
}
}
// Setup inicial
void setup() {
Serial.begin(115200);
pinMode(pinLED, OUTPUT);
digitalWrite(pinLED, LOW); // LED começa desligado
dht.begin(); // Iniciando o sensor DHT22
setup_wifi(); // Conectando ao Wi-Fi
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
// Função loop
void loop() {
if (!client.connected()) {
reconnect(); // Reconecta se perder a conexão MQTT
}
client.loop(); // Mantém o loop MQTT ativo
// Leitura de temperatura e umidade do DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Verifica se a leitura foi bem-sucedida
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Falha ao ler do DHT22!");
return;
}
// Publica os dados no MQTT
char tempStr[8];
char humStr[8];
dtostrf(temperature, 1, 2, tempStr);
dtostrf(humidity, 1, 2, humStr);
client.publish(topic_pub_temp, tempStr); // Publica a temperatura
client.publish(topic_pub_hum, humStr); // Publica a umidade
Serial.print("Temperatura: ");
Serial.println(tempStr);
Serial.print("Umidade: ");
Serial.println(humStr);
delay(2000); // Aguarda 2 segundos antes de ler novamente
}