Skip to content

skwashd/github-stats-idotmatrix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ESP32-S3 GitHub Contribution Display

Display your GitHub contribution graph on a 16x16 iDotMatrix BLE LED pixel display, powered by an ESP32-S3 running MicroPython.

Prerequisites

  • uv installed on your computer
  • ESP32-S3-N16R8 board
  • Anko 16x16 Bluetooth LED Pixel Display (iDotMatrix)
  • USB-C cable for the ESP32

Step 1: Install dependencies

make

This runs uv sync to install esptool and mpremote into a local virtualenv.

Step 2: Flash MicroPython firmware

# Download the correct firmware (spiram-oct variant):
# https://micropython.org/download/ESP32_GENERIC_S3/
# Select the SPIRAM-OCT variant (.bin file)

# Put ESP32-S3 in bootloader mode: hold BOOT, press RESET, release BOOT

# Erase flash
uv run esptool.py --chip esp32s3 --port /dev/ttyACM0 erase_flash

# Flash firmware (note: address 0x0, not 0x1000)
uv run esptool.py --chip esp32s3 --port /dev/ttyACM0 --baud 460800 write_flash 0 ESP32_GENERIC_S3-SPIRAM_OCT-*.bin

Step 3: Configure

cp src/config.example.json src/config.json

Edit src/config.json:

  • Set your WiFi SSID and password
  • Set your GitHub username
  • Create a GitHub Personal Access Token at https://github.com/settings/tokens (fine-grained, no extra permissions needed) and paste it in
  • Optionally set ble_device_name to your display's full name (e.g., "IDM-825058") -- find it using the iDotMatrix mobile app or a BLE scanner

Step 4: Upload to ESP32

make install

This installs aioble on the device and copies all source files. To use a different serial port (e.g., on macOS):

make install PORT=/dev/cu.usbmodem1101

Step 5: Run

Press RESET on the ESP32 or power-cycle it. The device will:

  1. Connect to WiFi
  2. Sync the clock via NTP
  3. Fetch your GitHub contributions
  4. Connect to the iDotMatrix display via Bluetooth
  5. Render your contribution chart
  6. Repeat every hour

Monitor output via: uv run mpremote connect /dev/ttyACM0 repl

Status LED

The built-in NeoPixel RGB LED (GPIO 48) indicates the current phase:

Color Phase
Blue Connecting to WiFi
Purple Syncing NTP
White Fetching GitHub data
Cyan Connecting to display via BLE
Green Rendering / sending frame
Flashing (step color) Step failed
Flashing red Unexpected error
Off Idle / sleeping

About

Display GitHub Contribution Graph on a Anko/iDotMatrix 16x16 LED Panel Using an ESP32

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors