Si ya tienes Home Assistant en casa, sabes que cada sensor nuevo suele significar otra app, otra nube y otra cuenta. Con una Raspberry Pi Pico 2 W y ESPHome eso desaparece: describes en un archivo YAML lo que la placa mide y lo que controla, ESPHome compila la firmware y Home Assistant la reconoce sola en tu red local. No escribes una línea de C ni de Python.

En esta guía vas a dejar una Pico 2 W conectada a Home Assistant, leyendo la temperatura interna del chip, la señal WiFi y el tiempo encendida, y vas a encender y apagar su LED desde el panel. También vas a entender por qué la temperatura del chip marca casi 20 grados de más, qué puerto usa la Pico para las actualizaciones por WiFi y cómo dar el salto siguiente: un sensor BME280 de verdad y un relé en el mismo YAML.

Por qué ESPHome y no MicroPython

La Pico se puede conectar a Home Assistant con MicroPython, pero en ese caso todo el trabajo de fondo queda de tu lado: conectarse al WiFi, reconectarse cuando se cae, programar un cliente MQTT y publicar los mensajes de descubrimiento para que Home Assistant cree las entidades. Son decenas de líneas que no tienen nada que ver con lo que quieres medir.

ESPHome resuelve todo eso. Tú declaras qué hay conectado y obtienes un dispositivo que habla con Home Assistant por la API nativa (cifrada, sin broker MQTT de por medio) y que acepta actualizaciones por WiFi.

La regla práctica:

  • ESPHome, cuando la Pico existe para alimentar a Home Assistant: sensores, relés, botones, pantallas.
  • MicroPython, cuando la Pico tiene que ejecutar su propia lógica independiente o cuando el objetivo es aprender a programar.

No conviven: la firmware de ESPHome reemplaza a MicroPython completo. Si quieres volver, entras en modo BOOTSEL y copias de nuevo el archivo de MicroPython.

Qué placa sirve (y cuál no)

ESPHome nació para el ESP8266 y el ESP32, pero hoy soporta los chips de Raspberry Pi, RP2040 y RP2350, a través de la plataforma rp2. Para Home Assistant necesitas WiFi, así que la placa tiene que ser un modelo W:

  • Pico 2 W (RP2350 con WiFi): la que se usa en esta guía.
  • Pico W (RP2040 con WiFi): funciona igual, con menos memoria.
  • Pico y Pico 2 sin W: no tienen radio. ESPHome compila para ellas, pero no se conectan a la red.

Hay un caso trampa: algunos clones que dicen "Pico W" en el nombre usan un chip de radio de Espressif en lugar del Infineon CYW43439 de la placa oficial. ESPHome no los soporta. Si compraste una placa genérica y el WiFi no levanta, revisa qué chip trae al lado del RP2040.

Si después vas a pinchar sensores en una protoboard, conviene la versión Pico 2 WH, que viene con los pines soldados.

Lo que necesitas

  • Una Raspberry Pi Pico 2 W (o una Pico W).
  • Un cable micro USB que transmita datos, no solo carga. Se usa una sola vez, para la primera instalación.
  • Home Assistant con la app ESPHome Device Builder instalada desde Ajustes → Apps. Después de instalarla, activa "Mostrar en la barra lateral".
  • Una red WiFi de 2,4 GHz a la que también llegue Home Assistant. La Pico no ve redes de 5 GHz.

Configuración: el dispositivo en el Device Builder

Crear el dispositivo

Abre ESPHome Device Builder desde la barra lateral y presiona Crear dispositivo, abajo a la derecha. En el diálogo para elegir la placa, busca "Pico": ESPHome muestra la Raspberry Pi Pico 2W con RP2350 y WiFi, la Pico W con RP2040 y algunas placas de otros fabricantes.

Diálogo de ESPHome Device Builder para elegir placa, con la búsqueda "Pico" y las tarjetas de la Raspberry Pi Pico 2W y la Pico W

Después le pones un nombre. Elígelo con cuidado, porque se usa en dos lugares: es el nombre que vas a ver en Home Assistant y de él sale el nombre de host en la red. En el original el equipo de prueba se llama RPI-PICO2W-TEST, y ESPHome generó el host rpi-pico2w-test. Algo como sensor-living o pico-garaje te va a ahorrar confusiones cuando tengas cinco.

