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

    Domina el Control de Motores DC con Arduino y el Módulo L298N: Guía Fácil y Práctica


    Realmente hoy en dia es bastante asequible obtener módulos ya montados que realicen funciones auxiliares como por ejemplo controlar un motor DC normal o pasa a paso, realmente por un precio irrisorio (en nuestro caso por unos 4 € en Amazon ) . Un ejemplo de este tipo de módulos, son los controladores de motor basados en el L298N ,siendo este uno de los controladores de motores mas usados con microcontroladores y microprocesadores .

    En efecto el Circuito Integrado (CI) L298N es uno de los controladores de motor más populares entre quienes trabajan con proyectos de robótica, automatización y sistemas embebidos. En la imagen superior puede observarse el módulo real, un conjunto compacto que integra el chip L298N acompañado de un gran disipador de calor. Este disipador es necesario porque el circuito puede manejar corrientes relativamente altas (hasta 2A por canal, dependiendo de la disipación térmica), algo habitual al controlar motores de corriente continua (DC) o motores paso a paso. Gracias a esta capacidad, el módulo resulta ideal para aplicaciones con microcontroladores como Arduino, ESP32 o Raspberry Pi, que por sí mismos no pueden suministrar suficiente corriente para mover motores.

    Veamos ahora con mas detalle el esquema electrónico de este circuito:

    El diagrama esquemático mostrado ofrece una visión más profunda del funcionamiento interno:

    • U1 (L298N): Es el núcleo del circuito. Contiene dos puentes H completos, lo que permite controlar de forma independiente dos motores DC o un motor paso a paso bipolar. Cada puente H puede invertir la polaridad aplicada al motor, logrando así el cambio de sentido de giro.
    • Entradas IN1–IN4 y ENA/ENB: Estas entradas reciben las señales lógicas desde el microcontrolador. Los pines IN1–IN4 determinan la dirección del giro de los motores, mientras que ENA y ENB (enable) controlan si cada puente está activo. En muchos módulos, ENA y ENB están conectados a jumpers que pueden retirarse si se desea controlar la velocidad mediante una señal PWM.
    • Salidas OUT1–OUT4: Se conectan directamente a los terminales de los motores. Cada par de salidas (OUT1/OUT2 y OUT3/OUT4) corresponde a uno de los dos puentes H del chip.
    • Diodos D1–D8: Actúan como diodos de protección o “flyback”, un elemento esencial cuando se trabaja con cargas inductivas como motores. Su función es disipar los picos de tensión inversa generados al interrumpir la corriente del motor, protegiendo los transistores internos del L298N.
    • U2 (78M05): Es un regulador lineal de voltaje que convierte la tensión de entrada del módulo (por ejemplo, 12 V) en 5 V, alimentando la lógica del L298N y, opcionalmente, otros componentes del sistema. Algunos módulos permiten activar o desactivar esta función mediante un jumper para usar fuentes externas de 5 V.
    • Condensadores y resistencias: Estos componentes auxiliares estabilizan la alimentación y amortiguan los transitorios eléctricos, garantizando un funcionamiento estable y reduciendo interferencias.

    Este módulo tiene una fuente de alimentación de 5v incorporada, cuando el voltaje de conducción es de 7v-35v,esta fuente es adecuada para la fuente de alimentación. NO ingrese voltaje a la interfaz de suministro de + 5v, sin embargo, el ledding de 5v para uso externo está disponible. Cuando ENA habilita IN1 IN2 control OUT1 OUT2. Cuando ENB habilita IN3 IN4 control OUT3 OUT4

    En conjunto, el esquema y el módulo del L298N ilustran cómo un diseño relativamente sencillo es capaz de combinar potencia y control lógico, ofreciendo una solución robusta y económica para el manejo de motores. Esto lo convierte en un componente indispensable para quienes desarrollan vehículos robóticos, cintas transportadoras, sistemas de control de movimiento o proyectos de automatización casera.

    Ejemplo esquema de cableado básico

    A continuación vamos a ver a un ejemplo práctico de código Arduino, junto con un pequeño esquema de cableado, para controlar un motor DC usando el módulo controlador L298N. Esta combinación es ideal para proyectos de robótica y automatización que requieren mover motores de forma simple y eficiente.

    Conexiones recomendadas entre Arduino, módulo L298N y motor DC:

    • IN1 (L298N) → Pin 7 de Arduino.
    • IN2 (L298N) → Pin 6 de Arduino.
    • ENA (L298N) → Jumper (por defecto, motor a máxima velocidad) o Pin 9 de Arduino si quieres usar PWM para velocidad.
    • OUT1/OUT2 (L298N) → Motor DC.
    • +12V (L298N) → Fuente de 12V para el motor.
    • GND (L298N) → GND de Arduino y de la fuente.
    • 5V (L298N) → No se conecta si tu Arduino ya está alimentado por USB o fuente externa.
       Arduino        L298N           Motor
    ------- ----- -----
    GND ----+--- GND
    | +----+
    +---(-) Fuente | |
    (+) Fuente-----+ M +---- OUT1
    M |
    OUT2------+
    D7 ---------- IN1
    D6 ---------- IN2
    ENA ---------- Jumper (o D9 si usa PWM)

    Ejemplo de código Arduino

    El siguiente sketch enciende el motor en un sentido, espera 2 segundos, invierte el sentido durante otros 2 segundos, y repite el ciclo:

    cpp// Pines de control
    const int IN1 = 7;
    const int IN2 = 6;
    const int ENA = 9; // Opcional, para velocidad con PWM
    
    void setup() {
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(ENA, OUTPUT);
    }
    
    void loop() {
      // Girar motor en un sentido (adelante)
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      analogWrite(ENA, 255); // Velocidad máxima
      delay(2000);
    
      // Detener motor
      analogWrite(ENA, 0);
      delay(500);
    
      // Girar motor en sentido contrario (atrás)
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      analogWrite(ENA, 255); // Velocidad máxima
      delay(2000);
    
      // Detener motor
      analogWrite(ENA, 0);
      delay(500);
    }
    

    Este código básico permite experimentar fácilmente con el control de dirección y velocidad de motores DC usando el L298N y una placa Arduino. Puedes ajustar el pin ENA y el valor de analogWrite para regular la velocidad mediante modulación por ancho de pulso (PWM), retirando el jumper si lo tuviese puesto.​