ESPHome: Instalación y primera prueba con ESP32 (o ESP8266)

Domótica Tutoriales

Después del descubrimiento para poder trabajar con ESPHome, llevo un par de días viendo como funciona y estoy realmente encantado con la manera de trabajar que tiene ESPHome así como con la potencia de lo que podemos hacer con ESP32.

Uno de los problemas que tenía para poder usar ESPHome era la manera de comenzar, no pude dedicarle mucho tiempo por no dejar las cosas paradas y no sabía como comenzar a usarlo para empezar a probar el ESP32 que tenía, tanto la versión con cámara como la versión de desarrollo que compré sin cámara para usarlo con sensores.

Pensaba que ESPHome era similar a ESPEasy, que ha sido el que he usado en los tutoriales DIY  con sensores económicos, pero, en si el enfoque es similar, pero la madurez del proyecto de ESPHome barre notablemente a ESPEasy, por lo que he pensado que podría hacer un tutorial para ayudar a aquellos que no se han animado aun a probarlo para que vean que es sencillo de instalar y de poder usar.

La manera de funcionar también es distinto entre ambos firmware ya que, para poder crear nuestros binarios en ESPHome, instalaremos el pequeño servidor que nos permite configurar diferentes proyectos de microcontrolador desde la web que lanza, pudiendo tener todos desde el mismo sitio e incluso pudiendo flashear directamente si conectamos el ESP32 directamente al equipo donde está instalado.

Si no tienes todavía ningún ESP32, te recomiendo comprar alguno, estos son los que tengo y con los que voy a trabajar en los tutoriales que vaya haciendo de este tipo:

  • ESP32 de desarrollo: Placa de desarrollo que incluye USB para la alimentación así como el propio USB ttl, por lo que no necesitaremos un conversor de serie a USB para poder grabarlo, podéis conseguirlo aquí por unos 5€.
  • ESP32 Cam: Versión con cámara de este microcontrolador, compatible con ESPHome e integrable en Home Assistant (todavía no he podido hacer el tutorial para poder hacerla funcionar con Home Assistant). Podéis comprarlo aquí por unos 7€. Para este, si que necesitáis un usbttl que podéis comprar aquí (incluye algunos cables DuPont) así como cables DuPont (si no tenéis) aquí.

Instalación de ESPHome en nuestro equipo

Para empezar es necesario tener instalado Python 2.7, ya que con Python 3.X no nos funcionará, por lo que tendremos que instalar en nuestro sistema, sea en nuestro PC si queremos usarlo ahí como si es en la propia Rasberry, instalaremos pip2 que es el instalador que funciona con Python 2.

sudo apt-get update
sudo apt-get install python
python2 --version

Si con el último comando vemos que tenemos una versión 2.7.X, pasamos a instalar pip2:

wget https://bootstrap.pypa.io/get-pip.py sudo python2 get-pip.py

Si todo ha terminado sin errores, podemos pasar a instalar ESPHome:

sudo pip2 install esphome

Se descargará todas las dependencias y podremos ver como lo instala, si no da ningún error, podemos empezar a trabajar. Por lo que pasaríamos a lanzar la interfaz web con la que trabajaríamos, desde nuestro usuario pi (o el que uséis normalmente) lanzamos el comando:

esphome config/ dashboard

Ahora sería momento de ir a nuestro navegador para lanzar en el navegador la ip local o la del equipo donde estéis instalando (en mi caso 192.168.1.103 que es el equipo de pruebas) para poder acceder a la web en el puerto 6052, por lo que sería la dirección http://192.168.1.103:6052 y deberíais ver algo así:

Ahora, os haré una pequeña demostración de como usarlo, pero, la idea es poder crear un vídeo para explicar ESPHome algo más facil y así poder empezar a trabajar con el entorno de desarrollo y empezar a exprimir los ESP32 (o ESP8266).

Sensor de temperatura y presión BMP280 con ESPHome en ESP32

