Pico_USB_Disp

Pico_USB_Disp

Drive a monitor from your microcontroller with a USB graphics display adapter.

This library implements USB display protocols on resource-constrained embedded platforms without requiring Linux or a desktop operating system.

With a supported adapter, a Raspberry Pi Pico or an ESP32 board can provide Full HD display output (1920 × 1080 at 60 Hz) using only two USB data lines (D+ and D-) for communication.

Because the adapter generates a standards-compliant video signal, it generally provides broader monitor compatibility than implementations that use simplified DVI signaling, such as PicoDVI.

Quick Start

  1. Get a supported USB display adapter. DisplayLink DL-165 and DL-195 adapters are recommended. (Click here for a list of supported hardware)
  2. Use an RP2040 or RP2350 board with a USB host connector, an ESP32-S2/S3/P4 board with a USB OTG connector (the ESP32-S3 is recommended), or a Teensy 4.x board with a USB host connector.
  3. Flash the firmware using the Web Flasher.
  4. Connect the display adapter to the board’s USB host port. The firmware will initialize the adapter and start video output automatically.
  5. See Library Usage to integrate Pico_USB_Disp into your project and explore the examples.

Overview

USB display adapters are normally designed for desktop operating systems and require proprietary or platform-specific drivers.

This library implements the required USB communication protocol directly on an MCU, allowing supported adapters to be used without Windows, macOS, or Linux.

  • Draw to a USB display with #include <usb_disp.h> and only a few lines of code.
  • Automatically select the clock and display mode from the monitor’s EDID.
  • Automatic integration with LovyanGFX / LVGL v9.
  • Build with the Arduino IDE, Raspberry Pi Pico SDK, or ESP-IDF.
  • The library also supports Windows, Linux, and macOS. On these platforms, it communicates with the display adapter through libusb.

Documentation

  • Library Usage - Installation, wiring, basic usage, integration with GUI libraries, troubleshooting, and examples.
  • Web Flasher - Flash the test firmware directly from a supported browser.
  • Hardware List - Find tested and potentially compatible adapters.
  • API Reference - Function and configuration reference.
  • Protocol Notes - Technical documentation for each chip’s on-wire protocol.

Third-Party Code

This project includes a modified subset of sekigon-gonnoc/Pico-PIO-USB.

All display-protocol implementations were written from scratch based on my own analysis and publicly available drivers. No source code from other display drivers is included.

Credits

License

MIT License.

See the LICENSE file in the GitHub Repository for details.