En este tutorial vamos a utilizar un circuito ESP32 audio para poder crear un altavoz inteligente DIY que nos permita enviar notificaciones desde Home Assistant.
La idea es poder reutilizar esos altavoces viejos que quizás tengas por casa guardados y que ya no utilizas para nada, para darlos una segunda vida. En este tutorial vas a ver cómo hacerlo paso a paso.
Indice de contenidos
- 1 Capítulos ESP32 audio y altavoz inteligente DIY
- 2 Idea general del altavoz inteligente DIY
- 3 Qué es I2S
- 4 Esquema circuito ESP32 audio
- 5 ESP32 audio con ESPHome
- 6 Integrar altavoz inteligente DIY en Home Assistant
- 7 Reproducir una radio en un ESP32 audio
- 8 Reproducir un mp3 en un ESP32 audio
- 9 Mensaje personalizado de Home Assistant en un ESP32 audio
- 10 Lecturas complementarias
Capítulos ESP32 audio y altavoz inteligente DIY
A continuación te dejo los capítulos del vídeo por si quieres ir a tiro hecho.
00:00 Introducción
01:00 Mini curso gratuito de Home Assistant
01:43 Esquema general altavoces inteligentes DIY
02:56 Material y esquema general de conexión ESP32 y DAC 1334
03:58 Código ESPHOme para crear altavoces inteligentes DIY
09:43 Integración altavoz inteligente en Home Assistant
14:30 Automatización poner una radio en altavoz inteligente DIY
18:11 Reproducir archivos mp3 en altavoz inteligente DIY
21:31 Mensaje personalizado de Home Assistant en altavoz inteligente DIY
31:21 Despedida
Idea general del altavoz inteligente DIY
La idea es bastante simple, a partir de unos altavoces que tengan un conector jack vamos a hacer un altavoz inteligente DIY. Esto es gracias a que vamos a utilizar un ESP32 audio con un DAC externo 1334.
El esquema general serial el siguiente.
El ESP32 se conecta al DAC 1334 a través del protocolo I2S, ahora veremos qué es esto. Luego los altavoces se conectan al DAC a través del conector jack. Gracias a que el ESP32 es capaz de conectarse a la WiFi, recibirá los mensajes de Home Assistant que serán reproducidos a través del altavoz.
De esta forma, utilizando ESP32 audio podemos hacer unos altavoces inteligentes DIY.
Pero empecemos por el principio, qué es eso de I2S y cómo conectar el altavoz a un ESP32.
Qué es I2S
I2S, conocido también como Inter-IC Sound, Integrated Interchip Sound es un ,o IIS, es un estándar eléctrico de bus serial usado para interconectar circuitos de audio digital.
Es similar al protocolo SPI pero destinado a comunicar dispositivos de audio y fue introducido por Philips en 1986. Y aunque este protocolo es la leche porque permite conectar múltiples dispositivos utilizando un único bus de comunicación, el lío que montaron con los nombres de las señales también fue la leche.
Cada dispositivo necesita al menos tres señales para funcionar:
- Reloj serial continuo o continous serial clock (SCK) también conocido como bit clock (BCLK).
- Selector de palabra o word select (WS) también conocido como left-right clock (LRCLK) o frame sync (FS).
- Datos en serie o serial data (SD) que lo puedes encontrar como SDATA, SDIN, SDOUT, DACDAT o ADCDAT.
Para que el sistema pueda funcionar se necesita al menos un esclavo y un maestro. Este último será el encargado de orquestar todas las comunicaciones entre los diferentes dispositivos conectados al bus gracias a las señales de reloj y en nuestro caso utilizaremos el ESP32.
En cuando al esclavo vamos a utilizar un conversor digital a analógico o DAC (de las siglas en inglés Digital to Analog Converter) que nos permite sacar un señal de audio en esterero.
Veamos los componentes y el esquema del circuito que vamos a utilizar para crear un altavoz inteligente DIY.
Esquema circuito ESP32 audio
El material que vamos a utilizar es el siguiente:
- Una placa basada den un ESP32. En realidad da lo mismo la que utilices pero yo voy a utilizar esta.
- Un DAC-1334
Las conexiones entre los dos componentes son las siguientes.
Salvo los pines de alimentación, el resto de pines los puedes conectar como quieras siempre y cuando luego en el código los modifiques. En mi caso he utilizado los siguientes:
- Pin BCLK al pin GPIO18.
- Pin SD al pin GPIO19.
- Pin WS al pin GPIO05.
- Pin GND a pin GND.
- Pin VIN a pin 3V3.
Una vez conectado vamos a ver el código de ESPHome para poder reproducir sonidos a través del altavoz.
ESP32 audio con ESPHome
Para poder reproducir sonidos a través de los altavoces conectados al DAC y al ESP32 audio, es necesario programar la placa. Si bien hay muchas librerías de Arduino que nos permiten hacer esto, en esta ocasión vamos a utilizar ESPHome para poder integrar el altavoz en Home Assistant.
Los componentes de ESPHome que vamos a utilizar son el I2S Audio y el I2S Audio Media Player. Después de lanzar el asistente de ESPHome para crear el código por defecto, el resultado es este.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
esphome: name: altavozainteligente esp32: board: esp32dev framework: type: arduino # Enable logging logger: # Enable Home Assistant API api: encryption: key: "KVSIGDGaOIHl3s7tZumDdjUK6OHWQcNLOMSsrS1yFQU=" ota: password: "" wifi: ssid: !secret wifi_ssid password: !secret wifi_password fast_connect: on # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Altavozainteligente" password: "AmkPGj898Qxt" captive_portal: |
El siguiente paso es añadir el código de los componentes I2S Audio y I2S Audio Media Player.
1 2 3 4 5 6 7 8 9 10 |
i2s_audio: i2s_lrclk_pin: GPIO18 i2s_bclk_pin: GPIO05 media_player: - platform: i2s_audio name: Altavoz Inteligente dac_type: external i2s_dout_pin: GPIO19 mode: stereo |
Si por lo que sea has utilizado otros pines diferentes, aquí es donde debes modificarlos. Sube el código a la placa porque el siguiente paso es integrar el altavoz en Home Assistant.
Integrar altavoz inteligente DIY en Home Assistant
De momento lo que hemos hecho es programar el ESP32 para que sea capaz de reproducir audio a través del DAC-1334. Pero esto no hace que nuestro altavoz sea inteligente. Lo que realmente va a hacer que sea útil es integrarlo dentro de Home Assistant.
Una vez se conectado el altavoz inteligente DIY a la red WiFi de tu casa a través de las capacidades WiFi del ESP32 audio, aparecerá una notificación de forma automática.
Entra y haz clic en chekit out.
Esto te lleva a la página de integraciones donde verás una nueva integración de ESPHome con el altavoz inteligente DIY. Haz clic en CONFIGURAR.
Te pedirá la clave de cifrado que has puesto en el archivo de configuración de ESPHome.
Una vez validado, aparecerá un nuevo dispositivo en la integración ESPHome. Haz clic sobre él.
Esto abrirá el dispositivo.
El siguiente paso es probar el altavoz inteligente DIY a través de las Herramientas para desarrolladores y Servicios.
Busca el servicio tts y selecciona el que nos permite habar, tts.speak.
Haz clic en el botón + Elige entidad.
En este punto pueden aparecer varios tipos de entidades, elige una de ellas. Este es el servicio que nos va a permitir convertir el texto en voz. Luego veremos cómo configurar un servicio que funciona en local.
Luego selecciona la Entidad de reproductor multimedia donde debe aparecer el altavoz inteligente DIY.
Pon un mensaje y haz clic en LLAMAR SERVICIO.
Si todo ha ido bien escucharás el mensaje por los altavoces. El siguiente paso es configurar el servicio que convierte el texto en voz para que funcione en local y tengamos que utilizar el de Google que depende de la nube.
Para ello vamos a instalar un complemento que se llama Piper. Entra en la Tienda de complementos y haz clic sobre el complemento.
Instala el complemento.
Una vez instalado accede a configuración y cambia el parámetro voice. Elige uno que esté en tu idioma.
Y por último, inicia el complemento y asegúrate de marcar la opción de Vigilancia.
Una vez se haya iniciado accede a las integraciones y verás que ha detectado una nueva que se llama Piper Wyoming Protocol.
Configura la integración.
Y aparecerá en integraciones instaladas.
Si configuras de nuevo el servicio tts.speak verás que aparece un nuevo servicio texto a voz que en este caso es local.
A partir de aquí podemos hacer muchas cosas gracias al altavoz inteligente DIY basado en el ESP32 audio. 3 de esas cosas son las que vamos a ver a continuación.
Reproducir una radio en un ESP32 audio
El primer caso es reproducir una radio en los altavoces inteligentes DIY basados en el ESP32. Esto es bastante sencillo si utilizamos la integración Radio Browser de Home Assistant. La forma más sencilla y práctica de utilizarlo es a través de una automatización.
Entra en automatizaciones de Home Assistant y crea una automatización nueva. Da lo mismo el disparador que utilices, lo que nos interesa ahora es añadir una nueva acción del tipo llamar a servicio.
Luego haz clic en los tres puntos verticales y selecciona Editar YAML.
Tienes que copiar tal cual el siguiente código YAML. Lo único que tienes que cambiar es el entity_id y poner el ID de tu altavoz. Sustituye [PON-ID-TU-ALTAVOZ].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
service: media_player.play_media target: entity_id: media_player.[PON-ID-TU-ALTAVOZ] data: media_content_id: media-source://radio_browser/219d99e4-7fd9-416c-9814-71b803c05a48 media_content_type: audio/mpeg metadata: title: Rock FM thumbnail: https://www.rockfm.fm/apple-touch-icon-192x192.png media_class: music children_media_class: null navigateIds: - {} - media_content_type: app media_content_id: media-source://radio_browser - media_content_type: music media_content_id: media-source://radio_browser/country/ES |
Copia el código en la automatización.
Una vez copiado haz clic de nuevo en los tres puntos verticales y selecciona la opción Editar en el editor visual.
Aparecerá un formulario donde vas a poder elegir la radio que te de la gana. Solo tienes que hacer clic en el icono.
Esto abrirá un menú donde podrás elegir una radio entre los cientos de radios de todo el mundo que hay.
Veamos el siguiente caso que es reproducir un archivo mp3.
Reproducir un mp3 en un ESP32 audio
Para reproducir un mp3 lo primero es subirlo al servidor y eso se hace entrando en la opción de Medios y luego en My media.
Una vez allí haz clic en ADMINISTRAR.
Esto abrirá una ventana donde vamos a poder añadir un archivo mp3 haciendo clic en AÑADIR MEDIOS.
Selecciona un archivo mp3 y lo subes.
Luego cierra la ventana.
Selecciona el altavoz inteligente DIY para reproducir el sonido.
Y dale al play. Gracias a que el ESP32 audio está conectado a los altavoces reproducirá el sonido de la alarma.
Ahora vamos a ir a servicios y vamos a seleccionar el servicio media_player.play_media. El siguiente paso es seleccionar el objetivo haciendo clic en el botón + Elige entidad.
Selecciona el altavoz inteligente DIY basado en el ESP32 audio.
Tienes que configurar el tipo y el ID de contenido. Como Tipo de contenido pon audio/mp3 y como ID de contenido pon /media/local/alarm.mp3. Luego haz clic en LLAMAR SERVICIO.
Esto reproducirá el archivo mp3 por el altavoz inteligente DIY. El último caso es enviar un mensaje personalizado.
Mensaje personalizado de Home Assistant en un ESP32 audio
Para enviar un mensaje personalizado vamos a utilizar el servicio tts.speak. Selecciona el objetivo haciendo clic en + Elige entidad.
Selecciona el servicio de Piper.
Luego selecciona el altavoz inteligente DIY en Entidad de reproductor multimedia.
Para continuar la configuración haz clic en IR AL MODO YAML.
Aquí vamos a copiar el siguiente mensaje donde vas a tener que cambiar algunas cosas:
- states.sensor.entrada_meteo_temperature.state: hace referencia a un sensor de temperatura que tengo en mi casa, debes poner el ID de un sensor que tengas en tu propio sistema domótico.
- states.todo.tareas_pendientes_hoy.state: cambia el identificador de la lista de tareas pendientes de tu sistema domótico.
- states.sensor.tiempo_al_trabajo.state: debes configurar la integración Waze Travel Time con tus datos y una vez configurada debes poner aquí el ID de la entidad que genera esta integración.
- states.weather.forecast_home.state: sustituye el ID de la entidad del pronóstico meteorológico por la que tú utilices.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
message: >- Buenos días, la temperatura exterior es de {{ states.sensor.entrada_meteo_temperature.state }} grados Celsius. Hoy tienes {{ states.todo.tareas_pendientes_hoy.state }} tareas pendientes. El tiempo estimado para ir al trabajo es de {{ states.sensor.tiempo_al_trabajo.state }} minutos. El tiempo previsto para hoy es {%- set state = states.weather.forecast_home.state -%} {% if state == 'clear-night' %} noche clara {% elif state == 'cloudy' %} nublado {% elif state == 'exceptional' %} excepcional {% elif state == 'fog' %} niebla {% elif state == 'hail' %} granizo {% elif state == 'lightning' %} tormenta eléctrica {% elif state == 'lightning-rainy' %} tormenta con lluvia {% elif state == 'partlycloudy' %} parcialmente nublado {% elif state == 'pouring' %} lluvia intensa {% elif state == 'rainy' %} lluvia {% elif state == 'snowy' %} nieve {% elif state == 'snowy-rainy' %} nieve y lluvia {% elif state == 'sunny' %} soleado {% elif state == 'windy' %} hará viento {% elif state == 'windy-variant' %} viento variante {% else %} sorpresa {% endif -%}. Esta es la frase del día de hoy. {% set frases =[ "Cuando todo parezca ir en tu contra, recuerda que el avión despega contra el viento.", "No hay que ir para atrás ni para darse impulso.", "Si vas a mirar atrás, que sea para ver lo que has trabajado para llegar donde estás.", "La pregunta que me hago casi todos los días es ¿Estoy haciendo lo más importante que puedo?", "Lo que no es útil para la colmena, no es útil para la abeja.", "Realiza cada una de tus acciones como si fuera la última de tu vida.", "Nunca pienso en las consecuencias de fallar un gran tiro. Cuando se piensa en las consecuencias, se está pensando en un resultado negativo.", "El maracador se cuida de él mismo." ]%} {{ frases[range(0, frases|length) | random] }} Te deseo un épico día. |
Una vez hayas hecho las modificaciones pertinentes copia el mensaje en el servicio y haz clic en el botón LLAMAR SERVICIO y reproducirá el mensaje personalizado por los altavoces inteligentes DIY.

Y con esto damos por finalizada este tutorial donde hemos visto cómo hacer unos altavoces inteligentes DIY utilizando un ESP32 audio, ESPHome y Home Assistant.
Cualquier duda o sugerencia en los comentarios.