ESPurna: La «Chispa» Open-Source para Domótica con ESP32


ESPurna, palabra catalana y valenciana que significa «chispa» —una partícula incandescente de combustión o roce, o figurativamente una pequeña cantidad o persona ingeniosa—, adquiere nuevo sentido como firmware open-source para ESP8266 y ESP32. Desarrollado inicialmente por Xose Pérez y adaptado para ESP32 en forks como RDobrinov/espurna32, transforma placas económicas en hubs IoT para interruptores, luces y sensores. Soporta MQTT con auto-descubrimiento, Alexa, Google Assistant, modos de bajo consumo, hasta 5 redes WiFi, mDNS, NetBIOS y OTA vía web, ideal para domótica avanzada.​

esp8266 a6f

Características Destacadas de ESPurna

ESPurna gestiona switches con botones digitales/analógicos, pulsos configurables, sincronización de relés (todos iguales, solo uno ON) y estados al boot (ON/OFF/toggle). Incluye luces con color/brightness, sensores de potencia (voltaje, corriente, energía), temperatura/humedad (DHT, BME280), y LED notificadores para WiFi/relés/MQTT. Ofrece REST API para relays/sensores, backup/restore, AP/STA WiFi con IP estático, y protección contra KRACK en Arduino Core >=2.4.0; botones permiten toggle, AP mode (doble click), reboot (largo) o factory reset (extra largo).​

Preparación del Entorno con PlatformIO

PlatformIO en VSCode es la herramienta oficial para compilar ESPurna ESP32, gestionando Arduino-ESP32 core, lib_deps como FauxmoESP, AsyncTCP, MQTT y sensores.

Estos son los pasos resumidos para instalar el entorno:

  • Instala VSCode desde code.visualstudio.com, añade extensión PlatformIO IDE (marketplace)
  • Clona git clone https://github.com/RDobrinov/espurna32.git vía terminal (Terminal > New Terminal),
  • Aabre la carpeta con File > Open Folder.
  • PlatformIO detecta platformio.ini automáticamente
  • Descarga dependencias;
  • Edita para default_envs = esp32dev, board = esp32dev, framework = arduino, upload_speed = 921600,
  • Compila con icono check (Build).
  • Verifica logs en terminal para errores;
  • Reinicia VSCode o pio lib install si faltan paquetes.​

Instalación Paso a Paso en ESP32

Requisitos: Cable USB, drivers CH340/CP210x, esptool.py (pip install esptool). Pon ESP32 en bootloader (BOOT/GPIO0 a LOW al resetear/alimentar); verifica esptool.py --chip esp32 --port /dev/ttyUSB0 chip_id.​

  • Borrado: esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash.
  • Flasheo: esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash -z 0x1000 espurna-esp32.bin (binario de releases).​
  • Alternativa PlatformIO: Build exitoso > Upload; Arduino IDE requiere boards ESP32 y abrir espurna.ino.​

Post-instalación: Conéctate a AP «espurna-XXXXXX» (pass: espurna123), accede 192.168.4.1 para WiFi/MQTT/OTA; soporta reverse proxy seguro.​

Integración con Home Assistant vía MQTT

Configura MQTT en web ESPurna (broker IP/usuario/pass/puerto 1883) y activa «Home Assistant MQTT Discovery» para auto-publicación de switches/luces/sensores. En HA: Añade integración MQTT (Configuración > Integraciones > MQTT), conecta broker (Mosquitto recomendado para retain y estabilidad). Dispositivos aparecen automáticamente vía topics homeassistant/switch/[device]/config; controla relés, mide potencia/RGB sin YAML. Evita «unavailable» en reinicios HA con retain flags; ideal para energy dashboards.​

ESPurna vs. ESPHome: Comparativa Detallada

AspectoESPurna​ESPHome ​
ConfiguraciónCompilación hardware-específica, web intuitivaYAML declarativo, compilación automática
Integración HAMQTT Discovery robusto, topics estándarNativa profunda, zero-config en HA
Facilidad de UsoAvanzados: control firmware detalladoPrincipiantes: automatizaciones rápidas
Soporte HardwareAmplio (sensores, relés, Alexa/Google/OTA)HA-optimizado, actualizaciones fluidas
PersonalizaciónEdición código, REST APIConfig centralizada, sin código directo
Curva AprendizajePronunciada por compilación manualBaja, ideal domótica compleja

