Si quieres saber cómo de iluminado está en ambiente, hoy te enseño a integrar un sensor de luz con ESPHome.
Incorporar este tipo de sensores en tus proyectos puede ser muy útil para saber cuándo se hace de noche, si una habitación está oscura o si tus plantas no reciben luz suficiente.
🥑 Si estás empezando con ESPHome, te recomiendo que veas el taller de la academia para sacarle el máximo partido!
Índice
Requisitos previos
Para integrar un sensor de luz con ESPHome necesitas:
- Una placa ESP32 o ESP8266. En mi caso voy a utilizar una placa Lolin D32, una variante de ESP32 que tiene puerto para una batería LiPo.
- Un sensor BH1750, que mide la intensidad de la iluminación ambiente.
- Un cable Micro-USB para alimentar la placa de DATOS (con un cable de carga no vas a poder instalar el software).
- Haber instalado ESPHome en Home Assistant.
[content-egg module=Aliexpress2 template=grid groups=»componentes» cols=4 cols_xs=2 cols_sm=2]
Conexión del sensor de luz
Para integrar un sensor de luz con ESPHome lo primero que vamos a hacer es conectarlo con nuestra placa. Como siempre lo primero que te recomiendo es que consultes el ‘pinout’ (o distribución de pines) de la placa. En mi caso voy a utilizar una placa Lolin D32 y este es su ‘pinout’.

Por otro lado, el encoder tiene el siguiente aspecto, que nos lleva al siguiente esquema de conexión.
- VCC irá conectado al pin de alimentación 3v3 de la placa.
- GND irá conectado al pin GND (‘ground’ o tierra) de la placa.
- SCL irá conectado al pin I2C SCL de nuestra placa (GPIO22).
- SDA irá conectado al pin I2C SDA de nuestra placa (GPIO21).
- ADDR no lo conectaremos a ningún pin de la placa.

Cuando termines de realizar las conexiones te quedará algo como esto:

Configuración de ESPHome
Ahora tenemos que ‘flashear’ la placa con ESPHome y la configuración correspondiente, que vamos a extraer directamente de la documentación ESPHome sobre el componente BH1750 Ambient Light Sensor. Para ello sigue estos pasos:
- Conecta la placa a tu ordenador a través del puerto Micro-USB.
- En Home Assistant, accede al complemento de ESPHome desde el menú lateral y pulsa en “New device”. Pulsa en “Continue” y dale un nombre (por ejemplo, “Encoder”).
- Pulsa en “Next” y a continuación selecciona la opción “ESP32” como tipo de dispositivo. Verás que en el fondo se ha creado un nuevo dispositivo.
- Pulsa en “Skip” y haz clic en el enlace “Edit” del bloque correspondiente al dispositivo que acabas de crear.
- Añade las siguientes líneas al final del código.
captive_portal:
i2c:
sda: GPIO21
scl: GPIO22
scan: true
sensor:
- platform: bh1750
name: "Luminosidad"
address: 0x23
update_interval: 60s
- Cuando hayas terminado de editar el código pulsa en “Save” e “Install”. Selecciona la opción “Manual download” y espera a que el código se compile.
- Cuando termine, selecciona la opción “Modern format” para descargar el fichero ‘.bin’ correspondiente.
- Ahora ve a la página de ESPHome y pulsa en “Connect”. En la ventana emergente selecciona tu placa y pulsa en “Conectar”.
- Ahora pulsa en “Install” y selecciona el fichero ‘.bin’ obtenido en el paso 7. De nuevo, pulsa en “Install”.
- Vuelve a Home Assistant y ve a Configuración > Dispositivos y servicios. Lo normal es que tu dispositivo haya sido descubierto y aparezca en la parte superior, esperando únicamente a que pulses el botón de “Configurar”. De lo contrario pulsa en el botón de “Añadir integración”, busca “ESPHome” e introduce la IP de tu placa en el campo ‘Host’.
- Como siempre, te recomiendo que asignes una IP fija en tu router para evitar fallos en el futuro si esta cambia.
Umbrales de luminosidad
Si accedes al detalle de tu nuevo dispositivo, observarás que te proporciona la siguiente entidad sobre la luz ambiente.

Aunque este es el dato que estábamos buscando, se proporciona en ‘luxes’ (siendo 1 lux = 1 lumen por metro cuadrado). Como este puede ser un dato poco intuitivo, a través de una escala (que puedes ajustar como quieras) vamos a crear un sensor complementario que nos indique el nivel de luz ambiente. Para ello alimenta el código de la siguiente forma y actualiza tu placa.
captive_portal:
i2c:
sda: GPIO21
scl: GPIO22
scan: true
sensor:
- platform: bh1750
name: "Luminosidad (lx)"
address: 0x23
update_interval: 60s
id: light_sensor
text_sensor:
- platform: template
name: "Luminosidad"
icon: mdi:brightness-percent
lambda: |-
float lux = id(light_sensor).state;
if (lux < 1) {
return {"Oscuridad total"};
} else if (lux < 10) {
return {"Muy poca luz"};
} else if (lux < 50) {
return {"Luz tenue"};
} else if (lux < 200) {
return {"Interior con poca luz"};
} else if (lux < 500) {
return {"Interior bien iluminado"};
} else if (lux < 2000) {
return {"Luz artificial intensa"};
} else if (lux < 10000) {
return {"Exterior con sombra"};
} else if (lux < 50000) {
return {"Exterior soleado"};
} else {
return {"Luz solar intensa directa"};
}
update_interval: 60s
De esta forma ahora tendrás estas dos entidades, que puedes usar en tus automatizaciones.


