#include <WiFi.h>
#include <PubSubClient.h>
// Informações do broker MQTT
const char* BROKER_MQTT = "149.56.143.103";
const int BROKER_PORT = 1883;
#define led 9
#define buttonPin 10//const int buttonPin = T2; // the number of the pushbutton pin
#define sensorEntrada 7
#define sensorSalida 8
int entradas;
int salidas;
int sensorEntradaState = 1;
int sensorSalidaState = 1;
int sensorEntradaStateOld = 1;
int sensorSalidaStateOld = 1;
int buttonState = 1; // variable for reading the pushbutton status
String proceso = ""; //variable que da seguimiento a proceso
// Tópico ao qual o dispositivo irá se inscrever
const char* TOPICO_SUBSCRICAO = "seu/topico";
// Cliente Wi-Fi
WiFiClient wifiClient;;
// Cliente MQTT
PubSubClient mqttClient(wifiClient);
// Função de callback para mensagens recebidas
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mensaje recibido en el siguiente topico: ");
Serial.println(topic);
Serial.print("Contenido: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
if (((char)payload[0]) == '#' && ((char)payload[1]) == '1') {
digitalWrite(led, HIGH);
}
if (((char)payload[0]) == '#' && ((char)payload[1]) == '0') {
digitalWrite(led,LOW); // ¿Debería ser HIGH aquí?
}
}
Serial.println();
}
void setup() {
Serial.begin(115200);
pinMode(sensorEntrada, INPUT);
pinMode(sensorSalida, INPUT);
pinMode(buttonPin, INPUT);
pinMode(led, OUTPUT);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(500);
// Conectar-se à rede Wi-Fi
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a WiFi...");
}
Serial.println("Conectado a WiFi.");
// Configurar cliente MQTT
mqttClient.setServer(BROKER_MQTT, BROKER_PORT);
mqttClient.setCallback(callback);
// Conectar ao broker MQTT e se inscrever no tópico
while (!mqttClient.connected()) {
Serial.println("Conectando a broker MQTT...");
if (mqttClient.connect("ESP32_Client","guillermo","lguillermo1147")) {
Serial.println("Conectado a broker MQTT.");
mqttClient.publish("conectado","Tarjeta para Estacionamiento con carril sencillo");
mqttClient.subscribe(TOPICO_SUBSCRICAO);
} else {
Serial.print("Falla la conexion a el broker MQTT. Reintento en 5 segundos...");
delay(5000);
}
}
}
void loop() {
// Mantém a conexão com o broker MQTT e processa mensagens recebidas
mqttClient.loop();
buttonState = digitalRead(buttonPin);
sensorEntradaState = digitalRead(sensorEntrada);
sensorSalidaState = digitalRead(sensorSalida);
if (buttonState == LOW){
mqttClient.publish("conectado","Imprimir Boleto",2);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(500);
}
if (sensorEntradaState == LOW && sensorEntradaStateOld == HIGH && proceso ==""){
proceso = "A";
//sensorEntradaStateOld =sensorEntradaState;
mqttClient.publish("conectado","SOBRE A",2);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(200);
}
if (sensorSalidaState == LOW && sensorSalidaStateOld == HIGH && proceso =="A"){
proceso = "B";
//sensorSalidaStateOld = sensorSalidaStateOld;
mqttClient.publish("conectado","A-->B SOBRE B",2);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(200);
}
if (sensorSalidaState == HIGH && sensorSalidaStateOld == LOW && proceso =="B"){
proceso ="";
//sensorSalidaStateOld = sensorSalidaStateOld;
mqttClient.publish("conectado","A-->B VEHICULO INGRESO A ESTACIONAMIENTO",2);
entradas = entradas + 1;
Serial.println("Entradas: " + String(entradas));
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(200);
}
//------------------------------------------------------------------------------------------
if (sensorSalidaState == LOW && sensorSalidaStateOld == HIGH && proceso ==""){
proceso = "C";
//sensorEntradaStateOld =sensorEntradaState;
mqttClient.publish("conectado","SOBRE B",2);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(200);
}
if (sensorEntradaState == LOW && sensorEntradaStateOld == HIGH && proceso =="C"){
proceso = "D";
//sensorSalidaStateOld = sensorSalidaStateOld;
mqttClient.publish("conectado","B-->A SOBRE A",2);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(200);
}
if (sensorEntradaState == HIGH && sensorEntradaStateOld == LOW && proceso =="D"){
proceso ="";
//sensorSalidaStateOld = sensorSalidaStateOld;
mqttClient.publish("conectado","B-->A VEHICULO SALIENDO DE ESTACIONAMIENTO",2);
salidas = salidas + 1;
Serial.println("Salidas: " + String(salidas));
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(200);
}
sensorEntradaStateOld =sensorEntradaState;
sensorSalidaStateOld = sensorSalidaState;
}