{"id":28755829,"url":"https://github.com/eggr7/mqtt-wildcards","last_synced_at":"2026-04-09T20:40:17.832Z","repository":{"id":292579385,"uuid":"963518818","full_name":"eggr7/mqtt-wildcards","owner":"eggr7","description":"Real-time monitoring and control of temperature, humidity, and LEDs across multiple ESP32s using MQTT wildcards and an interactive web interface.","archived":false,"fork":false,"pushed_at":"2025-05-16T20:37:15.000Z","size":17,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-28T06:34:58.398Z","etag":null,"topics":["esp32","micropython","mqtt","wildcards"],"latest_commit_sha":null,"homepage":"https://robertobrizuela.github.io/mqtt-wildcards/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eggr7.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-09T20:00:20.000Z","updated_at":"2025-05-16T20:37:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"818ca474-3e15-47f5-9355-c57d1c27be6b","html_url":"https://github.com/eggr7/mqtt-wildcards","commit_stats":null,"previous_names":["robertobrizuela/mqtt-wildcards","eggr7/mqtt-wildcards"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eggr7/mqtt-wildcards","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eggr7%2Fmqtt-wildcards","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eggr7%2Fmqtt-wildcards/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eggr7%2Fmqtt-wildcards/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eggr7%2Fmqtt-wildcards/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eggr7","download_url":"https://codeload.github.com/eggr7/mqtt-wildcards/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eggr7%2Fmqtt-wildcards/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260281521,"owners_count":22985623,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esp32","micropython","mqtt","wildcards"],"created_at":"2025-06-17T03:00:59.872Z","updated_at":"2026-04-09T20:40:12.762Z","avatar_url":"https://github.com/eggr7.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Monitor MQTT con Wildcards en ESP32\n\n## Descripción del Proyecto\n\nEste proyecto consiste en un sistema de monitorización y control de temperatura, humedad y LEDs utilizando placas ESP32, el sensor DHT22 y el protocolo MQTT. La información de temperatura y humedad es publicada por cada ESP32 a un broker MQTT, y una interfaz web muestra los datos en tiempo real y permite encender o apagar un LED LED conectado a cada ESP32.\n\nCon la implementación de wildcards (`+` y `#`) en los tópicos MQTT, la interfaz web puede suscribirse de manera eficiente a múltiples dispositivos sin necesidad de modificar el código para cada nuevo ESP32.\n\n## Requisitos del Sistema\n\n### Hardware\n\n* 1 o más placas **ESP32**\n* Sensor **DHT22** (por cada ESP32)\n* LED y resistencia de 220 Ω (por cada ESP32)\n* Conexión WiFi\n\n### Software\n\n* **MicroPython** en las ESP32\n* Biblioteca **umqtt.simple** para MQTT en MicroPython\n* **Broker MQTT** (p.ej. `broker.emqx.io`)\n* Navegador moderno con soporte WebSockets\n* Librerías JavaScript: `mqtt.js`, `Chart.js`\n\n## Instrucciones de Uso\n\n1. **Clonar o descargar** este repositorio:\n\n   ```bash\n   git clone https://github.com/robertobrizuela/mqtt-wildcards.git\n   cd mqtt-wildcards\n   ```\n\n2. **Configurar las ESP32**:\n\n   * Edita `main.py` en MicroPython:\n\n     ```python\n     DEVICE_ID = \"esp32_1\"  # Cambiar para cada ESP32: esp32_2, esp32_3, ...\n     BASE_TOPIC = \"sensores\"\n     TOPIC_TEMP = f\"{BASE_TOPIC}/{DEVICE_ID}/temperatura\"\n     TOPIC_HUM  = f\"{BASE_TOPIC}/{DEVICE_ID}/humedad\"\n     TOPIC_LED  = f\"{BASE_TOPIC}/{DEVICE_ID}/led\"\n     ```\n   * Sube el script a la ESP32 y verifica en MQTTX que publique en `sensores/esp32_1/#`.\n\n3. **Desplegar la interfaz web**:\n\n   * Abre `index.html` en un servidor estático (GitHub Pages, Netlify, ...).\n   * Asegúrate de que `script.js` y `style.css` estén accesibles.\n\n4. **Visualizar y controlar**:\n\n   * La página web se suscribirá automáticamente a `sensores/+/temperatura` y `sensores/#`.\n   * Los datos de cada ESP32 aparecerán en tarjetas dinámicas.\n   * Usa los botones `LED ON` / `LED OFF` de cada tarjeta para enviar comandos.\n\n## Ejemplos de Uso\n\n* **Simular un segundo ESP32** desde la consola del navegador:\n\n  ```js\n  const sim = mqtt.connect(\"wss://broker.emqx.io:8084/mqtt\");\n  sim.on(\"connect\", () =\u003e {\n    setInterval(() =\u003e {\n      const d = { temperatura: 26 + Math.random()*4, humedad: 45 + Math.random()*10 };\n      const payload = JSON.stringify(d);\n      sim.publish(\"sensores/esp32_2/temperatura\", payload);\n      sim.publish(\"sensores/esp32_2/humedad\", payload);\n    }, 5000);\n  });\n  ```\n\n* **Suscripción detallada** en MQTTX:\n\n  * `sensores/+/temperatura` → recibe solo temperaturas de todos los ESP32.\n  * `sensores/#` → recibe todos los eventos (temperatura, humedad y LED) de todos los ESP32.\n\n## Detalles Técnicos\n\n* **Wildcards MQTT**:\n\n  * `+` sustituye un nivel de tópico: `sensores/+/temperatura` captura `sensores/esp32_1/temperatura`, `sensores/esp32_2/temperatura`, etc.\n  * `#` sustituye múltiples niveles: `sensores/#` captura cualquier publicación bajo `sensores/`.\n\n* **Interfaz Web**:\n\n  * Utiliza **mqtt.js** para conectar vía WebSockets.\n  * Renderiza datos en **Chart.js** y crea tarjetas dinámicas por `deviceId`.\n\n## Ventajas de los wildcards\n\n1. **Sin wildcards**: Se requería una suscripción por cada ESP32:\n\n   ```text\n   client.subscribe('sensores/esp32_1/temperatura');\n   client.subscribe('sensores/esp32_2/temperatura');\n   // ...\n   ```\n\n2. **Con wildcards**: Una sola suscripción cubre todos:\n\n   ```text\n   client.subscribe('sensores/+/temperatura');\n   client.subscribe('sensores/#');\n   ```\n\n## Diagrama del funcionamiento:\n\n   ![image](https://github.com/user-attachments/assets/991cb88b-4b39-4e37-ad01-12b9eb87fdb8)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feggr7%2Fmqtt-wildcards","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feggr7%2Fmqtt-wildcards","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feggr7%2Fmqtt-wildcards/lists"}