#include <WiFi.h>
#include <PubSubClient.h>
#include <NewPing.h>
// Configurações de Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "test.mosquitto.org"; // MQTT broker
const char* topic1 = "/linhaProducao/inicializado";
const char* topic2 = "linhaProducao/finalizado";
WiFiClient espClient;
PubSubClient client(espClient);
// Definições dos pinos dos sensores ultrassônicos
#define TRIGGER_PIN_1 12
#define ECHO_PIN_1 13
#define TRIGGER_PIN_2 14
#define ECHO_PIN_2 27
#define MAX_DISTANCE 200 // Distância máxima em cm para detectar um produto
NewPing sonar1(TRIGGER_PIN_1, ECHO_PIN_1, MAX_DISTANCE);
NewPing sonar2(TRIGGER_PIN_2, ECHO_PIN_2, MAX_DISTANCE);
bool lastState1 = false;
bool lastState2 = false;
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
// Conectando ao MQTT
while (!client.connected()) {
Serial.print("Conectando ao MQTT...");
if (client.connect("ESP32Client")) {
Serial.println("conectado");
} else {
Serial.print("falha, rc=");
Serial.print(client.state());
Serial.println(" tentando novamente em 5 segundos");
delay(5000);
}
}
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Conectando-se a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado");
Serial.println("Endereço IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
client.loop();
// Leitura dos sensores
unsigned int distance1 = sonar1.ping_cm();
unsigned int distance2 = sonar2.ping_cm();
bool state1 = (distance1 > 0 && distance1 <= MAX_DISTANCE);
bool state2 = (distance2 > 0 && distance2 <= MAX_DISTANCE);
if (state1 != lastState1) {
client.publish(topic1, state1 ? "true" : "false");
lastState1 = state1;
}
if (state2 != lastState2) {
client.publish(topic2, state2 ? "true" : "false");
lastState2 = state2;
}
delay(100); // Pequeno atraso para evitar leituras excessivas
}