Puesta en funcionamiento

Esta sección describe como realizar una primera prueba del programador de sin necesidad de montar toda la electrónica y así poder ver el funcionamiento.

Para realizar esta prueba sólo se necesita lo siguiente:

  • Una placa ESP32-C3 Supermini o similar.

  • Una instalación disponible de un broker MQTT, por ejemplo Mosquitto

  • Una instalación de HomeAssistant

Los pasos son los siguientes:

  1. Cargar el firmware precompilado en la placa ESP32-C3.

  2. Configurar la red Wifi y el servidor MQTT mediante la consola serie.

  3. Configurar HomeAssistant importando el panel de control en formato de YAML desde el navegador Web.

Firmware

En el repositorio de GitHub o en la sección Material y referencias están disponibles algunas versiones del firmware precompilado. El firmware precompilado se puede programar con el software esptool de Espressif. Para programarlo se puede usar directamente esptool o el script de programación que se incluye en el repositorio esp-upload.sh. Este script de programación también está incluido con el fichero comprimido (ZIP) del firmware.

Nota

Las instrucciones mostradas son para el sistema operativo GNU/Linux. Para otros sistemas operativos se debe adaptar el comando de programación.

Los pasos son los siguientes:

  1. Descargar una versión de esptool .

  2. Descomprimir el fichero ZIP del firmware disponible en la sección Firmware

  3. Conectar la placa ESP32-C3 Supermini al puerto USB del ordenador.

  4. Desde el directorio donde se descomprimió el firmware, ejecutar el script de programación de la siguiente forma: bash esp-upload.sh

Alternativamente, si se desea realizar la programación con esptool directamente, se debe ejecutar de la siguiente forma:

esptool --chip esp32c3 --port "/dev/ttyACM0" --baud 921600  \
  --before default_reset --after hard_reset write_flash \
  -z --flash_mode dio --flash_freq 80m --flash_size 4MB \
  0x0 "riego.ino.bootloader.bin" \
  0x8000 "riego.ino.partitions.bin" \
  0xe000 "boot_app0.bin" \
  0x10000 "riego.ino.bin"

Consola

Una vez cargado el firmware en la placa ESP32-C3 se habilita en el puerto serie /dev/ttyACM0 una consola con un menú de configuración. Con este menú es posible configurar la red Wifi, el servidor MQTT y guardar la configuración en la memoria no-volátil del microcontrolador.

Para conectar a la consola puede usar cualquier terminal serie con la siguiente configuración:

  • 115200 baudios

  • 8 bits de datos

  • Sin paridad

  • 1 bit de parada

Para que se admitan los comandos, en el programa terminal serie tiene que configurar como terminador de línea en salto de línea: \n (nueva línea). Enviando un salto de línea por el terminal aparece el menú de configuración . En el siguiente vídeo se muestra la conexión desde el monitor serie del entorno Arduino:

Ejemplo de conexión serie y menú de configuración

Mediante la configuración por consola se puede hacer lo siguiente:

  • Configuración de la red Wifi.

  • Configuración del servidor MQTT.

  • Borrar toda la configuración y programación almacenada en la memoria no-volátil (NVS).

Hay que configurar la red Wifi y el servidor MQTT para que HomeAssistant detecte y añada el dispositivo automáticamente. Usando la consola serie siga los pasos siguientes:

  1. Envie un salto de línea intro para ver el menú.

  2. Envíe el caracter w e intro para configurar la red Wifi. Configure al menos una red.

  3. Envíe el caracter m e intro para configurar el servidor MQTT: usuario, contraseña y dirección IP/Nombre.

  4. Envíe el caracter s e intro para guardar los cambios en la memoria NVS.

  5. Envíe el caracter r e intro para reiniciar la placa.

HomeAssistant

