Skip to content
This repository was archived by the owner on Mar 28, 2026. It is now read-only.

lerouxb/wristle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Wristle

A custom smartwatch built with an ESP32 and a Sharp Memory LCD, running MicroPython.

Watch on wrist

Overview

Wristle is a DIY smartwatch project featuring:

  • ESP32 microcontroller running MicroPython
  • Sharp LS013B7DH03 128x128 monochrome memory LCD
  • ULP co-processor display driver — the entire display driver runs on the ESP32's Ultra Low Power co-processor, bit-banging SPI from the ULP and keeping the display refreshed even during deep sleep
  • DRV2605L haptic feedback driver
  • Audio output support
  • Multiple font options
  • Battery voltage monitoring and charge status
  • Deep sleep support with wake-on-button

Project Structure

firmware/
├── main.py              # Entry point
├── watch.py             # Main watch face and run loop
├── boot.py              # MicroPython boot script
├── apps/                # Applications (clock, main menu)
├── audio/               # Audio library and DSP utilities
├── fonts/               # Bitmap font definitions
├── system/              # Hardware abstraction layer
│   ├── hal.py           # Pin definitions, buttons, battery, display init
│   ├── sharp.py         # Sharp Memory LCD + ULP driver
│   └── drv2605l.py      # Haptic motor driver
├── utils/               # Helpers (datetime, font rendering, writer)
├── ulp/                 # ULP co-processor assembly code
├── scripts/             # Build and deploy scripts
├── patches/             # MicroPython patches
├── tests/               # Hardware tests
└── typings/             # MicroPython type stubs for IDE support

Display Driver

Prototype PCB with Sharp Memory LCD

The display driver is one of the more interesting parts of this project. The Sharp LS013B7DH03 memory LCD requires a COM signal to be inverted regularly or the display will gradually be damaged. Rather than waking the main processor to do this, the entire display driver runs on the ESP32's ULP co-processor.

The ULP bit-bangs SPI to communicate with the display, keeps the COM signal toggling, and renders the frame buffer from RTC memory — all while the main CPU can remain in deep sleep.

The MicroPython side subclasses framebuf.FrameBuffer, providing a standard framebuffer interface. When show() is called, it copies the buffer into RTC memory in the format the ULP expects (lower 16 bits of each 32-bit word), and the ULP handles the rest.

For a detailed write-up of how this works, see the blog post: A LS013B7DH03 driver in the ESP32 ULP co-processor

Getting Started

Prerequisites

  • ESP32 board with MicroPython firmware
  • Sharp LS013B7DH03 memory LCD
  • Python 3 (for build scripts)

Deploying

Use the provided scripts to compile and copy the firmware to your device:

# Compile the MicroPython firmware with patches
./firmware/scripts/compile-micropython.sh

# Copy the application code to the device
./firmware/scripts/copy-code.sh

# Set the RTC time
./firmware/scripts/set-time.sh

About

Test firmware for a Sharp memory LCD based ultra low power smartwatch

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages