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