Skip to content

fabkury/p3a

Repository files navigation

p3a

p3a — Physical Pixel Art Player

p3a is a Wi-Fi pixel art player that connects to Makapix Club, a pixel art social network. Built on the ESP32-P4, it's a 4-inch smart art frame you can control from anywhere—via touchscreen, web browser, REST API, or securely through Makapix Club's MQTTS backend. Register your p3a at dev.makapix.club and play artworks and channels from the website directly on the device.

Hardware photos

P3A front P3A angled

Quick start

  1. Get the hardware: Waveshare ESP32-P4-WIFI6-Touch-LCD-4B + microSD card
  2. Insert the microSD card: This requires unscrewing the back plate
  3. Flash the firmware: Download and run p3a-flasher.exe from the releases folder, or see the flashing guide for other options
  4. Connect to Wi-Fi: On first boot, connect to the p3a-setup network and visit http://p3a.local/ to configure your Wi-Fi
  5. Register it at Makapix Club: Long press on the screen and follow the instructions
  6. Send art to it: Browse https://dev.makapix.club/ and securely send artworks to your p3a

Note: The initial flash requires USB. After that, all updates are wireless via the web UI.

For detailed usage instructions, see HOW-TO-USE.md.

Features

Makapix Club Integration

  • Play artworks and channels: Play individual artworks or entire channels (e.g., "Promoted Artworks", "Recent Artworks") directly from Makapix Club to your p3a
  • 4 ways to control: Touchscreen, local web UI at http://p3a.local/, REST API, or remotely via Makapix Club's secure MQTTS (MQTT over TLS) backend
  • Cloud connectivity: Register your device at dev.makapix.club to unlock remote control from anywhere
  • Coming soon: Send a "like" to the artwork by touching the screen, swipe up to view artwork comments from the Makapix community

Seamless Playback

  • Freeze-free, gapless playback: Robust multi-buffer rendering handles animations smoothly, even with corrupt or problematic files
  • Full format support: Animated WebP and GIF, and still PNG all with transparency and alpha channel support, plus full JPEG support
  • Aspect ratio preservation: Non-square artworks display without distortion, properly centered with configurable background color

Control & Customization

  • Touch controls: Tap to change artwork, swipe to adjust brightness, rotate with two fingers
  • Screen rotation: Rotate the display 0°, 90°, 180°, or 270° via touch gesture or web API
  • Web interface: Full device control from any browser at http://p3a.local/
  • Over-the-Air updates: After initial USB flash, update firmware wirelessly via the web UI with automatic rollback protection

Hardware & Connectivity

  • USB access: Connect via USB-C to access the microSD card as a storage device. Copy you own private, offline files to p3a
  • Auto co-processor updates: p3a automatically flashes the ESP32-C6 Wi-Fi 6 co-processor firmware when needed
  • PICO-8 Monitor (optional): Stream PICO-8 games to the display—disabled by default to reduce firmware size, can be enabled at compile time

p3a video

Over-the-Air Updates

After the initial firmware flash via USB-C cable, all subsequent updates can be installed wirelessly. p3a automatically checks for firmware updates from GitHub Releases, and you can install them directly from the web interface.

Update features:

  • Wireless updates — no need to reconnect USB after the first flash
  • Automatic checks every 2 hours (or check manually via web UI)
  • One-click install from the web interface at http://p3a.local/ota
  • Progress display on both the device screen and web interface
  • Automatic rollback if the new firmware fails to boot 3 times
  • Manual rollback to previous version via web UI
  • SHA256 verification ensures firmware integrity
  • ESP32-C6 auto-update — the Wi-Fi co-processor firmware is updated automatically when needed

OTA update web interface
OTA update page (click image to watch video)

Hardware specs

Component Details
Board Waveshare ESP32-P4-WIFI6-Touch-LCD-4B
MCU Dual-core ESP32-P4 + ESP32-C6 for Wi-Fi 6/BLE
Display 4" square 720×720 IPS, 24-bit color, dimmable backlight
Touch 5-point capacitive touchscreen
Memory 32MB PSRAM, 32MB flash
Storage microSD card slot
Power USB-C (no battery)

p3a size

Current status

p3a is in active development. The following features are implemented:

  • Display pipeline with multi-buffer rendering for freeze-free playback
  • Animation playback with prefetching and robust error handling
  • Transparency & alpha channel support for WebP, GIF, and PNG with configurable background color
  • Aspect ratio preservation for non-square artworks
  • Touch gestures (tap, swipe, long-press, two-finger rotation)
  • Screen rotation (0°, 90°, 180°, 270°) with persistence
  • Wi-Fi provisioning with captive portal and mDNS (http://p3a.local/)
  • Local web UI and REST API, also with mDNS
  • Makapix Club integration — play individual artworks and entire channels from dev.makapix.club
  • Secure mTLS MQTT client for device registration and remote control
  • Over-the-Air (OTA) updates — install firmware updates wirelessly via web UI with integrity verification and full rollback support
  • Automatic ESP32-C6 firmware updates for the Wi-Fi co-processor
  • USB composite device (serial console + mass storage)

Coming soon:

  • Send "likes" to artworks with long-press gesture
  • Swipe up to view artwork comments from the Makapix community

See ROADMAP.md for the full development plan.

Documentation

Document Description
HOW-TO-USE.md Detailed usage instructions
flash-p3a.md How to flash the firmware
OTA_IMPLEMENTATION_PLAN.md Over-the-Air update system design
INFRASTRUCTURE.md Technical architecture for developers
ROADMAP.md Development roadmap and milestones

Repository layout

  • main/ — Application entry point, display/touch drivers, animation player, format decoders
  • components/ — Custom components: app state, config store, HTTP API, Makapix integration, OTA manager, decoders
  • managed_components/ — ESP-IDF Component Registry dependencies
  • webui/ — Web interface files (compiled into SPIFFS)
  • docs/ — Documentation

Makapix Club integration

Makapix Club is a pixel-art social network where artists share their creations. Register your p3a at dev.makapix.club to:

  • Play artworks and channels: Stream individual artworks or entire channels (like "Promoted Artworks" or "Recent Artworks") directly to your p3a
  • Remote control: Control your device from anywhere via secure MQTTS (MQTT over TLS) connection
  • Real-time updates: Receive artwork notifications instantly
  • Coming soon: Send "likes" to artworks with a long-press, swipe up to view community comments

Contributing

Contributions are welcome! See the INFRASTRUCTURE.md for technical details about the codebase.