#include <WiFi.h>
#include <Adafruit_MQTT.h>
#include <Adafruit_MQTT_Client.h>
// Configuración Wi-Fi
#define WIFI_SSID "TU_SSID"
#define WIFI_PASSWORD "TU_PASSWORD"
// Configuración Adafruit IO
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "TU_USUARIO"
#define AIO_KEY "TU_CLAVE"
// Pines del sistema
#define POT_PIN 34 // Potenciómetro (entrada analógica)
#define TRIG_PIN 12 // Trig del sensor ultrasónico
#define ECHO_PIN 14 // Echo del sensor ultrasónico
#define LED_R 25 // Rojo del LED RGB
#define LED_G 26 // Verde del LED RGB
#define LED_B 27 // Azul del LED RGB
// Clientes MQTT
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// Feeds de Adafruit IO
Adafruit_MQTT_Subscribe ledControl = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led");
Adafruit_MQTT_Publish ledFeedback = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/feedback");
// Variables del sistema
int potValue = 0;
float distance = 0;
int ledColorAdafruit = 0;
void setup() {
// Configuración de pines
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
// Inicia Serial
Serial.begin(115200);
// Configuración Wi-Fi
Serial.print("Conectando a WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Conectado!");
// Conectar a Adafruit IO
mqtt.subscribe(&ledControl);
}
void loop() {
// Conectar a Adafruit IO si es necesario
if (mqtt.connected() == false) {
reconnect();
}
mqtt.processPackets(10);
mqtt.ping();
// Leer datos del potenciómetro
potValue = analogRead(POT_PIN); // Valores entre 0 y 4095 (para ESP32)
int ledRed = map(potValue, 0, 4095, 0, 255);
// Leer datos del sensor ultrasónico
distance = readUltrasonic();
int ledGreen = map(distance, 0, 100, 0, 255); // Limitar distancia a 100cm
// Leer datos desde Adafruit IO
MQTT_ping();
if (ledControl.lastread) {
ledColorAdafruit = atoi((char *)ledControl.lastread);
}
int ledBlue = map(ledColorAdafruit, 0, 1023, 0, 255);
// Controlar LED RGB
analogWrite(LED_R, ledRed);
analogWrite(LED_G, ledGreen);
analogWrite(LED_B, ledBlue);
// Enviar datos de retroalimentación
ledFeedback.publish(potValue);
delay(100);
}
float readUltrasonic() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
float duration = pulseIn(ECHO_PIN, HIGH);
return (duration / 2) / 29.1; // Distancia en cm
}
void reconnect() {
while (!mqtt.connected()) {
Serial.print("Conectando a Adafruit IO...");
if (mqtt.connect()) {
Serial.println("Conectado!");
mqtt.subscribe(&ledControl);
} else {
Serial.print("Fallo, rc=");
Serial.print(mqtt.connectErrorString());
Serial.println(" Intentando de nuevo...");
delay(5000);
}
}
}