Diálogo de configuración del dispositivo en ESPHome con el nombre del equipo de prueba y el nombre de host que genera a partir de él

Al terminar, el Device Builder escribe la configuración base. Las credenciales del WiFi no van escritas en el archivo: se toman de los secretos wifi_ssid y wifi_password que tengas guardados en ESPHome. Así puedes compartir el YAML sin regalar la clave de tu red.

Revisar la configuración base

Con Editar se abre el editor: a la izquierda el navegador de dispositivos y a la derecha el YAML. La base ya trae placa, clave de la API, OTA y WiFi. Fíjate en el bloque rp2: con board: rpipico2w.

Editor de ESPHome con el navegador de dispositivos, el WiFi tomado de los secretos y la configuración base con rp2 y board rpipico2w

Si sigues una guía más antigua vas a ver rp2040: en ese lugar. Desde ESPHome 2026.7 la plataforma se llama rp2, porque cubre los dos chips. La clave vieja todavía funciona, pero está anunciado que deja de existir en 2027, así que usa la nueva desde ya.

Agregar sensores y LED

Debajo de lo que generó el Device Builder agregas los sensores y la LED. No toques la clave de la API ni las contraseñas que ya están en tu archivo:

YAML
sensor:
  # Chip temperature (RP2350 internal sensor), raw value
  - platform: internal_temperature
    name: "Chiptemperatur roh"
    update_interval: 60s

  # Same sensor, calibrated against a thermometer
  - platform: internal_temperature
    name: "Chiptemperatur"
    update_interval: 60s
    filters:
      - offset: -20.0
      - sliding_window_moving_average:
          window_size: 5
          send_every: 1

  - platform: wifi_signal
    name: "WLAN-Signal"
    update_interval: 60s

  - platform: uptime
    name: "Laufzeit"

output:
  - platform: gpio
    pin: LED          # onboard LED, driven via the wireless chip on the W models
    id: onboard_led

light:
  - platform: binary
    name: "Onboard-LED"
    output: onboard_led

Los valores de name vienen del tutorial original en alemán: Chiptemperatur roh es la temperatura del chip en bruto, WLAN-Signal la señal WiFi y Laufzeit el tiempo encendida. Puedes cambiarlos por nombres en español antes de compilar; es el texto que Home Assistant muestra en el panel.

Qué hace cada bloque:

  • internal_temperature lee el sensor que trae el propio chip. ESPHome lo soporta en RP2040 y RP2350. Aparece dos veces a propósito: una con el valor crudo y otra corregida con un offset y un promedio móvil de 5 muestras (sliding_window_moving_average), que suaviza los saltos de lectura. Más abajo está por qué hace falta la corrección.
  • wifi_signal informa la intensidad de la señal en dBm. Sirve para decidir dónde instalar la placa: sobre -67 dBm la conexión es estable; bajo -80 dBm vas a tener cortes.
  • uptime cuenta los segundos desde el último arranque. Si el valor vuelve a cero, la Pico se reinició, y eso suele delatar una fuente de alimentación débil.
  • pin: LED es un pin con nombre. En la Pico W y la Pico 2 W el LED no cuelga de un GPIO normal sino del chip de radio, y ESPHome lo maneja internamente como el pin 64. Solo funciona como salida.

Editor de ESPHome con el bloque sensor (internal_temperature, wifi_signal y uptime) y los bloques output y light para la LED de la placa

Puesta en marcha

Primera instalación por USB

La primera vez la firmware entra por cable; después, todo es por WiFi. En el panel del Device Builder, presiona el ícono de instalar del dispositivo y, en las opciones avanzadas, elige Descargar el binario de la firmware. ESPHome compila y, para la Pico, entrega un archivo .uf2.

Diálogo de ESPHome para elegir cómo instalar la firmware, con el aviso de la primera instalación por USB y la opción de descargar el binario marcada

Para copiarlo:

  1. Mantén presionado el botón BOOTSEL y conecta la Pico al computador.
  2. Suelta el botón. Aparece una unidad llamada RP2350 (en la Pico W se llama RPI-RP2).
  3. Arrastra el .uf2 a esa unidad.

