#include // Librería WiFi #include // Librería para el protocolo MQTT #include // Librería NeoPixel // Configuración WiFi const char* ssid = "CHAYITOPOWER"; const char* password = "CHIHUAY123"; // Configuración MQTT const char* mqttServer = "broker.emqx.io"; const char* mqttClient = "grullas"; const char* mqttTopicPub = "fabacademy/neopixel"; // Tema de publicación WiFiClient espClient; PubSubClient client(espClient); // Configuración de NeoPixel #define SENSOR_PIN A0 // Pin del sensor IR #define NEOPIXEL_PIN 4 // Pin de datos para el NeoPixel (ajustado al pin 4) #define NUM_PIXELS 1 // Solo un LED #define BRILLO 255 // Brillo máximo Adafruit_NeoPixel strip(NUM_PIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800); // Variables para el control de tiempo y estados int varNum = 0; long nowTime, lastTime; String status = "off"; // Estado inicial del LED void setup() { Serial.begin(115200); // Conectar a WiFi Serial.print("Conectando a WiFi "); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" Conectado"); Serial.println("IP: " + WiFi.localIP().toString()); // Conectar a MQTT client.setServer(mqttServer, 1883); connectMQTT(); // Inicializar el NeoPixel strip.begin(); strip.show(); // Apagar el LED al inicio // Configurar pin del sensor IR pinMode(SENSOR_PIN, INPUT); } void connectMQTT() { Serial.print("Conectando a servidor MQTT ... "); while (!client.connected()) { if (client.connect(mqttClient)) { Serial.println("Conectado"); } else { Serial.print("fallo, rc="); Serial.print(client.state()); Serial.println(" Reintentando en 5 segundos"); delay(5000); } } client.subscribe(mqttTopicPub); // Suscribirse al tema (si es necesario) } void loop() { if (!client.connected()) { connectMQTT(); } client.loop(); nowTime = millis(); // Enviar un mensaje cada 5 segundos if (nowTime - lastTime > 5000) { lastTime = nowTime; varNum = varNum + 1; // Alternar entre "on" y "off" según el contador if (varNum % 2) { status = "on"; } else { status = "off"; } char numString[8]; strncpy(numString, status.c_str(), sizeof(numString)); Serial.print("Variable numérica: "); Serial.println(varNum); client.publish(mqttTopicPub, numString); // Publicar el estado del LED } // Leer el valor del sensor IR int estado = digitalRead(SENSOR_PIN); if (estado == LOW) { // Si el sensor detecta un obstáculo, enciende el LED Serial.println("¡Obstáculo detectado!"); strip.setPixelColor(0, strip.Color(255, 0, 0)); // LED rojo strip.show(); client.publish(mqttTopicPub, "on"); // Publicar estado "on" } else { // Si no hay obstáculo, apaga el LED Serial.println("Sin obstáculo."); strip.setPixelColor(0, strip.Color(0, 0, 0)); // Apagar LED strip.show(); client.publish(mqttTopicPub, "off"); // Publicar estado "off" } delay(1000); // Espera medio segundo antes de la siguiente lectura }