Ahora, iré directamente para hacer una demostración, pero como he dicho antes, lo mejor será usar el vídeo para mostrar como funciona el sistema. Para poder crear nuestro proyecto tendremos que seguir estos pasos:

  • Pulsamos sobre el + que está en la esquina superior derecha y se nos abrirá una nueva pantalla que nos pide, lo primero, un nombre, podemos poner el que queramos, pero es obligatorio poner en minúsculas el nombre y sin espacios ni caracteres raros.
  • Una vez puesto el nombre, nos pide el dispositivo sobre el que va a funcionar, nuestro caso es el ESP32, por lo que elegimos el genérico que aparece

  • Ahora, nos pide los datos de nuestra wifi así como una clave para poder actualizar el dispositivo por OTA, ponemos los datos de nuestra Wifi y ya estaría terminada la configuración inicial.

Ahora, veremos en el interfaz la instancia del firmware que queremos crear, si vemos, tenemos un “Edit” debajo del nombre, lo pulsamos y nos aparece una pantalla para poder editar la configuración de dicho dispositivo, es ahora, cuando usaríamos lo que nos indica ESPHome en su documentación.

Como he dicho, he usado un pequeño sensor de temperatura para ver su funcionamiento, un BMP280 así como he configurado el servidor MQTT para poder trabajar en Home Assistant como con cualquier dispositivo MQTT. La configuración i2c es necesaria para decirle en qué pines está puesto el i2c ya que, tenemos 2 en el ESP32

Ahora, una vez terminado tenemos la posibilidad de flashearlo directamente desde ahí, si tenemos conectado el ESP32 o el USBttl directamente en la misma máquina que está instalado ESPHome, por lo que, si miramos arriba, vemos si está detectado el ttyUSB0 (o el número que toque) para elegirlo y pulsar en upload.

Flashear ESPHome con esphome-flasher

En mi caso, tengo ESPHome instalado en donde tengo Home Assistant y no me resulta cómodo poder usarlo, por lo que en mi equipo donde trabajo a diario, he instalado esphome-flasher, que siguiendo los pasos que indican en github, es necesario instalar:

sudo pip3 install wxpython
sudo pip3 install esphomeflasher

Y, ahora, si ejecutamos desde la consola:

esphomeflasher

Nos aparecerá una interfaz para poder instalar el binario que descargaremos siguiendo estos pasos dentro de la web de ESPHome, por lo que volvemos a donde tenemos nuestra instancia de ESPHome y en los puntos de la derecha del nombre, elegimos “Compile”.

Nos saldrá una ventana mostrando el proceso de compilación, que, si no hay problemas en la configuración, podremos descargar abajo donde pone “Download binary”, ese fichero, es el que usaremos en esphomeflasher:

Conectamos el ESP32 o el dispositivo que vamos a usar, con o sin USBttl en función de si nos hace falta, seleccionamos el fichero y pulsamos en “Flash ESP”.  El dispositivo debe estar en modo flash, por lo que se necesitará puentear GPIO0 a GND durante el arranque. Si todo está correcto veremos algo así:

El pase de diapositivas requiere JavaScript.

Cuando termina de grabar, reinicia el dispositivo y veremos el log en la consola de lo que está haciendo durante el arranque y veremos también la IP que ha conseguido para poder empezar a trabajar con él, aunque, si estáis usando MQTT lo normal es que no necesitéis ver dicha IP, solo en el servidor MQTT su topic para poder asociarlo a Home Assistant:

Y si nos vamos al servidor MQTT veremos algo así:

Espero que os ayude este pequeño tutorial y pronto intentaré publicar el vídeo para mostrar en vídeo lo que aquí explico. Si tenéis alguna pega, ya sabéis que podéis preguntar en los comentarios así como en el grupo de Telegram o el foro. Nuevamente, gracias a

¿Quieres montarte tu propio sistema Smart Home?

¿Te gustaría empezar poco a poco teniendo Google Home, Alexa o Home Assistant para controlar las luces, calefacción y otros electrodomésticos de la casa? ¡Te ayudamos! Entra en nuestro Grupo de Telégram de Domótica y también puedes entrar a nuestro Foro de Domótica donde podrás empezar a leer y preguntar tus dudas. Además, si quieres estar al tanto de las ofertas de domótica que salen a diario para poder hacerte un sistema de domótica low cost, entra a nuestro Canal de ofertas de domótica y no te perderás ni una o si lo prefieres y no tienes Telegram, puedes entrar a nuestra página de ofertas de domótica o Smart Home en Facebook. ¡Síguenos también en nuestro Facebook, Twitter o Instagram! ¡Te esperamos!

