Lector RSS de noticias tech para Raspberry Pi Zero 2W con pantalla Waveshare 1.44" LCD HAT (128x128px). Muestra titulares de tecnología, IA, Linux, ciberseguridad y ciencia en español, con estilo Matrix (verde sobre negro). Diseñado para funcionar 24/7 como panel informativo de escritorio.
Raspberry Pi Zero 2 W con el Waveshare 1.44" LCD HAT montado
Simulador Pygame en modo desarrollo (mismo render que la pantalla real)
Pantallas en hardware real: carga, noticias, resumen y ajustes
- 20 feeds RSS en español: tech, IA, Linux, seguridad, ciencia
- Auto-avance de artículos cada 30s por defecto (configurable: 10s/30s/60s/120s/OFF)
- Pantalla de resumen con scroll para leer artículos
- Menú de ajustes para activar/desactivar feeds e intervalos de auto-avance y actualización
- Estilo Matrix verde sobre negro, optimizado para 128x128px
- Cero escritura en SD durante el uso normal (cache en RAM)
- Actualización automática de feeds cada 15 minutos en background
- Python >=3.12 con uv
- feedparser, Pillow, PyYAML, requests
- lgpio + spidev (display Pi) / gpiozero (botones Pi) / pygame (desarrollo)
- Fuente Cozette (MIT)
# Clonar y configurar
git clone https://github.com/Jaolmos/pizerorss.git
cd pizerorss
uv venv --python 3.12
uv sync --extra dev
# Ejecutar simulador
uv run python src/main.py --devEl simulador Pygame muestra la pantalla a escala x4 (512x512) y usa el teclado como controles.
| Tecla | Acción |
|---|---|
| ↑ / ↓ | Artículo anterior / siguiente |
| ← / → | Feed anterior / siguiente |
| Enter o A | Abrir resumen del artículo |
| B | Marcar artículo como leído |
| C mantenido 1s | Abrir menú de ajustes |
| Tecla | Acción |
|---|---|
| ↑ / ↓ | Scroll del texto |
| Enter, A o ← | Volver a noticias |
| Tecla | Acción |
|---|---|
| ↑ / ↓ | Navegar opciones |
| Enter o A | Cambiar valor / Entrar en submenú |
| C o ← | Volver |
El menú tiene 3 opciones: Intervalo (10s/30s/60s/120s/OFF), Update (5m/15m/30m/1h) y Feeds (submenú para activar/desactivar feeds individuales).
Hardware utilizado: Raspberry Pi Zero 2 WH (con pines pre-soldados) + Waveshare 1.44" LCD HAT + microSD + cable micro-USB. Guía completa: docs/setup-pi.md.
Resumen rápido:
git clone https://github.com/Jaolmos/pizerorss.git ~/pizerorss
cd ~/pizerorss
./setup.sh
sudo systemctl start pizerorss.serviceEl HAT tiene un joystick de 5 direcciones (izquierda) y 3 botones KEY1/KEY2/KEY3 (derecha).
| Control | Acción |
|---|---|
| Joystick ↑ / ↓ | Artículo anterior / siguiente |
| Joystick ← / → | Feed anterior / siguiente |
| Joystick PRESS o KEY1 | Abrir resumen del artículo |
| KEY2 | Marcar artículo como leído |
| KEY3 mantenido 1s | Abrir menú de ajustes |
| Control | Acción |
|---|---|
| Joystick ↑ / ↓ | Scroll del texto |
| Joystick PRESS, KEY1 o Joystick ← | Volver a noticias |
| Control | Acción |
|---|---|
| Joystick ↑ / ↓ | Navegar opciones |
| Joystick PRESS o KEY1 | Cambiar valor / Entrar en submenú |
| KEY3 o Joystick ← | Volver |
pizerorss/
├── config/feeds.yaml # Configuración de feeds y display
├── src/
│ ├── main.py # Entry point (--dev para simulador)
│ ├── app.py # Orquestador principal
│ ├── config/settings.py # Gestión de configuración YAML
│ ├── display/
│ │ ├── st7735.py # Driver ST7735S (lgpio + SPI)
│ │ ├── renderer.py # Renderizado UI con Pillow (128x128)
│ │ └── simulator.py # Simulador Pygame para PC
│ ├── feeds/
│ │ ├── manager.py # Cache en RAM + actualizaciones background
│ │ └── parser.py # Parsing RSS con feedparser
│ ├── input/
│ │ └── controller.py # Teclado (dev) / GPIO (Pi)
│ └── ui/
│ ├── screen.py # Interfaz base de pantallas
│ ├── news_screen.py # Pantalla de titulares
│ ├── summary_screen.py # Resumen del artículo
│ ├── settings_screen.py # Menú de ajustes
│ └── feeds_screen.py # Submenú de feeds (activar/desactivar)
├── assets/fonts/ # Fuente Cozette
├── screenshots/ # Capturas
└── systemd/ # Servicio para la Pi
| Categoría | Feeds |
|---|---|
| Tech | Xataka, Computerhoy, Microsiervos, WWWhat's New, NeoTeo, Hipertextual, El Chapuzas Informático |
| IA | IA en Español, Enrique Dans |
| Linux | Linux Adictos, Ubunlog, DesdeLinux |
| Seguridad | Una Al Día (Hispasec), RedesZone |
| Ciencia | Naukas, Muy Interesante |
Edita config/feeds.yaml y añade un nuevo bloque siguiendo este formato:
feeds:
- name: "Xataka"
url: "https://www.xataka.com/feedburner.xml"
enabled: true
category: "tech"
# Ejemplo: añadir un nuevo feed
- name: "Mi Blog Favorito"
url: "https://ejemplo.com/feed"
enabled: true
category: "tech"Campos:
name: nombre corto que se muestra arriba de cada titular (máx. ~18 caracteres para que quepa en la pantalla).url: URL del feed RSS/Atom (.xml,/feed,/rss, etc.).enabled:truepara mostrarlo,falsepara desactivarlo sin borrarlo.category: etiqueta libre (tech,ia,ciencia,linux,seguridad...).
También puedes desactivar feeds desde la propia aplicación sin editar el YAML: abre el menú de ajustes (pulsación larga del botón C) y navega hasta el feed para cambiar su estado.
Tras modificar manualmente el fichero, reinicia la aplicación para que los cambios surtan efecto:
sudo systemctl restart pizerorss.service- Interfaces ABC para Display e InputController (inversión de dependencias)
- Thread-safe: actualizaciones de feeds en hilo background con Lock + swap atómico
- Dirty flag rendering: solo re-renderiza cuando hay cambios
- Escritura atómica del YAML (tempfile + rename) para proteger la microSD
- Todo el estado en RAM: artículos, leídos, cache — cero escrituras en SD durante el uso
MIT