Raspberry Pi con Python
El Arduino lee sensores, pero no sabe procesar, guardar ni ver. Para eso necesitamos un cerebro más grande: la Raspberry Pi. En este módulo añadimos a la «Estación inteligente del salón» la pieza de procesamiento y visión: la Pi recibe los datos del ambiente, los procesa con Python y, opcionalmente, usa su cámara para detectar presencia. Y lo hacemos de forma profesional, aislando dependencias con venv.
¿Qué es?
La Raspberry Pi es un computador completo del tamaño de una tarjeta de crédito. A diferencia del Arduino, sí ejecuta un sistema operativo (Raspberry Pi OS, basado en Linux), corre Python directamente y tiene puertos USB, HDMI, WiFi y una cámara dedicada. También tiene pines GPIO para hablar con el hardware.
¿Cómo funciona?
Es Linux. Te conectas por SSH o pantalla, abres una terminal y ejecutas Python como en cualquier PC. Sus 40 pines GPIO funcionan a 3.3V y los controlas con librerías de Python como gpiozero. La cámara se maneja con picamera2.
¿Para qué sirve?
En nuestra estación, la Pi es el coordinador: recibe lecturas (del Arduino por USB o de sensores propios), las procesa, las registra y prepara el envío a la nube. Su capacidad extra le permite además hacer visión por computador (contar personas, leer un código).
Paso 0: aislar dependencias con venv
Antes de instalar nada, una regla de oro de Python en la Pi: nunca instales paquetes en el Python del sistema. Crea un entorno virtual (venv) para el proyecto. Así, sus dependencias quedan aisladas y no rompes herramientas del sistema operativo.
# En la terminal de la Raspberry Pi
mkdir estacion-salon
cd estacion-salon
# Crear el entorno virtual (carpeta .venv)
python3 -m venv .venv
# Activarlo: el prompt cambiará a (.venv)
source .venv/bin/activate
# Ahora pip instala SOLO dentro de este entorno
pip install gpiozero adafruit-circuitpython-dht
Cada vez que abras una terminal nueva para trabajar en el proyecto, vuelve a ejecutar source .venv/bin/activate. Para salir del entorno, escribe deactivate.
Tech English: virtual environment (entorno virtual), activate/deactivate (activar/desactivar), headless (sin pantalla, por SSH).
La pieza que construye: leer el DHT22 y registrar lecturas
Conectamos el DHT22 directamente a la Pi (que trabaja a 3.3V, ideal para él).
3.3V, no 5V. Los GPIO de la Pi NO toleran 5V. Alimenta el DHT22 desde el pin de 3.3V, nunca desde el de 5V cuando el pin de datos va a un GPIO.
Conexiones (DHT22 a la Raspberry Pi):
- Pin VCC del DHT22 → pin 3.3V de la Pi (pin físico 1).
- Pin GND del DHT22 → GND de la Pi (pin físico 6).
- Pin DATA del DHT22 → GPIO4 (pin físico 7).
Con el venv activado, creamos estacion.py:
import time
from datetime import datetime
import board
import adafruit_dht
# El sensor DHT22 conectado al pin GPIO4 (board.D4)
sensor = adafruit_dht.DHT22(board.D4)
UMBRAL_TEMP = 28.0 # °C de alerta
def leer_y_registrar():
try:
temperatura = sensor.temperature # en °C
humedad = sensor.humidity # en %
except RuntimeError as error:
# Es normal que el DHT22 falle alguna lectura; reintenta luego
print(f"Lectura fallida, reintentando: {error}")
return
sello = datetime.now().strftime("%H:%M:%S")
alerta = "ALERTA" if temperatura >= UMBRAL_TEMP else "ok"
linea = f"{sello} temp={temperatura:.1f}C hum={humedad:.1f}% [{alerta}]"
print(linea)
# Registrar en un archivo de log para no perder datos
with open("lecturas.log", "a") as archivo:
archivo.write(linea + "\n")
if __name__ == "__main__":
print("Estacion (Raspberry Pi) en marcha. Ctrl+C para detener.")
while True:
leer_y_registrar()
time.sleep(2) # El DHT22 necesita 2s entre lecturas
Ejecuta con python estacion.py (con el venv activo). Verás las lecturas en pantalla y se irán guardando en lecturas.log. Ese log es la prueba de que la Pi ya está procesando y persistiendo los datos del ambiente, listos para enviarse a la nube en el módulo final.
Opcional: presencia con la cámara
Si tienes la cámara de la Pi, instala picamera2 y captura una foto para luego contar personas (lo veríamos con visión por computador):
from picamera2 import Picamera2
cam = Picamera2()
cam.start()
cam.capture_file("salon.jpg") # Guarda una foto del salón
cam.stop()
Ejercicios
- Modifica
estacion.pypara que, además del log, encienda un LED conectado a un GPIO (usagpiozero.LED) cuando se supere el umbral. - Crea un
requirements.txtconpip freeze > requirements.txty explica en dos frases por qué eso, junto con elvenv, hace tu proyecto reproducible en otra Pi.