#include <WiFi.h>
#include "PubSubClient.h"
WiFiClient esp32Client;
PubSubClient mqttClient(esp32Client);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqttServer = "broker.emqx.io";
const char* clientID = "esp32_receptor";
int port = 1883;
const int pinBuzzer = 2; // GPIO2 (o el pin que prefieras)
int var = 0;
String resultS = "";
int fotoval = 0;
int muestras[20];
int numMuestras = 0;
int sumaMuestras = 0;
int nivelDeseado = 0; // Ejemplo de nivel deseado
bool alarmaActivada = false;
void setup_wifi() {
delay(20);
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Wifi conectado");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mensaje recibido [");
Serial.print(topic);
Serial.print("] ");
char payload_string[length + 1];
int resultI;
memcpy(payload_string, payload, length);
payload_string[length] = '\0';
resultI = atoi(payload_string);
var = resultI;
resultS = "";
for (int i=0;i<length;i++) {
resultS= resultS + (char)payload[i];
}
Serial.print("Valor fotoresistencia: ");
Serial.println(resultS);
muestras[numMuestras] = resultS.toInt();
numMuestras++;
if (numMuestras >= 5) {
// Calcular el promedio de las muestras
sumaMuestras = 0;
for (int i = 0; i < 20; i++) {
sumaMuestras += muestras[i];
}
int promedio = sumaMuestras / 20;
Serial.print("Promedio: ");
Serial.println(promedio);
// Verificar si el promedio supera el nivel deseado
if (promedio >= nivelDeseado && !alarmaActivada) {
// Activar la alarma (encender el buzzer)
digitalWrite(pinBuzzer, HIGH);
alarmaActivada = true;
Serial.println("Alarma activada!");
}
}
}
void reconnect(){
while(!mqttClient.connected()){
Serial.print("intentando conexion a MQTT ...");
if(mqttClient.connect(clientID)){
Serial.println("conectado..");
mqttClient.subscribe("SALIDA/01");
Serial.println("suscrito al tema");
}
else{
Serial.print("Fallo, rc=");
Serial.print(mqttClient.state());
Serial.print("intentara en 5 segundos");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
mqttClient.setServer(mqttServer,port);
mqttClient.setCallback(callback);
pinMode(pinBuzzer, OUTPUT); // Configura el pin del buzzer como salida
}
void loop() {
if (!mqttClient.connected()){
reconnect();
}
mqttClient.loop();
delay(1000);
}