#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <DHT_U.h>
#include <SimpleDHT.h> //Biblioteca referente ao DHT22
// const char *ssid = "GERREIRO";
// const char *password = "ryan1234";
const char *mqttServer = "broker.emqx.io";
const int mqttPort = 1883;
const char *mqttUser = "Andre_felipe";
const char *mqttPassword = "1234";
WiFiClient espClient;
PubSubClient client(espClient);
float temperature;
float humidity = 0.0;
const int pinDHT = 22;
int LED_1 = 5;
int LED_2 = 4;
DHT dht(pinDHT, DHT22);
SimpleDHT22 dht22(pinDHT); //Objeto que possui os métodos de leitura dos valores do sensor DHT
void setup() {
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
Serial.begin(115200);
delay(1000);
// Conectar-se à rede Wi-Fi
// WiFi.begin(ssid, password);
// while (WiFi.status() != WL_CONNECTED) {
// delay(1000);
// Serial.println("Connecting to WiFi...");
// }
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println("Connected to WiFi");
// Configurar o servidor MQTT
client.setServer(mqttServer, mqttPort);
client.subscribe("dede/setvent");
client.subscribe("dede/setumid");
// Configurar a função de callback para lidar com mensagens recebidas
client.setCallback(callback);
Serial.println("Conectando ao servidor MQTT...");
if (client.connect("ESP32Client", mqttUser, mqttPassword)) {
Serial.println("Conectado ao servidor MQTT");
} else {
Serial.print("Falha na conexão. Retorno: ");
Serial.println(client.state());
ESP.restart();
}
}
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
}
Serial.println();
Serial.println("-----------------------");
}
void loop() {
if (!client.connected()) {
reconnect();
}
if (getClimate()) {
showClimate(true);
} else {
showClimate(false);
}
delay(1000);
if (sendValues(temperature, humidity)) {
Serial.println("Dados enviados com sucesso");
} else {
Serial.println("Falha ao enviar dados do sensor");
}
client.loop();
delay(1000);
}
bool getClimate() {
humidity = dht.readHumidity();
temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Erro ao ler dados do sensor DHT22");
return false;
}
return true;
}
void showClimate(bool success) {
if (success) {
Serial.println("Temperature: " + String(temperature) + " °C");
Serial.println("Umidade: " + String(humidity) + "%");
// Controle do LED relacionado à temperatura
if (temperature > 30.0) {
digitalWrite(LED_1, HIGH); // Ligado
client.publish("dede/venti","ON");
} else {
digitalWrite(LED_1, LOW); // Desligado
client.publish("dede/venti","OFF");
}
// Controle do LED relacionado à umidade
if (humidity < 40.0) {
digitalWrite(LED_2, HIGH); // Ligado
client.publish("sinistro/umid","ON");
} else {
digitalWrite(LED_2, LOW); // Desligado
client.publish("sinistro/umid","OFF");
}
} else {
Serial.println("Falha ao obter dados de temperatura e umidade.");
}
}
void reconnect() {
while (!client.connected()) {
Serial.println("Tentando reconectar ao servidor MQTT...");
if (client.connect("ESP32Client", mqttUser, mqttPassword)) {
Serial.println("Conectado ao servidor MQTT");
} else {
Serial.print("Falha na conexão. Retorno: ");
Serial.println(client.state());
delay(2000);
}
}
}
bool sendValues(float temperature, float humidity) {
String topic = "sexo/temp";
String topic2 = "dede/umi";
Serial.println(temperature);
Serial.println(humidity);
// Converte o valor float para String antes de enviar
String payload = String(temperature);
if (client.publish(topic.c_str(), payload.c_str()) && client.publish(topic2.c_str(), String(humidity).c_str())) {
return true;
} else {
return false;
}
}