HomeAssistant detectará automáticamente el programador sólo si la integración MQTT está configurada correctamente. Revise en su instalación de HomeAssistant la siguiente configuración:

  • En HomeAssistant acceda al menú: AjustesDispositivos y serviciosIntegracionesAñadir integraciónMQTT.

  • Asegurarse de que la integración MQTT está configurada y funcionando correctamente.

Si la configuración de red del programador es correcta, el sistema MQTT-discovery de HomeAssistant automatiza parte del proceso de configuración. Con este método el programador debe aparecer en el listado de dispositivos de la integración MQTT de HomeAssistant.

Aunque el dispositivo se añade automáticamente, no se auto-configura ningún panel de control. En este proyecto se incluye un fichero de configuración YAML correspondiente a un dashboard completo. Este panel de control hay que importarlo manualmente desde la interfaz Web de HomeAssistant siguiendo los siguientes pasos.

  1. En HomeAssistant ir al menú y pulsar el botón indicado: AjustesPaneles de control

  2. Pulsar el botón Añadir panel de control y seleccionar Nuevo panel de control desde cero

  3. Tras crearlo, seleccionarlo en el menú izquierdo de HomeAssistant y ponerlo en edición mediante el botón editar situado en la parte superior derecha.

  4. Después de entrar en modo edición, seleccionar en el menu superior izquierdo Editor de configuración en bruto

  5. Copiar y pegar el contenido del fichero dashboard.yaml en el editor de configuración en bruto. El contenido se muestra a continuación, también puede descargarlo y abrirlo con un editor de texto.

Configuración del panel de control dashboard.yaml
views:
  - title: Estado
    badges: []
    cards:
      - type: entities
        entities:
          - entity: switch.riego_valvula_1
            name: Válvula 1
          - entity: switch.riego_valvula_2
            name: Válvula 2
          - entity: switch.riego_valvula_3
            name: Válvula 3
          - entity: switch.riego_valvula_4
            name: Válvula 4
        state_color: true
        title: Válvulas
        show_header_toggle: false
      - type: history-graph
        entities:
          - entity: switch.riego_valvula_1
            name: V1
          - entity: switch.riego_valvula_2
            name: V2
          - entity: switch.riego_valvula_3
            name: V3
          - entity: switch.riego_valvula_4
            name: V4
        title: Riegos
      - type: entities
        entities:
          - entity: sensor.riego_prog_01
            name: Prog. 01
          - entity: sensor.riego_prog_02
            name: Prog. 02
          - entity: sensor.riego_prog_03
            name: Prog. 03
          - entity: sensor.riego_prog_04
            name: Prog. 04
          - entity: sensor.riego_prog_05
            name: Prog. 05
          - entity: sensor.riego_prog_06
            name: Prog. 06
          - entity: sensor.riego_prog_07
            name: Prog. 07
          - entity: sensor.riego_prog_08
            name: Prog. 08
          - entity: sensor.riego_prog_09
            name: Prog. 09
          - entity: sensor.riego_prog_10
            name: Prog. 10
        title: Horarios
      - show_name: true
        show_icon: true
        type: button
        tap_action:
          action: toggle
        entity: switch.riego_pantalla
        icon: mdi:monitor-screenshot
        name: Pantalla
      - type: gauge
        entity: sensor.riego_bateria
        name: Bateria
        min: 10
        max: 16
        needle: true
        severity:
          green: 12
          yellow: 11
          red: 1
      - type: gauge
        entity: sensor.riego_temperatura_interna
        name: Temp. CPU
      - type: entity
        entity: sensor.riego_dias_encendido
        name: Horas/Ciclo
      - type: entity
        entity: sensor.riego_debug
        name: Debug
        icon: mdi:card-text-outline
  - title: Programación
    path: programacion
    badges: []
    cards:
      - type: entities
        entities:
          - entity: number.riego_duracion_v1
            name: Válvula 1
          - entity: number.riego_duracion_v2
            name: Válvula 2
          - entity: number.riego_duracion_v3
            name: Válvula 3
          - entity: number.riego_duracion_v4
            name: Válvula 4
        title: Duración Manual
        show_header_toggle: false
      - type: entities
        entities:
          - entity: switch.riego_prog_01
            name: Prog. 01
          - entity: switch.riego_prog_02
            name: Prog. 02
          - entity: switch.riego_prog_03
            name: Prog. 03
          - entity: switch.riego_prog_04
            name: Prog. 04
          - entity: switch.riego_prog_05
            name: Prog. 05
          - entity: switch.riego_prog_06
            name: Prog. 06
          - entity: switch.riego_prog_07
            name: Prog. 07
          - entity: switch.riego_prog_08
            name: Prog. 08
          - entity: switch.riego_prog_09
            name: Prog. 09
          - entity: switch.riego_prog_10
            name: Prog. 10
        title: Programas Activos
        show_header_toggle: false
        state_color: true
      - show_name: true
        show_icon: true
        type: button
        tap_action:
          action: toggle
        entity: button.riego_guardar_programas
        name: Guardar programación
      - type: entity
        entity: number.riego_desfase_horario
        name: Desfase horario
      - type: entities
        entities:
          - entity: select.riego_cambiar_programa
            name: Selecciona programa
          - entity: number.riego_hora
          - entity: number.riego_minutos
          - entity: number.riego_duracion
          - entity: number.riego_intervalo_dias
          - entity: number.riego_valvula
        title: Cambiar programa
      - type: entities
        entities:
          - entity: sensor.riego_prog_01
            name: Prog. 01
          - entity: sensor.riego_prog_02
            name: Prog. 02
          - entity: sensor.riego_prog_03
            name: Prog. 03
          - entity: sensor.riego_prog_04
            name: Prog. 04
          - entity: sensor.riego_prog_05
            name: Prog. 05
          - entity: sensor.riego_prog_06
            name: Prog. 06
          - entity: sensor.riego_prog_07
            name: Prog. 07
          - entity: sensor.riego_prog_08
            name: Prog. 08
          - entity: sensor.riego_prog_09
            name: Prog. 09
          - entity: sensor.riego_prog_10
            name: Prog. 10
        title: Horarios

