
Monitoriza Temperatura y Humedad con Raspberry Pi y DHT22 (AM2302): Guía Paso a Paso con Python
En el aula STEAM nos encanta registrar datos del entorno para analizarlos con el alumnado. Hoy vamos a aprender a conectar el sensor de temperatura y humedad DHT22 (versión AM2302) a una Raspberry Pi 4 para capturar lecturas en tiempo real y almacenarlas automáticamente en un archivo .csv compatible con Excel o Google Sheets.
Esta práctica es perfecta para proyectos meteorológicos, automatización o, en nuestro caso, para registrar la bajada brusca de temperatura durante eventos astronómicos como un eclipse solar.
🛠️ Materiales Necesarios
- Raspberry Pi (probado en Raspberry Pi 4 Model B con Raspberry Pi OS).
- Sensor AM2302 / DHT22 (prefiere el modelo blanco por su precisión de 0.1 °C frente al DHT11 azul).
- 3 Cables Jumper (hembra – hembra).
🔌 1. Esquema de Conexiones Físicas (GPIO)
Si tu sensor AM2302 viene montado en un pequeño módulo de 3 pines, no necesitas añadir resistencias adicionales porque la placa ya la lleva integrada.
Colocando la Raspberry Pi con los puertos USB mirando hacia la derecha y la tira de 40 pines en el borde superior, realiza las siguientes conexiones contando de izquierda a derecha:
| Pin del Sensor (AM2302) | Nombre del Pin | Pin Físico en la Raspberry Pi | Función en la Pi |
+ (VCC) | Alimentación | Pin 1 (o Pin 2 / 4 si usas 5V) | 3.3V / 5V |
- (GND) | Tierra / Masa | Pin 6 (Tercer pin de la fila superior) | GND |
out / DAT | Señal de Datos | Pin 7 (Cuarto pin de la fila inferior) | GPIO 4 |
💡 Consejo práctico: El sensor AM2302 funciona tanto a 3.3V como a 5V. Si notas inestabilidad en las lecturas, conéctalo al pin de 5V (Pin 2 o 4) para darle mayor estabilidad eléctrica.
📦 2. Instalación de Librerías y Dependencias
En las versiones más recientes del sistema operativo de la Raspberry Pi (Raspberry Pi OS Bookworm), las librerías de Python se gestionan de forma segura. Usaremos la suite de Adafruit CircuitPython y la capa de compatibilidad Blinka.
Abre la terminal de tu Raspberry Pi y ejecuta los siguientes comandos:
Bash
# 1. Actualizar los paquetes del sistema
sudo apt update
# 2. Instalar el soporte para GPIO e instalador de paquetes
sudo apt install -y python3-pip libgpiod2
# 3. Instalar la librería de Adafruit para sensores DHT y la capa de compatibilidad
pip3 install adafruit-blinka adafruit-circuitpython-dht --break-system-packages
🐍 3. Código en Python (regec.py)
Crea un archivo llamado regec.py en tu Raspberry Pi (por ejemplo con nano regec.py) y pega el siguiente código. Cuenta con control de excepciones, tolerancia a fallos de lectura y guardado instantáneo en disco (flush).
Python
import time
import csv
from datetime import datetime
import board
import adafruit_dht
# ---------------------------------------------------------------------
# CONFIGURACIÓN DEL SENSOR Y ARCHIVO
# ---------------------------------------------------------------------
# Inicializamos el DHT22 indicando que el pin de datos está en GPIO 4 (Pin físico 7)
dhtDevice = adafruit_dht.DHT22(board.D4)
# Nombre del archivo CSV donde guardaremos la serie temporal
NOMBRE_ARCHIVO = "datos_temperatura.csv"
# ---------------------------------------------------------------------
# PREPARACIÓN DEL ARCHIVO CSV
# ---------------------------------------------------------------------
# Abrimos el archivo en modo 'append' (añadir) para no sobrescribir datos previos
with open(NOMBRE_ARCHIVO, mode='a', newline='') as file:
# Si el archivo es nuevo (tamaño igual a 0), escribimos los encabezados
if file.tell() == 0:
writer = csv.writer(file)
writer.writerow(["Fecha y Hora", "Temperatura (C)", "Humedad (%)"])
print("--- INICIANDO REGISTRO DE DATOS CON DHT22 / AM2302 ---")
print("Esperando 3 segundos para la estabilización del sensor...")
time.sleep(3)
print(f"Los datos se guardarán automáticamente en: {NOMBRE_ARCHIVO}")
print("Presiona Ctrl+C para detener la grabación.\n")
# ---------------------------------------------------------------------
# FUNCIÓN DE LECTURA CON REINTENTOS
# ---------------------------------------------------------------------
def leer_sensor_con_reintentos(max_intentos=5):
"""
Los sensores DHT utilizan un protocolo de un solo hilo muy sensible al timing del SO.
Esta función reintenta la lectura hasta obtener un dato válido sin bloquear el programa.
"""
for intento in range(max_intentos):
try:
temp = dhtDevice.temperature
hum = dhtDevice.humidity
if temp is not None and hum is not None:
return temp, hum
except RuntimeError:
# Los errores de sincronización puntuales son normales en sensores DHT
time.sleep(1)
except Exception as e:
print(f"Error crítico en el sensor: {e}")
break
return None, None
# ---------------------------------------------------------------------
# BUCLE PRINCIPAL DE CAPTURA
# ---------------------------------------------------------------------
try:
while True:
# Marca de tiempo con formato ISO estándar (Año-Mes-Día Hora:Minuto:Segundo)
ahora = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
temp, hum = leer_sensor_con_reintentos()
if temp is not None and hum is not None:
# 1. Mostrar la lectura formateada en la consola
print(f"[{ahora}] -> REGISTRADO: Temp = {temp:.1f} °C | Humedad = {hum:.1f} %")
# 2. Guardar en el archivo CSV y forzar la escritura en la MicroSD
with open(NOMBRE_ARCHIVO, mode='a', newline='') as file:
writer = csv.writer(file)
writer.writerow([ahora, f"{temp:.1f}", f"{hum:.1f}"])
file.flush() # flush() evita que los datos queden en la caché de RAM si se corta la luz
else:
print(f"[{ahora}] -> Reintentando lectura del sensor...")
# El DHT22 requiere al menos 2 segundos entre mediciones (usamos 3 por seguridad)
time.sleep(3)
except KeyboardInterrupt:
print("\n--- REGISTRO DETENIDO CORRECTAMENTE POR EL USUARIO ---")
dhtDevice.exit()
https://github.com/jusevil271/raspberrypi/blob/main/raspberrypidht22.py
🚀 4. Ejecución y Comprobación
Para lanzar el script desde la terminal, ejecuta:
Bash
python3 regec.py
Verás cómo en la consola aparecen las lecturas con fecha y hora cada pocos segundos. Para detener el registro basta con pulsar Ctrl + C.
Si quieres comprobar que los datos se han volcado correctamente en tu archivo CSV, ejecuta:
Bash
cat datos_temperatura.csv
¡Y listo! Ya tienes una estación de registro ambiental lista para proyectos de aula, análisis de datos y experimentación en tiempo real.

Etiqueta:Adafruit DHT22, AM2302 Raspberry Pi, conectar DHT22 Raspberry Pi, DHT22 GPIO4, DHT22 Raspberry Pi, electrónica educativa, GPIO Raspberry Pi DHT22, humedad Raspberry Pi, ies monterroso, leer DHT22 Python, programación Raspberry Pi, Python Raspberry Pi, Raspberry Pi DHT22, Raspberry Pi OS, Raspberry Pi sensores, Raspberry Pi temperatura humedad, sensor DHT22 Python, sensores Raspberry Pi, temperatura Raspberry Pi, tutorial DHT22 Raspberry Pi



