Aprende a crear dispositivos ESPHome con batería de la forma más sencilla para hacer que tus proyectos sean portátiles!
Índice
Ventajas y limitaciones de usar baterías
Si ya has entrado en este «mundillo», es cuestión de tiempo que quieras crear dispositivos ESPHome con batería. Las ventajas son evidentes, ya que puedes colocarlos en cualquier sitio (tengan cerca un enchufe o no) y quedan más estéticos.
¿Entonces por qué no los vemos más a menudo? Bueno, lo cierto es que en el contexto en que nos movemos hay diversos factores:
- Los proyectos de domótica suelen ser dispositivos que están permanentemente encendidos y reportando su estado cada pocos segundos (por ejemplo, un sensor de presencia o un multisensor ambiental). Esto deriva en un gasto de energía considerable, que nos obligaría a cargar la batería continuamente.
- Tanto las baterías de litio como las LiPo son delicadas y pueden llegar a ser peligrosas (incluso arder). Lógicamente, no tiene por qué suceder nada siempre que se utilice de forma correcta. El problema es que esto requiere un cierto conocimiento para no sobrecargar la batería, crear cortocircuitos, calentarla más de la cuenta…
- Por defecto, no todas las placas nos permiten saber el nivel de batería. Esto puede ser un problema o una incomodidad, si la única manera que tienes de saber de que no hay batería es que se «muera» tu dispositivo (o cargarla continuamente de forma preventiva).
- Si has estado investigando a fondo, sabrás que para incorporar a tu proyecto una batería «en condiciones», necesitas varios componentes. Esto incrementa la complejidad, coste y tamaño de tu proyecto.
Casos y dispositivos recomendados
Entonces, ¿cuándo nos conviene usar dispositivos ESPHome con batería? Mi opinión es la siguiente:
- Dispositivos de uso intermitente. No siempre necesitamos que nuestro dispositivo responda de forma inmediata o que reporte información cada pocos segundos. Por ejemplo, cuando utilizamos los típicos sensores para medir la humedad de las plantas (ya que es una información que no cambia continuamente). Esto nos va a permitir reducir significativamente el consumo de energía.
- Placas con puerto de carga. Existe algunas variantes de placas controladoras que incorporan el circuito y puerto de carga (como la Lolin D32). Estas te permiten reducir la complejidad, coste, tamaño y riesgos en tus dispositivos ESPHome con batería. Además, normalmente vas a poder determinar fácilmente el nivel de batería restante.
- Baterías acorde a tu proyecto. A la hora de comprar una batería pueden abrumarte la cantidad de opciones que hay, pero hay algunos aspectos importantes a considerar:
- Voltaje compatible. Generalmente vas a querer una batería de 3.7 V nominal para tus proyectos con ESPHome (voltajes distintos al requerido pueden dañar el dispositivo o volverlo inestable).
- Autonomía requerida. La capacidad de la batería se expresa en miliamperios / hora (mAh) y el consumo de tu dispositivo (en mA) dependerá de las características de tu proyecto (por ejemplo, una pantalla consume mucho más que un simple sensor de temperatura). Sabiendo ambos datos puedes estimar cuántas horas aguantará la batería (capacidad dividida por el consumo).
- Conector incorporado. Verifica que el conector de la batería (por ejemplo, ‘Ph 2.0’) coincide con el puerto de tu placa.
- Circuito de protección. Procura utilizar baterías que incorporen una placa o circuito de protección (se indica en la descripción del producto). De esta forma reducirás los riesgos de que tener «un susto».
- Otros factores. Hay más detalles que puede interesarte tener en cuenta, dependiendo de tu proyecto (como la forma, tamaño o peso de la batería).
Monitorización del nivel de batería
Algo que, obviamente, es muy interesante al utilizar dispositivos ESPHome con batería es monitorizar el nivel de carga. De esta forma podremos saber el porcentaje actual y crear automatizaciones para que nos notifique cuando debemos cargarla.
Esto podemos hacerlo gracias al componente ADC (Analog To Digital Sensor) de ESPHome. Este componente lee el voltaje que entra en uno de los pines de la placa. Con este dato podemos crear un sensor ‘template’ que traduzca este voltaje en un porcentaje de carga.
Aquí tienes un ejemplo (correspondiente a una Lolin D32) del fragmento de código que tendrías que añadir a tu dispositivo para controlar la batería.
captive_portal:
sensor:
- platform: adc
pin: GPIO35
name: "Batería (voltaje)"
id: voltaje_bateria
attenuation: 11db # Para leer hasta ~3.9-4.2V en ESP32
update_interval: 60s
filters:
- multiply: 2
- sliding_window_moving_average:
window_size: 10
send_every: 5
- platform: template
name: "Batería"
unit_of_measurement: "%"
icon: "mdi:battery"
update_interval: 60s
lambda: |-
if (id(voltaje_bateria).state > 4.2) {
return 100.0;
} else if (id(voltaje_bateria).state < 3.0) {
return 0.0;
} else {
return (id(voltaje_bateria).state - 3.0) / (4.2 - 3.0) * 100.0;
}
Esto nos devolvería las siguientes entidades:

Ahorro de energía
Si nos encontramos en uno de esos casos en los que nos basta con tener lecturas esporádicas de nuestro dispositivo (por ejemplo, cada hora), ESPHome nos ofrece la posibilidad de ahorrar energía y alargar la batería.
Power Save Mode
Para empezar, el componente WiFi de ESPHome nos permite ahorrar energía sin apagar completamente nuestra placa. Esto podemos hacerlo ajustando el parámetro «Power Save Mode» del componente, para reducir el consumo minimizando el uso del WiFi. Podríamos configurar el modo de ahorro más agresivo de la siguiente forma:
wifi: power_save_mode: high
Esto puede ser conveniente para ahorrar energía en un dispositivo que debe reaccionar rápidamente a eventos (como un botón o un sensor PIR). Puesto que la placa no llega a apagarse, no necesita invertir tiempo en reiniciarse (conservando el estado del dispositivo).
Deep Sleep
Ahora, si lo que buscamos es el máximo ahorro de energía, entonces nos interesa el componente Deep Sleep de ESPHome. A diferencia de lo indicado en el apartado anterior, el ‘deep sleep’ apaga la placa casi por completo, teniendo que reiniciarse al «despertar», y solo puede ser activada por un temporizador o un pin configurado como ‘wake-up‘. Esto se traduce en un ahorro energético y una duración de la batería mucho mayor.
El componente se configura añadiendo el siguiente fragmento a tu código:
deep_sleep: run_duration: 20s sleep_duration: 5min wakeup_pin: GPIO33
Si observas el código anterior:
- ‘run_duration‘ representa el tiempo en segundos, durante el cual permanecerá encendido el dispositivo. Ten en cuenta que debe ser suficiente para iniciar el dispositivo, conectarlo a la WiFi, realizar las lecturas correspondientes y enviar los datos.
- ‘sleep_duration’ es el tiempo en segundos que permanecerá dormido el dispositivo, entre ciclo y ciclo de lectura.
- ‘wakeup_pin’ es, como forma alternativa al temporizador, el GPIO que puede despertar el dispositivo al registrar un cambio (por ejemplo, la pulsación de un botón).

