#include <WiFi.h>
#include <PubSubClient.h>
#include "DHTesp.h"
// ===== CONFIGURAÇÃO WI-FI =====
const char* ssid = "FIAP-IOT";
const char* password = "[email protected]";
// ===== CONFIGURAÇÃO MQTT =====
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char* topicTemp = "planta/temperatura";
const char* topicHum = "planta/umidade";
const char* topicLuz = "planta/luminosidade";
// ===== PINOS =====
#define DHT_PIN 15
#define LDR_PIN 34
#define LED_PIN 2
DHTesp dht;
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
Serial.print("Conectando ao Wi-Fi ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConectado!");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Tentando conectar ao MQTT...");
if (client.connect("ESP32_PLANTA")) {
Serial.println("Conectado!");
} else {
Serial.print("Falha, rc=");
Serial.print(client.state());
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
dht.setup(DHT_PIN, DHTesp::DHT22);
Serial.println("Sensor DHT22 inicializado!");
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
TempAndHumidity data = dht.getTempAndHumidity();
if (isnan(data.temperature) || isnan(data.humidity)) {
Serial.println("Falha ao ler do DHT22!");
delay(2000);
return;
}
// ===== LDR =====
int ldrValor = analogRead(LDR_PIN); // 0–4095
int luzPct = map(ldrValor, 0, 4095, 0, 100);
luzPct = 100 - luzPct; // inverter: 100 = claro, 0 = escuro
digitalWrite(LED_PIN, luzPct < 30 ? HIGH : LOW);
// ===== Publicar MQTT =====
char msgTemp[10];
char msgHum[10];
char msgLuz[10];
sprintf(msgTemp, "%.1f", data.temperature);
sprintf(msgHum, "%.1f", data.humidity);
sprintf(msgLuz, "%d", luzPct);
client.publish(topicTemp, msgTemp);
client.publish(topicHum, msgHum);
client.publish(topicLuz, msgLuz);
Serial.printf("Temperatura: %.1f°C | Umidade: %.1f%% | Luz: %d%%\n",
data.temperature, data.humidity, luzPct);
delay(3000);
}