Subir archivos a "/"
This commit is contained in:
@@ -0,0 +1,122 @@
|
|||||||
|
# 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
|
||||||
Reference in New Issue
Block a user