GitPedia

Stm32 tiny monitor

A tiny external monitor for PC using STM32 and ST7789. Connects to PC over USB and displays the captured screen on ST7789 (240x240) display.

From abhra0897·Updated June 11, 2026·View on GitHub·

A python script sends the captured screen over USB to the STM32 microcontroller, then that data is displayed on ST7789 display. FPS is not that high, but I made it good enough after several optimizations. The project is written primarily in C, first published in 2021. Key topics include: bluepill, display, libopencm3, st7789, stm32.

STM32 Tiny Monitor

A super tiny monitor for your PC, suitable for your pet ant.

A python script sends the captured screen over USB to the STM32 microcontroller, then that data is displayed on ST7789 display. FPS is not that high, but I made it good enough after several optimizations.

TinyMonitor demo

I made this project because I'm learning USB now and this is a fun project to practice USB stuffs. I still know almost nothing about USB. To get started, follow this tutorial: https://medium.com/@manuel.bl/usb-for-microcontrollers-part-1-basic-usb-concepts-519a33372cc9

Parts:

  • STM32F103 MCU (Bluepill)
  • ST7789 SPI Display (240x240 resolution)

Pin mapping:

ST7789STM32
SDAPA7
SCLPA5
RESETnPA4
D/CnPA2
BLKPA3 (unused)

How to use:

  1. Compile the firmware and flash the microcontroller
  2. Follow the instruction in host_python_scripts folder to run the host software.
  3. Connect microcontroller to PC using USB cable. Host software will start the stream.
  4. Enjoy your tiny monitor :)

Demo:

  1. https://youtu.be/5AGjsRObFtk
  2. https://youtu.be/oFxuoMdBxJk

TODO:

  • Optimize the device (mcu) firmware. Buffer the incoming packets befoe sending to SPI bus.
  • Write host software in C/C++ to get higher performance

Feel free to modify the code and do whatever you want with this useless project.

Contributors

Showing top 1 contributor by commit count.

View all contributors on GitHub →

This article is auto-generated from abhra0897/stm32_tiny_monitor via the GitHub API.Last fetched: 6/21/2026