Proyecto para conectar un dispositivo Arduino (ESP32/8266) a un servidor MQTT para publicación y recepción de telemetría e instrucciones.
Servidor Node.js con Socket.io para la sincronización de los eventos de MQTT mediante WebSockets.
Cliente conectado a los WebSockets para enviar y recibir datos desde el Arduino.
- ESP32 DevKit (probado en NodeMCU ESP32)
- Potenciómetro (conectado a pin analógico)
- Botón pulsador (pull-down)
- LED compatible con PWM
- Arduino IDE o PlatformIO
- Docker y Docker Compose (para el broker MQTT)
- Node.js (para el servidor Socket.io - pendiente de implementar)
- MQTTX (opcional) - Cliente MQTT con GUI para testing
PubSubClient- Cliente MQTTArduinoJson(v7.x) - Serialización/deserialización JSONWiFiManager- Configuración WiFi por portal cautivoWiFi- Conectividad WiFi ESP32
Pines ESP32 (NodeMCU DevKit):
GPIO 36 (ADC1_CH0) → Potenciómetro (entrada analógica)
GPIO 19 → Botón pulsador (INPUT_PULLDOWN)
GPIO 32 → LED PWM (salida analógica)
GPIO 2 (LED_BUILTIN) → LED integrado
Nota: Ajusta los pines en
arduino/sketch/sketch.ino(líneas 18-20) según tu configuración de hardware.
Edita la IP del servidor MQTT en arduino/sketch/sketch.ino (línea 9):
const char* mqtt_server = "192.168.0.6"; // Cambiar a la IP de tu brokercd mqtt
docker-compose up -dEl broker estará disponible en:
- Puerto 1883: MQTT estándar
- Puerto 9001: MQTT sobre WebSockets
Al encender el ESP32 por primera vez:
- Se creará un Access Point llamado "AutoConnectAP" (password:
password) - Conéctate a esta red desde tu móvil/PC
- Se abrirá un portal cautivo para configurar las credenciales WiFi
- Una vez configurado, el ESP32 se conectará automáticamente
.
├── arduino/
│ └── sketch/
│ └── sketch.ino # Firmware ESP32
├── mqtt/
│ ├── docker-compose.yml # Configuración Docker Mosquitto
│ ├── config/
│ │ └── mosquitto.conf # Configuración del broker
│ ├── data/ # Datos persistentes MQTT
│ └── log/ # Logs del broker
└── README.md
iot_status: Telemetría del Arduino → Brokeriot_commands: Comandos Broker → Arduino
Telemetría (publicada por Arduino):
// Potenciómetro (0-100%)
{"component": "pot", "value": 75}
// Botón pulsador
{"component": "button", "value": true}Comandos (suscritos por Arduino):
// LED integrado (ON/OFF)
{"component": "led1", "value": true}
// LED PWM (0-100%)
{"component": "led2", "value": 80}MQTTX es un cliente MQTT multiplataforma con interfaz gráfica que facilita el testing.
Configuración de conexión:
Name: Arduino IoT
Host: mqtt://
Port: 1883
Client ID: mqttx_client (o cualquier ID único)
Suscribirse a telemetría:
- Topic:
iot_statuso#(todos los topics)
Enviar comandos:
- Topic:
iot_commands - Payload ejemplos:
{"component":"led1","value":true} {"component":"led2","value":75}
Monitorear mensajes:
Suscribirse a todos los topics:
docker exec -it mqtt-mosquitto-1 mosquitto_sub -t '#' -vSuscribirse solo a telemetría:
docker exec -it mqtt-mosquitto-1 mosquitto_sub -t 'iot_status'Enviar comandos:
Encender LED integrado:
docker exec -it mqtt-mosquitto-1 mosquitto_pub -t 'iot_commands' \
-m '{"component":"led1","value":true}'Controlar LED PWM al 50%:
docker exec -it mqtt-mosquitto-1 mosquitto_pub -t 'iot_commands' \
-m '{"component":"led2","value":50}'cd mqtt
docker-compose downdocker-compose logs -f- Implementar servidor Node.js con Socket.io
- Crear cliente web para control y monitoreo
- Agregar autenticación MQTT
- Persistencia de datos históricos