Estación meteorológica con Raspberry Pi paso a paso
Con menos de 35 € en componentes y una tarde libre puedes tener temperatura, humedad y presión barométrica del jardín en Home Assistant. Aquí está todo lo que necesitas para montarlo desde cero.
Tienes una Raspberry Pi sin usar. Esto es para ti
Si tienes una Raspberry Pi cogiendo polvo en un cajón —o estás buscando excusa para pillar una Zero 2 W— y te ha picado la curiosidad de saber si realmente hace más frío en tu terraza que en el salón, o si la humedad de tu sótano está en niveles razonables, este proyecto es exactamente lo que andabas buscando. No necesitas experiencia previa en electrónica: si ya has instalado Raspberry Pi OS y has seguido algún tutorial de Python, tienes más que suficiente.
Quizás has visto proyectos de estaciones meteorológicas en YouTube que parecen brutales pero que luego requieren placas PCB personalizadas, impresión 3D de carcasas complejas y dos semanas de configuración. Aquí no. Este tutorial cubre el camino desde los sensores hasta Home Assistant con cableado básico, una Raspberry Pi y unos 40 € en componentes. Sí, habrá algún momento de «¿por qué no me lee el sensor?», pero lo veremos.
Al final del post tendrás temperatura, humedad y presión atmosférica de tu entorno inmediato llegando en tiempo real a Home Assistant, con históricos y la posibilidad de crear automatizaciones a partir de esos datos. Sin promesas de precisión meteorológica profesional —estos sensores de bajo coste no están calibrados al nivel de una estación AEMET—, pero para uso doméstico y proyectos maker es más que suficiente.
Por qué importa
Sensores de bajo coste
DHT22 y BME280 por menos de 10 € en total: temperatura, humedad y presión barométrica con una sola Raspberry Pi Zero 2 W.
Integración con Home Assistant
MQTT conecta los sensores directamente a Home Assistant. Sin drivers raros: ESPHome o un script Python con Adafruit CircuitPython.
Consumo mínimo 24/7
La Pi Zero 2 W consume ~1 W en idle. Funciona sin parar con un cargador de 5 V corriente.
Instalación con lo que ya tienes
GPIO, I2C y SPI se activan en raspi-config. Sin compilar módulos ni instalar nada fuera del repositorio oficial.
Lo que necesitas antes de soldar nada
Para este proyecto uso una Raspberry Pi Zero 2 W porque consume alrededor de 1 W en idle y cabe en cualquier carcasa pequeña. Sirve cualquier Pi con GPIO y WiFi, pero el Zero 2 W es el equilibrio perfecto entre precio (~17 €) y consumo 24/7 sin remordimientos en la factura.
Lista de componentes:
- Raspberry Pi Zero 2 W (o Pi 3/4 si ya tienes una libre)
- Sensor DHT22 — temperatura y humedad relativa
- Sensor BME280 — presión barométrica y temperatura de respaldo
- Resistencia de 10 kΩ (pull-up para el DHT22)
- Cables dupont hembra-hembra
- Protoboard pequeña o PCB de prototipado
- Carcasa impresa en 3D o caja de derivación IP65 para exterior
- Fuente de alimentación 5 V / 2,5 A
El coste total ronda los 25-35 €, dependiendo de dónde compres los sensores. Los encuentras en AliExpress, Amazon o cualquier tienda local de electrónica.
Conectar los sensores
DHT22 — temperatura y humedad
El DHT22 tiene cuatro pines físicos: VCC, DATA, NC (no conectar) y GND. En la práctica solo usas tres.
- VCC → Pin 1 de la Pi (3,3 V) — no uses 5 V aunque algunos esquemas lo muestren así
- DATA → GPIO 4 (Pin 7)
- GND → Pin 6
Entre VCC y DATA pon una resistencia pull-up de 10 kΩ. Sin ella las lecturas fallan de forma intermitente y tardas un rato en entender por qué. La frecuencia máxima de lectura recomendada para el DHT22 es una muestra cada 2 segundos mínimo; leer más rápido devuelve errores o valores repetidos.
BME280 — presión barométrica
El BME280 habla I2C, lo que simplifica mucho el cableado respecto al DHT22:
- VCC → Pin 1 (3,3 V)
- GND → Pin 6
- SDA → GPIO 2 (Pin 3)
- SCL → GPIO 3 (Pin 5)
La dirección I2C por defecto del BME280 es 0x76. Si tu módulo tiene el pin SDO conectado a VCC, será 0x77. Puedes verificarlo con i2cdetect -y 1 una vez tengas I2C activado.
El BME280 es prácticamente igual al BMP280 en footprint y precio (~3-5 €), pero añade medición de humedad al mismo chip. Si buscas los dos sensores en uno, el BME280 es el candidato obvio.
Preparar la Raspberry Pi
Activar I2C y dependencias
Desde raspi-config activa la interfaz I2C:
sudo raspi-config
→ Interface Options → I2C → Enable
Raspberry Pi OS incluye soporte para I2C y GPIO sin compilar módulos adicionales; basta con activarlo aquí. Después instala las librerías Python:
sudo apt update
sudo apt install python3-pip i2c-tools -y
pip3 install adafruit-circuitpython-dht adafruit-circuitpython-bme280 paho-mqtt
Verifica que el BME280 aparece en el bus antes de seguir:
i2cdetect -y 1
Deberías ver 76 (o 77) en la tabla. Si no aparece, revisa el cableado SDA/SCL y la tensión de alimentación antes de continuar.
El script de lectura
Este script lee ambos sensores cada 60 segundos y publica los datos por MQTT:
import time
import board
import adafruit_dht
import adafruit_bme280.advanced as adafruit_bme280
import busio
import paho.mqtt.client as mqtt
MQTT_HOST = '192.168.1.X'
MQTT_PORT = 1883
TOPIC_BASE = 'casa/exterior'
dht = adafruit_dht.DHT22(board.D4)
i2c = busio.I2C(board.SCL, board.SDA)
bme = adafruit_bme280.Adafruit_BME280_I2C(i2c)
client = mqtt.Client()
client.connect(MQTT_HOST, MQTT_PORT)
while True:
try:
temp_dht = dht.temperature
hum_dht = dht.humidity
pres_bme = bme.pressure
client.publish(f'{TOPIC_BASE}/temperatura', round(temp_dht, 1))
client.publish(f'{TOPIC_BASE}/humedad', round(hum_dht, 1))
client.publish(f'{TOPIC_BASE}/presion', round(pres_bme, 2))
print(f'T:{temp_dht:.1f} C H:{hum_dht:.1f}% P:{pres_bme:.1f}hPa')
except RuntimeError as e:
print(f'Error lectura: {e}')
time.sleep(60)
Guárdalo como estacion.py y pruébalo con python3 estacion.py antes de dejarlo corriendo como servicio.
Integrar con Home Assistant
Broker MQTT (Mosquitto)
Si ya tienes Home Assistant, lo más cómodo es instalar el complemento Mosquitto broker desde la tienda de add-ons oficial. Si no, instálalo en cualquier máquina de la red:
sudo apt install mosquitto mosquitto-clients -y
sudo mosquitto_passwd -c /etc/mosquitto/passwd estacion
sudo systemctl restart mosquitto
Anota el usuario y contraseña que configures; los necesitarás en el script Python y en la configuración de HA.
Configurar los sensores en HA
En configuration.yaml añade los sensores MQTT:
mqtt:
sensor:
- name: 'Exterior Temperatura'
state_topic: 'casa/exterior/temperatura'
unit_of_measurement: 'C'
device_class: temperature
- name: 'Exterior Humedad'
state_topic: 'casa/exterior/humedad'
unit_of_measurement: '%'
device_class: humidity
- name: 'Exterior Presion'
state_topic: 'casa/exterior/presion'
unit_of_measurement: 'hPa'
device_class: pressure
Reinicia Home Assistant y los sensores aparecerán en el panel de dispositivos. Desde ahí puedes añadirlos a dashboards, crear automatizaciones o exportar el histórico a InfluxDB si tienes esa integración activa.
La carcasa: el detalle que más importa
Este es el punto donde más proyectos fracasan silenciosamente. Un sensor exterior expuesto al sol directo puede leer 10-15 °C por encima de la temperatura real por efecto invernadero dentro de la caja.
La solución clásica es un escudo de radiación: varias láminas apiladas con ventilación natural que protegen el sensor de la radiación solar directa pero permiten que el aire circule libremente. En Thingiverse y Printables hay docenas de modelos listos para imprimir en PETG o ASA.
- Orientar las aberturas hacia abajo y al norte (hemisferio norte)
- Usar PETG o ASA para imprimir, nunca PLA en exterior
- Añadir un pequeño agujero de drenaje en la parte inferior de la caja electrónica
- El DHT22 sin protección adecuada puede degradarse en meses expuesto a la intemperie directa
En mi caso uso una caja de derivación IP65 de 10×10 cm para la electrónica y un escudo de radiación impreso en PETG para los sensores. Lleva dos veranos funcionando sin problemas.
Lo que sale mal (y cómo anticiparlo)
Lecturas erráticas del DHT22. Casi siempre es la resistencia pull-up. Si no la pusiste, ponla. Si ya la tienes y sigue fallando, prueba con 4,7 kΩ en lugar de 10 kΩ.
El BME280 no aparece en i2cdetect. Revisa el cableado SDA/SCL y confirma que la tensión es 3,3 V. Algunos módulos baratos tienen regulador de tensión incluido y aguantan 5 V, pero no todos.
MQTT desconectado tras horas de funcionamiento. Añade manejo de reconexión al script:
client.on_disconnect = lambda c, u, rc: client.reconnect()
client.loop_start()
El script no arranca tras un reinicio. Créalo como servicio systemd para que arranque solo con la Pi:
sudo nano /etc/systemd/system/estacion.service
[Unit]
Description=Estacion meteorologica
After=network.target
[Service]
ExecStart=/usr/bin/python3 /home/pi/estacion.py
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
sudo systemctl enable estacion
sudo systemctl start estacion
Con esto la estación arranca sola en cada reinicio, se reconecta si MQTT cae y registra errores en el journal del sistema (journalctl -u estacion -f). A partir de aquí, el único mantenimiento real es revisar la carcasa exterior una vez al año y limpiar los sensores de polvo o suciedad acumulada.
Preguntas frecuentes
Q: ¿Cuánto cuesta montar la estación desde cero?
A: El coste depende del hardware que ya tengas. Una Raspberry Pi Zero 2 W ronda los 15-18 €, el DHT22 menos de 5 € y el BME280 entre 3-5 €. Con cables, caja y fuente de alimentación, puedes estar por debajo de 40-50 € en total si compras en AliExpress o similares.
Q: ¿Vale el DHT22 para uso en exterior todo el año?
A: Con protección adecuada sí, pero con matices: la caja debe estar ventilada y a la sombra para evitar el efecto invernadero, y aun así la vida útil del sensor puede degradarse en meses si queda expuesto a lluvia o humedad alta de forma continua sin carcasa IP apropiada.
Q: ¿Por qué añadir el BME280 si ya tengo el DHT22?
A: Porque el DHT22 no mide presión barométrica. El BME280 añade ese dato (300-1100 hPa, resolución 0,01 hPa) y también mide humedad, todo por el mismo precio aproximado. Si quieres seguir frentes atmosféricos o tendencias de tiempo, el BME280 es el complemento natural.
Q: ¿Cómo conecto los sensores a Home Assistant?
A: El flujo habitual es: Raspberry Pi lee los sensores via Python (librerías Adafruit CircuitPython) → publica los datos por MQTT → Home Assistant los recibe mediante la integración MQTT. Alternativamente puedes usar ESPHome si prefieres un microcontrolador en lugar de la Pi, que tiene integración nativa con Home Assistant.
Q: ¿Con qué frecuencia puedo leer datos del DHT22?
A: El DHT22 impone un mínimo de 2 segundos entre lecturas; intentar muestrear más rápido provoca errores de lectura. En la práctica, para una estación doméstica tiene sentido publicar cada 30-60 segundos; leer más a menudo no aporta información útil y genera tráfico MQTT innecesario.











Deja una respuesta