Files
2026-08-15 15:19:42 +02:00

123 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PRRPC — Pico Real Rich Presence
> Physical status monitor for Linux environments. Displays contextual active application information on a secondary LCD screen powered by RP2040.
**Live:** [prrpc.jrodriiguezg.link](https://prrpc.jrodriiguezg.link)
**GitHub:** [jrodriiguezg/PRRPC](https://github.com/jrodriiguezg/PRRPC)
---
## Overview
PRRPC is an open-source hardware/software project that bridges your Linux desktop with a physical secondary display. A Python service running on the host PC detects the currently active application via GNOME's accessibility API and sends that information over USB serial to an RP2040 microcontroller, which renders a graphical icon on a 1.69" IPS LCD screen.
It operates in two distinct modes:
| Version | Mode | Description |
|---|---|---|
| V1 | Auto Monitoring | Automatic active-app detection and display |
| V2 | MacroDeck | Interactive mode with browser-based emoji control |
## Architecture
```
Host PC (Linux / GNOME / Wayland)
│ pyatspi focus events
Python Service (monitor_pc.py)
│ Serial (USB-C)
RP2040-Zero (MicroPython)
│ SPI
1.69" IPS LCD (ST7789, 240×280)
```
**Key property:** The serial communication model means **zero CPU polling** on the host — events are pushed only when the active window changes.
## Features
### V1 — Auto Monitoring
- GNOME window focus detection via `pyatspi`
- Event-driven serial communication (no polling, near-zero CPU impact)
- Real-time application switching reflected on the LCD
- Session time tracking per application
### V2 — MacroDeck
- Flask web server on `localhost:5000`
- Browser-accessible emoji selector UI
- Manual display override from any device on the LAN
- Multi-threaded architecture
- Optimized 100×100px RGB565 image assets
## Hardware Specifications
| Component | Specification |
|---|---|
| Microcontroller | RP2040-Zero (or compatible Raspberry Pi Pico) |
| Firmware | MicroPython |
| Display | 1.69" IPS LCD, ST7789 controller, 240×280px |
| Interface | SPI (display) + USB-C (data + power) |
| Host OS | Linux with GNOME desktop (Wayland/X11) |
| Host Language | Python + pyatspi |
## Software Requirements
- **Host:** Python 3, `pyatspi`, `pyserial`
- **V2 additionally:** `flask`
- **Microcontroller:** MicroPython with `st7789` display driver
## App Mapping (V1)
```python
# Example: Adding a new app in monitor_pc.py
APPS_MAPPING = {
"Code": "VSCODE",
"Firefox": "FIREFOX",
# Map window focus keyword to an internal ID
"Obsidian": "NOTAS"
}
```
## Web Control API (V2)
```python
# V2: Web control API snippet
@app.route('/set_emoji/<emoji_id>')
def set_emoji(emoji_id):
# Sends manual Emoji command via serial
send_to_serial(emoji_id.upper())
return {"status": "success"}
```
## Gallery
The device has been tested and demonstrated with the following applications on Fedora Linux:
- **VS Code** — Development environment detection
- **Firefox** — Web browsing session tracking
- **Terminal** — System shell activity
- **YouTube Music** — Media playback tracking
## Tested On
- **OS:** Fedora Linux (GNOME, Wayland)
- **Hardware:** RP2040-Zero + 1.69" ST7789 LCD
## Support
☕ [Support on Ko-fi](https://ko-fi.com/jrodriiguezg)
## Author
**Juan Raul Rodriguez Gil** — Built with passion for Linux & Hardware
[jrodriiguezg.link](https://jrodriiguezg.link) | [GitHub](https://github.com/jrodriiguezg) | [Instagram](https://www.instagram.com/jrodriiguezg.link/?hl=es)
---
© 2026 Juan Raul Rodriguez Gil