La unidad desaparece a los pocos segundos: la Pico se reinicia con ESPHome y se conecta a tu WiFi. Poco después el Device Builder la muestra como Online.

Panel de ESPHome Device Builder con el equipo de prueba en estado Online

Una advertencia antes de flashear: si la Pico tenía MicroPython, el main.py y el resto de tus archivos se pierden. Respáldalos antes desde Thonny.

Agregarla a Home Assistant

Con la Pico en la red, Home Assistant normalmente la detecta solo y la muestra en Ajustes → Dispositivos y servicios como un dispositivo ESPHome nuevo. Basta con presionar Agregar.

Si no aparece, la agregas a mano: Agregar integración → ESPHome, con la IP de la Pico como host y el puerto 6053, que es el de la API nativa.

Diálogo de la integración ESPHome en Home Assistant con el host 10.42.0.82 y el puerto 6053

¿Te va a pedir la clave de la API? Depende de dónde corre ESPHome. Si el Device Builder es una app dentro de la misma instancia de Home Assistant, Home Assistant toma la clave por su cuenta y no pregunta nada. Si ESPHome corre aparte, por ejemplo en Docker en otro computador, el diálogo la pide: está en el YAML, bajo api: y encryption:.

Home Assistant confirmando que se creó la configuración para el equipo de prueba

Ver los datos y encender la LED

En Ajustes → Dispositivos y servicios → ESPHome encuentras la Pico con sus entidades. Home Assistant la identifica como rpipico2w de Raspberry Pi y muestra la versión de ESPHome de la firmware.

Después de once minutos encendida, la placa del autor original entregó esto:

Entidad Valor
Temperatura del chip, cruda 41,7 °C
Temperatura del chip, corregida (todavía con offset de -13) 28,6 °C
Señal WiFi -38 dBm
Tiempo encendida 661 s
LED de la placa encendido y apagado

El interruptor de la LED, en la sección de control, prende la LED verde junto al conector USB. Es la prueba más rápida de que la comunicación funciona en los dos sentidos: la Pico manda datos y recibe órdenes.

Página del equipo de prueba en Home Assistant con la LED de la placa encendida y los valores de diagnóstico de temperatura del chip y tiempo encendida

Vas a notar que todos los sensores quedan en Diagnóstico. ESPHome clasifica así la temperatura del chip, la señal WiFi y el tiempo encendida porque son datos sobre el propio equipo. Si quieres usar uno en el panel principal o en una automatización, agrégale la línea entity_category: "" a ese sensor: según la documentación de ESPHome, eso le quita la categoría por defecto.

Actualizaciones por WiFi

De aquí en adelante, cada cambio al YAML se instala con Instalar → Por red. En la Pico 2 W del original, compilar tomó unos 19 segundos y la transferencia va cifrada.

Un dato que importa si tienes la red segmentada: la Pico recibe las actualizaciones OTA por el puerto 2040, no por el 3232 que usa el ESP32. La API nativa, en cambio, va por el 6053 en ambos. Si hay un firewall entre Home Assistant y la placa, abre los dos.

Registro de ESPHome de una actualización OTA con uso de RAM y flash cercano al 15 % y la conexión a 10.42.0.82 por el puerto 2040

Con cuatro sensores y la LED, la firmware ocupó el 15,4 % de la RAM y el 15,3 % de la flash. Queda espacio de sobra para más sensores, una pantalla o automatizaciones que corran en la propia Pico.

Por qué la temperatura del chip marca de más

Con unos 22 °C en la habitación, el valor crudo bajo ESPHome quedó casi 20 grados por encima. El día anterior, la misma placa con MicroPython marcaba 35,5 °C con 22,5 °C de ambiente: 13 grados de diferencia. Hay tres razones que se suman:

  1. Mide el silicio, no el aire. El sensor está dentro del RP2350 y registra la temperatura del chip.
  2. El WiFi calienta. Con ESPHome, la radio está activa todo el tiempo, y el chip de radio está a milímetros del procesador en la misma placa. Con MicroPython, la radio pasaba más tiempo inactiva. Eso explica que el desfase suba de 13 a 20 grados con la misma placa.
  3. El ADC no tiene referencia propia. El sensor entrega un voltaje que el conversor analógico digital compara con la alimentación de 3,3 V. Si esa alimentación varía unos milivoltios, la lectura se mueve con ella.

