#include "PubSubClient.h"
#include <WiFi.h>
#include <Arduino.h>
#include <ArduinoJson.h>
// Configurações Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Configurações MQTT
const char* mqtt_server = "test.mosquitto.org";
const int mqtt_port = 1883;
const char* topic_pir = "sensor/pir";
const char* topic_ldr = "sensor/ldr";
WiFiClient espClient;
PubSubClient client(espClient);
// Definições dos pinos
const int pirPin = 2; // Sensor PIR (digital)
const int ldrPin = 34; // Sensor LDR (analógico)
const int ledPin = 17; // LED (digital)
const int buzzerPin = 16; // Buzzer (PWM)
unsigned long lastMillis = 0;
void setup_wifi() {
delay(10);
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
}
void reconnect() {
while (!client.connect("ESP32Client")) {
delay(500);
}
Serial.println("MQTT connected");
}
void setup() {
pinMode(pirPin, INPUT);
pinMode(ldrPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
if (millis() - lastMillis > 200) {
lastMillis = millis();
int pirValue = digitalRead(pirPin);
int ldrValue = analogRead(ldrPin);
// Aciona LED e buzzer se houver movimento
digitalWrite(ledPin, pirValue);
analogWrite(buzzerPin, pirValue ? 180 : 0);
// Monta payload JSON
StaticJsonDocument<200> doc;
doc["pir"] = pirValue;
doc["ldr"] = ldrValue;
String json;
serializeJson(doc, json);
// Publica no MQTT
client.publish(topic_pir, json.c_str());
client.publish(topic_ldr, json.c_str());
// Imprime serialmente em JSON
Serial.println(json);
}
}