From 73aa3a3aef69165da674760c4fa0c6f3480434ed Mon Sep 17 00:00:00 2001 From: jrodriiguezg Date: Sat, 15 Aug 2026 15:19:42 +0200 Subject: [PATCH] Subir archivos a "/" --- README.md | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2e2909 --- /dev/null +++ b/README.md @@ -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/') +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