La configuración anterior presenta dos paneles de control como los mostrados en las siguientes imágenes:

_images/ha1.webp

Panel de control en Homeassistant

_images/ha2.webp

Configuración del sistema desde Homeassistant

Pantalla OLED y pulsadores

La pantalla y los pulsadores permiten interactuar de forma manual y ver el estado del programador. Estos componentes opcionales son fáciles de conectar directamente a la placa ESP32-C3 Supermini sin usar la placa PCB incluida en el proyecto. De esta forma puede realizar una prueba más exhaustiva.

La pantalla es una OLED-SDD1306 de 128x64 píxeles con interfaz I2C como la mostrada en la imagen:

Pantalla OLED

Pantalla OLED-SDD1306 I2C de 128x64 píxeles

Para realizar la conexión puede revisar el esquemático esquemático.pdf del cual se obtiene la siguiente tabla con los pines de la placa ESP32-C3 Supermini y los componentes a conectar:

Componentes y pines

Componente

PIN

Nota

Pulsador Start

9

Conectar un extremo a GND

Pulsador Select

10

Conectar un extremo a GND

LED

5

Salida en alto

Pantalla OLED: SDA

6

Pantalla OLED: SCL

7

Actualizaciones OTA

La versión actual del firmware tiene activa la actualización OTA, es decir, se puede actualizar el firmware por Wifi. Para actualizarlo se usa la herramienta de Espressif espota.py que está incluida en Arduino-Core-ESP32. Esta herramienta funciona en línea de comandos y es necesario conocer la IP del dispositivo para realizar la actualización.

El comando para actualizar por Wifi es el siguiente:

python3 espota.py -r -i 192.168.1.X -p 8266 -f riego.ino.bin

Advertencia

En la versión actual están activas las actualizaciones OTA sin autenticación. Véase BUGS & TODO con el listado de tareas pendientes.