#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// Definir o pino para o sensor DHT22
#define DHTPIN 4
#define DHTTYPE DHT22
// Definir o pino do potenciômetro
#define POTPIN 34
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
setup_wifi();
client.setServer(mqtt_server, 1883);
}
void setup_wifi() {
delay(10);
Serial.print("Conectando-se ao Wi-Fi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
}
void sendSensorData() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
int potValue = analogRead(POTPIN);
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Falha na leitura do DHT22");
return;
}
// Calcular o consumo de energia em kWh
float consumoEnergia = map(potValue, 0, 4095, 0, 100) / 10.0;
// Enviar os dados via MQTT
client.publish("empresa/sensor/temperatura", String(temperature).c_str());
client.publish("empresa/sensor/umidade", String(humidity).c_str());
client.publish("empresa/sensor/consumoenergia", String(consumoEnergia).c_str());
// Exibir os dados no monitor serial
Serial.print("Temperatura: ");
Serial.print(temperature);
Serial.print(" °C, Umidade: ");
Serial.print(humidity);
Serial.print(" %, Consumo de Energia: ");
Serial.print(consumoEnergia);
Serial.println(" kWh");
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
sendSensorData();
delay(5000);
}
void reconnect() {
while (!client.connected()) {
if (client.connect("ESP32Client")) {
client.subscribe("empresa/#");
} else {
delay(5000);
}
}
}