17 Comentarios

  1. Mejor Solito

    Si la instalación se ha realizado correctamente y al intentar ejecutar ESPHome os da el error “TypeError: __init__() got an unexpected keyword argument ‘required'” la solución es instalar una versión más antigua de la librería Voluptuous de esta forma: sudo pip2 install voluptuous==0.11.5 🙂

    Reply
    • Juan Pablo

      Muchísimas gracias. Ya funciona. Por mi cuenta había conseguido llegar a que era un problema con la librería ‘voluptuous’, pero nada más.
      ¿Sabes si alguien ha reportado el problema a ‘esphome’ para que lo miren porque en los requerimientos pone que la versión de esta librería debe ser >= 0.11.5 y < 0.12?

      Reply
      • Fran

        Tengo el mismo error y he probado lo siguiente según comentais: Desinstalar la versión actual de voluptuous (0.11.7) e instalar la 0.11.5 pero el error persiste de otra manera; me explico:

        La versión de esphome que tengo instalada es la más reciente, que acorde a su página web, ya usa Python 3. Concretamente la versión de esphome instalada es la 1.14.5. Entonces, por un lado, con la versión más reciente me sale un mensaje diciendo que necesita voluptuous 0.11.7 y no funciona pero con la 0.11.7 me sale el mismo error que al compañero Juan Pablo. ¿Alguna idea de que hacer?

        PD: ¿Alguna máquina recomendada para ejecutar esphome? Me da error en Windows pero en una Raspberry Pi Zero funciona pero falla a la hora de compilar el .bin. El único sitio donde me ha funcionado es en el addon de esphome para HASS.

        Saludos

        Reply
        • Juan Pablo

          Hola.
          Pues hace tiempo que no uso esphome, y desde que lo instalé, he actualizado la versión de Linux Mint que uso de la 19.3 a la 20. Así que tras tu mensaje, he intentado ejecutarlo poniendo “esphome ESPHome/ dashboard” (pongo ESPHome en vez de config porque así se llama el directorio donde guardo los datos) y me daba el siguiente error:

          Traceback (most recent call last):
          File “/usr/local/bin/esphome”, line 7, in
          from esphome.__main__ import main
          ModuleNotFoundError: No module named ‘esphome’
          jpablo@ATILA:~$ esphome ESPHome/ dashboard
          Traceback (most recent call last):
          File “/usr/local/bin/esphome”, line 7, in
          from esphome.__main__ import main
          ModuleNotFoundError: No module named ‘esphome’

          Como EspHome ha cambiado y ahora usa Python 3, pues lo he vuelto a instalar con el comando “pip3 install esphome”. Me lo ha instalado, y lo único es que me ha mostrado varios Warnings indicando que algunos programas estaban en el directorio ~/.local/bin/ que no se encuentra en el PATH. Pero lo he ejecutado y no ha habido problema. La librería de voluptuous es la 0.11.7.
          ¿En qué sistema operativo lo estás instalando?
          ¿Te da algún error o aviso cuando lo instalas?
          ¿Puedes poner los errores que te aparecen cuando lo ejecutas?

          Reply
          • Fran

            Usando Windows 10, he reinstalado esphome y aun así, la instalación va sin problemas pero al hacer esphome ESPHome/ dashboard me sale un pedazo de error tal que así:

            [32mINFO Starting dashboard web server on port 6052 and configuration dir ESPHome/…[0m
            Traceback (most recent call last):
            File “c:\python\lib\runpy.py”, line 194, in _run_module_as_main
            return _run_code(code, main_globals, None,
            File “c:\python\lib\runpy.py”, line 87, in _run_code
            exec(code, run_globals)
            File “C:\Python\Scripts\esphome.exe\__main__.py”, line 7, in
            File “c:\python\lib\site-packages\esphome\__main__.py”, line 566, in main
            return run_esphome(sys.argv)
            File “c:\python\lib\site-packages\esphome\__main__.py”, line 535, in run_esphome
            return PRE_CONFIG_ACTIONS[args.command](args)
            File “c:\python\lib\site-packages\esphome\__main__.py”, line 365, in command_dashboard
            return dashboard.start_web_server(args)
            File “c:\python\lib\site-packages\esphome\dashboard\dashboard.py”, line 752, in start_web_server
            app.listen(args.port)
            File “c:\python\lib\site-packages\tornado\web.py”, line 2042, in listen
            server.listen(port, address)
            File “c:\python\lib\site-packages\tornado\tcpserver.py”, line 144, in listen
            self.add_sockets(sockets)
            File “c:\python\lib\site-packages\tornado\tcpserver.py”, line 157, in add_sockets
            self._handlers[sock.fileno()] = add_accept_handler(
            File “c:\python\lib\site-packages\tornado\netutil.py”, line 268, in add_accept_handler
            io_loop.add_handler(sock, accept_handler, IOLoop.READ)
            File “c:\python\lib\site-packages\tornado\platform\asyncio.py”, line 79, in add_handler
            self.asyncio_loop.add_reader(
            File “c:\python\lib\asyncio\events.py”, line 501, in add_reader
            raise NotImplementedError
            NotImplementedError

          • Juan Pablo

            Para Fran. No sé por qué no me deja responder a tu último comentario. Sencillamente no me sale la opción de “Reply”, así que respondo a mi comentario anterior.
            Mis conocimientos de Python no pasan de ser limitados. He hecho algunos pequeños programas, pero cuando se trata de ver un proyecto más amplio, pues me pierdo un poco. En la secuencia de errores que pones, el error se produc en la lib “asyncio”, en el fichero “events.py”, línea 501 al definir la función “add_reader”, pero no da más pistas de por qué es.
            Pero mirando en la página de ESPHome, en la guía de instalación pone lo siguiente:
            “ESPHome features a dashboard that you can use to easily manage your nodes from a nice web interface. It was primarily designed for the Hass.io add-on, but also works with a simple command on *nix machines (sorry, no windows).”
            Yo diría que ese va a ser el problema que tienes
            Saludos

  2. Juan Pablo

    Hola
    He intentado seguir este tutorial para instalar ESPHome en un ordenador con Linux Mint 19.2. Ya lo tengo instalado con todas las dependencias pero al intentar arrancar la interfaz web con el comando
    esphome config/ dashboard
    me da el siguiente error:
    Traceback (most recent call last):
    File “/usr/local/bin/esphome”, line 7, in
    from esphome.__main__ import main
    File “/usr/local/lib/python2.7/dist-packages/esphome/__main__.py”, line 10, in
    from esphome import const, writer, yaml_util
    File “/usr/local/lib/python2.7/dist-packages/esphome/writer.py”, line 7, in
    from esphome.config import iter_components
    File “/usr/local/lib/python2.7/dist-packages/esphome/config.py”, line 15, in
    from esphome import core, core_config, yaml_util
    File “/usr/local/lib/python2.7/dist-packages/esphome/core_config.py”, line 6, in
    import esphome.config_validation as cv
    File “/usr/local/lib/python2.7/dist-packages/esphome/config_validation.py”, line 1242, in
    Optional(CONF_COMMAND_TOPIC): All(requires_component(‘mqtt’), subscribe_topic),
    File “/usr/local/lib/python2.7/dist-packages/esphome/voluptuous_schema.py”, line 198, in extend
    ret = super(_Schema, self).extend(schema, extra=extra)
    File “/usr/local/lib/python2.7/dist-packages/voluptuous/schema_builder.py”, line 782, in extend
    return result_cls(result, required=result_required, extra=result_extra)
    TypeError: __init__() got an unexpected keyword argument ‘required’

    ¿Alguna idea de qué puede estar pasando?
    No consigo encontrar ningún foro donde pueda pedir ayuda
    Muchas gracias

    Reply
    • David de Madrid

      Yo lo he solucionado con la version de voluptuos:

      pip install voluptuous==0.11.5

      Reply
    • eduardo

      Estas ejecutando con Python 2.7, creo que tendrías que hacerlo funcionar con Python 3.X

      Reply

Contestar

Tu e-mail no será publicadoRequired fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Lost Password

Registro