ESPurna brilla en versatilidad MQTT y soporte multi-plataforma para expertos en IoT/hardware, mientras ESPHome prioriza simplicidad HA. Prueba ESPurna si buscas personalización profunda en ESP32 para NILM o sensores energéticos.​

    https://github.com/RDobrinov/espurna32

    Nueva plataforma IoT de código abierto


    Existen numerosos protocolos y formatos de datos de IoT, ,algunos de ellos son más populares, como MQTT y JSON, y algunos otros  son   «bastante raros». Normalmente la mayoría de las plataformas IoT brindan soporte para los protocolos y formatos de datos más populares desde el primer momento, pero es difícil respaldar a todos en una sola solución.

    Con el crecimiento de la comunidad de código abierto de la plataforma Thingsboard, ha comenzado a recibir solicitudes sobre el soporte de protocolos IoT, como OPC-UA y algunos formatos de datos específicos, de modo que también han decidido implementar esta funcionalidad como un proyecto separado de código abierto que  permitirá unir la plataforma API a, literalmente, cualquier dispositivo.

    El diagrama de flujo de datos es el siguiente

    thingsboard

     

    IoT Gateway está construido sobre Java, pero es diferente de proyectos similares que aprovechan la tecnología OSGi pues la idea es similar a una arquitectura de microservicios. Después de todo, hay otros lenguajes de programación (C, C ++, Python, Javascript, Go, etc.) que pueden ser más adecuados para el desarrollo de aplicaciones para dispositivos de IoT de destino, especialmente cuando hablamos de API de idiomas y bibliotecas existentes para trabajar con puertos serie , GPIO, I2C y nuevos módulos y sensores que se lanzan todos los días.

    El Gateway proporciona API’s  de integración simples y encapsula tareas comunes relacionadas con el tablero de tareas: aprovisionamiento de dispositivos, persistencia y entrega de datos locales, conversores / adaptadores de mensajes, y más.

    Como desarrollador de aplicaciones, puede elegir Python, Go, C / C ++ y otros idiomas y conectarse a la puerta de enlace de Thingsboard a través de un intermediario MQTT externo o un servidor OPC-UA. Los dispositivos que admiten otros protocolos se pueden conectar a la puerta de enlace implementando extensiones personalizadas.

    La puerta de enlace IoT de Thingsboard ofrece las siguientes características:

    • Extensión OPC-UA para recopilar datos de dispositivos que están conectados a servidores OPC-UA.
    • Extensión MQTT para recopilar datos que se publican en intermediarios MQTT externos.
    • Persistencia de los datos recopilados para garantizar la entrega de datos en caso de fallas de red y hardware.
    • La reconexión automática a los grupos de tableros de cartón.
    • Mapeo simple pero poderoso de los datos y mensajes entrantes en un formato unificado.

    El objetivo de lanzamiento inicial de Gateway es llevar la función de recopilación de datos de Bagsboard a dispositivos compatibles con OPC-UA y MQTT. El proyecto Gateway se encuentra actualmente en la etapa de desarrollo activo, y debemos esperar  a los lanzamientos de características principales en los próximos  meses pero el objetivo es unir todas las demás características de Panel de pruebas y permitir configurar y administrar dispositivos de IoT a través de la puerta de enlace usando los widgets y paneles de control de Thingsboard.

     

    En este post vamos  a ver como  recopilar y visualizar algunos datos del dispositivo IoT con ThingsBoard permitiendo :

    • Registrar  su dispositivo IoT
    • Administrar credenciales del dispositivo
    • Mandar  los datos del dispositivo a su instancia de ThingsBoard utilizando los protocolos MQTT, CoAP o HTTP
    • Crear un tablero para visualizar los datos

    Configuración y requisitos

    Si no tiene acceso a una instancia de ThingsBoard en ejecución, use Live Demo o la Guía de instalación para solucionar esto.

    Todas las instalaciones de ThingsBoard están equipadas con una cuenta de demostración que simplifica la experiencia del primer usuario. Esta cuenta demo contiene varios dispositivos, cuadros de mando, reglas y complementos preaprovisionados instalados. Tenga en cuenta que puede eliminar esta cuenta en la implementación de producción.

    También puede usar emuladores de dispositivo ThingsBoard para simular dispositivos de la vida real y jugar con las API del lado del servidor, la visualización de datos y la lógica de procesamiento.

    En este  ejemplo  solo utilizaremos una cuenta de administrador de inquilino preaprovisionada y como hardware una Raspberry Pi 3.

    Iniciar sesión como administrador de inquilinos

    El primer paso es iniciar sesión en la interfaz de usuario web de administración.

    Si está utilizando la instalación local de ThingsBoard, puede iniciar sesión en la interfaz de usuario web de administración utilizando la cuenta predeterminada:

    Si usa Live Demo, puede iniciar sesión en el servidor Live Demo utilizando la cuenta de administrador del inquilino (la que creó durante el registro).

    imagen

    Abra el panel Dispositivos y haga clic en el botón «+» en la esquina inferior derecha de la página.

    imagen

    Rellene y guarde el nombre del dispositivo (por ejemplo, «SN-001») aunque más adelante se le llamará $ DEVICE_NAME.

    Como los nombres de dispositivo deben ser únicos, por lo general es una buena idea llamar al nombre del dispositivo según un número de serie único u otro identificador de dispositivo. Haga clic en el botón «Agregar» agregará la tarjeta del dispositivo correspondiente al panel.

    imagen

    Haga clic en la «tarjeta del dispositivo» que hemos creado en el paso anterior. Esta acción abrirá el panel de «detalles del dispositivo».

    Haga clic en el botón «administrar credenciales» en la parte superior del panel. Esta acción abrirá una ventana emergente con credenciales del dispositivo.

    imagen

    La ventana de credenciales del dispositivo mostrará el token de acceso al dispositivo generado automáticamente que puede cambiar. Guarde este token de dispositivo. Más tarde se lo llamará $ ACCESS_TOKEN .

    imagen

    ¡Felicitaciones! ¡Acaba de aprovisionar su primer dispositivo! Ahora puede enviar algunos datos de este dispositivo a ThingsBoard para su visualización y análisis.

    Envío de datos

    Para simplificar   enviaremos datos utilizando el protocolo MQTT, CoAP o HTTP desde su PC local.Consulte otros  ejemplos para ejemplos avanzados de varias plataformas de hardware.

    Ahora  que ya  tiene creado las credenciales  del   dispositivo ,iInstale el cliente preferido MQTT (Mosquitto o MQTT.js), CoAP (CoAP.js) o HTTP (cURL) con los siguientes comandos.

    resources/node-mqtt.sh 
    # Assuming you have Node.js and NPM installed on your Windows/Linux/MacOS machine npm install mqtt -g

    Cree una carpeta para almacenar todos los archivos necesarios para este ejemplo y descargue a esta carpeta o cree los siguientes archivos de datos:

    • attributes-data.json – contiene dos valores de atributos del dispositivo: la versión del firmware y el número de serie.
    • telemetry-data.json – contiene tres valores de series temporales: temperatura, humedad y bandera activa.

    Tenga en cuenta que los datos en estos archivos están básicamente en formato de clave-valor. Puede usar sus propias claves y valores. Consulte la referencia de protocolo MQTT , CoAP o HTTP para obtener más detalles.

    resources/attributes-data.json 
    { "firmware_version" : "1.0.1" ,   "serial_number" : "SN-001" } 
    

    Envio de  datos usando MQTT, CoAP o HTTP

    Descargue los siguientes archivos a la carpeta creada previamente de acuerdo con el cliente preferido:

    Si está utilizando un script de shell (* .sh), asegúrese de que sea ejecutable:

    chmod +x * .sh

    Antes de ejecutar el script, no olvide:

    • reemplace $ ACCESS_TOKEN por uno de la ventana Credenciales del dispositivo .
    • reemplace $ THINGSBOARD_HOST con 127.0.0.1 (en caso de instalación local) o demo.thingsboard.io (en caso de live-demo).

    Finalmente, ejecute el script * .sh o * .bat correspondiente para enviar datos al servidor.

    A continuación en estos enlaces  esta  el contenido de los scripts proporcionados.

    resources/mqtt-js.sh 
    #!/bin/sh # Set ThingsBoard host to "demo.thingsboard.io" or "localhost" export THINGSBOARD_HOST = demo.thingsboard.io # Replace YOUR_ACCESS_TOKEN with one from Device credentials window. export ACCESS_TOKEN = YOUR_ACCESS_TOKEN # Read serial number and firmware version attributes ATTRIBUTES = $( cat attributes-data.json ) export ATTRIBUTES # Read timeseries data as an object without timestamp (server-side timestamp will be used) TELEMETRY = $( cat telemetry-data.json ) export TELEMETRY # publish attributes and telemetry data via mqtt client node publish.js

    Visualización de los datos del dispositivo en la interfaz de usuario web

    Una vez que ejecute los comandos enumerados arriba, debería ver los atributos y los últimos datos de telemetría en las pestañas de detalles correspondientes del dispositivo.

    imagen

    imagen

    Crear un nuevo tablero para visualizar los datos

    La forma más fácil de crear un nuevo tablero es seleccionar los atributos del dispositivo y mostrarlos en el widget

    imagen

    Una vez que haga clic en el botón «Mostrar en el widget», verá un panel de «vista previa del widget» donde puede

    • Seleccionar paquete de widgets
    • Seleccione el widget preferido
    • Agregar widget al panel nuevo o existente

    imagen

    Agreguemos nuestro primer widget al nuevo tablero llamado «SN-001 Dashboard»

    imagen

    Agreguemos  también un widget para visualizar la temperatura:

    imagen

    Haga clic en Mostrar en el widget y seleccione Paquete de indicadores digitales . Use el carrusel para seleccionar el widget del termómetro como se muestra a continuación.

    imagen

    Tenga en cuenta que en este caso, agregaremos un widget a un panel ya existente. También seleccionaremos la opción «Open dashboard» para ver los resultados de nuestro trabajo.

    imagen

    Finalmente, podemos ver nuestro nuevo tablero.

    Ahora podemos editar el tablero para:

    • Configurar la configuración del tablero
    • Ajustar tamaños de widgets y diseño
    • Modificar la configuración avanzada del widget individual
    • Agregue nuevos widgets o elimine los existentes
    • Widgets de importación / exportación

    imagen

    Mas info en https://thingsboard.io/docs/getting-started-guides/helloworld/