Por eso el offset vale solo para tu placa y tu firmware. Para calibrarlo, deja la Pico funcionando media hora, compara el valor crudo con un termómetro y anota la diferencia. Y si lo que quieres es la temperatura de la habitación, necesitas un sensor externo.

Solución de problemas

Síntoma Causa probable Qué hacer
La validación falla en el WiFi Elegiste una placa sin radio rpipico y rpipico2 no tienen WiFi; usa rpipicow o rpipico2w
Clon "Pico W" que no conecta Usa un chip de radio de Espressif en lugar del CYW43439 ESPHome no lo soporta; usa una placa oficial
No se conecta después de flashear Red de solo 5 GHz o error de tipeo en los secretos Conéctala por USB, abre web.esphome.io en Chrome o Edge y revisa los Logs
Funciona, pero el Device Builder la muestra offline mDNS (nombre.local) no cruza entre redes: WiFi de invitados, VLAN o VPN Agrega use_address: 192.168.x.y con la IP fija de la Pico bajo wifi: y súmala a Home Assistant por IP
No aparece la unidad USB Cable solo de carga o BOOTSEL no presionado Cambia el cable; con una firmware ya cargada, BOOTSEL debe estar presionado al conectar
uptime vuelve a cero cada tanto Reinicios por alimentación débil Prueba otra fuente o cable USB más corto

El caso de mDNS le pasó al autor original: su placa de pruebas estaba detrás de un router de viaje con VPN. La solución con use_address funciona siempre que Home Assistant tenga permiso para llegar a esa red.

Variantes y mejoras

  • Un sensor de ambiente de verdad: BME280 por I2C. Es el siguiente paso natural después de ver el error del sensor interno. El BME280 mide temperatura, humedad y presión, y se conecta con cuatro cables: 3V3, GND, SDA y SCL. En la Pico, el bus I2C0 por defecto está en GP4 (SDA) y GP5 (SCL). En el YAML agregas un bloque i2c: con esos pines y, dentro de sensor:, una entrada platform: bme280_i2c con sus tres mediciones. Aléjalo de la placa con unos 10 cm de cable, o el calor del WiFi que viste antes también le va a subir la lectura.
  • Un relé en el mismo YAML. Con un output de tipo gpio en un pin libre (por ejemplo GP15) y un switch encima, Home Assistant ve un interruptor más. Ojo con la lógica: la Pico entrega 3,3 V, así que usa un módulo de relé que se active con 3,3 V o uno con optoacoplador alimentado a 5 V desde el pin VBUS. Para cargas de 220 V, la caja y el cableado tienen que ser los de una instalación eléctrica, no los de una protoboard.
  • Un botón que dispara automatizaciones. Un pulsador entre un GPIO y GND, con el pull up interno activado, se declara como binary_sensor y sirve como interruptor de escena. En placas Pico 2 con la revisión A2 del chip, revisa la errata E9 del RP2350: conectar el botón a GND con pull up interno, como en este ejemplo, es la forma que la evita.

Personalización para Chile

En Chile consigues lo necesario para este montaje en MechatronicStore. Busca en el catálogo:

  • Raspberry Pi Pico 2 W: la placa de esta guía, con RP2350 y el chip de radio CYW43439 que ESPHome soporta.
  • Raspberry Pi Pico W: alternativa con RP2040, igual de compatible con ESPHome.
  • Cable USB a micro USB de datos: para la primera instalación de la firmware.
  • Raspberry Pi 4 o Raspberry Pi 5: si todavía no tienes dónde correr Home Assistant, cualquiera de las dos lo mueve sin problema.

Para la variante con sensor externo, busca también un sensor BME280 y un módulo relé de 1 canal. Si en el original usan el Pico 2 WH con pines soldados, la Pico 2 W con una tira de pines macho soldada cumple la misma función.

Recursos

Versión chilena con componentes que consigues en Chile.