▲ 4 r/eink

Released Rustmix Remote v1.0.0 — Wear OS BLE page-turning remote for Waveshare 3.97 e-paper reader with rustmix-wave firmware.

I just released Rustmix Remote v1.0.0, a small Wear OS app that turns a Samsung Wear OS watch into a BLE page-turning remote for my Waveshare 3.97 e-paper reader.

This is currently validated with the Waveshare ESP32-S3 3.97-inch e-paper device running Rustmix-Wave. It doesn't work with stock firmware or any other firmware.

What it does

Rustmix Remote lets the watch send page-turn commands over BLE GATT to the Rustmix-Wave firmware.

Validated working:

  • Wear OS app connects to Rustmix-Wave over BLE
  • Previous / Next page controls from the watch
  • TXT reader page turning
  • EPUB reader page turning
  • Swipeable 2-screen watch UI
  • Saved BLE device address
  • Connect Saved / Scan Fallback
  • Disconnect button
  • Connection/write status text

The flow is:

Samsung Wear OS watch
    -> BLE GATT
    -> Rustmix-Wave firmware
    -> TXT / EPUB reader page turn

Rustmix Remote watch app

Rustmix Remote v1.0.0 release:

https://github.com/aimindseye/rustmix-watch-remote/releases/tag/v1.0.0

Repo:

https://github.com/aimindseye/rustmix-watch-remote

Which Rustmix-Wave firmware release should you use?

Rustmix-Wave now has two separate firmware release variants for the Waveshare 3.97-inch e-paper device.

Use v1.2.0-wifi for normal daily use

Use this if you want the regular Rustmix-Wave firmware features:

  • TXT reader
  • EPUB reader
  • Indic EPUB support
  • Wi-Fi transfer
  • weather/network fetch
  • NTP/time sync
  • voice notes
  • calendar
  • dictionary
  • games
  • settings

Wi-Fi release:

https://github.com/aimindseye/rustmix-wave/releases/tag/v1.2.0-wifi

Use v1.2.0-ble for Rustmix Remote watch page turning

Use this if you want the Wear OS watch remote:

  • BLE GATT support
  • Rustmix Remote page turning
  • TXT reader Previous / Next
  • EPUB reader Previous / Next

BLE release:

https://github.com/aimindseye/rustmix-wave/releases/tag/v1.2.0-ble

Rustmix-Wave repo:

https://github.com/aimindseye/rustmix-wave

Why two firmware releases?

The Waveshare 3.97-inch e-paper device uses an ESP32-S3. Wi-Fi and Bluetooth LE share the same radio subsystem, and this firmware also has memory/timing-sensitive pieces like:

  • e-paper refresh coordination
  • SD card access
  • TXT/EPUB reader cache workers
  • Wi-Fi transfer portal
  • weather/network tasks
  • BLE GATT command service

For reliable watch-based page turning, the BLE firmware gives BLE ownership of the modem and intentionally disables Wi-Fi/network services.

So:

v1.2.0-wifi = normal firmware with Wi-Fi/network features
v1.2.0-ble  = BLE remote firmware for Wear OS page turning

If you need Wi-Fi transfer, weather, or NTP/time sync, use the Wi-Fi release.
If you want watch-based TXT/EPUB page turning, use the BLE release.

Limitations

This is not a universal Bluetooth HID remote yet.

Current limitations:

  • Works with Rustmix-Wave firmware, not stock Waveshare 3.97 e-paper firmware
  • BLE build disables Wi-Fi/network features
  • Watch app was validated on Samsung Wear OS
  • Direct saved BLE MAC fallback is the reliable connection path right now
  • You need to flash the correct Rustmix-Wave firmware variant
  • This is currently for the Waveshare ESP32-S3 3.97-inch e-paper target

Why I built it

I wanted a simple low-distraction way to turn pages on an e-paper reader from a watch, especially when reading EPUB/TXT hands-free. This also keeps the protocol simple and safe: the BLE callback only parses/enqueues commands, and the firmware main loop handles reader state changes.

Feedback and testing on other Wear OS watches would be appreciated.

u/mindseye73 — 2 days ago
▲ 9 r/xteinkereader+1 crossposts

Rustmix X4 Firmware v1.1.0 Released — Hindi, Sanskrit, and Gujarati EPUB Support

Title: Rustmix X4 Firmware v1.1.0 Released — Hindi, Sanskrit, and Gujarati EPUB Support

*** Not Tested on X3 and locked devices***

I have released Rustmix X4 Firmware v1.1.0 for the Xteink X4 e-paper reader.

The main addition in this release is support for reading EPUB books containing:

  • Hindi text
  • Sanskrit text
  • Devanagari script and Vedic marks
  • Gujarati text
  • Mixed Latin, Devanagari, and Gujarati pages

The new rendering path uses host-side text shaping and page-local font caches, allowing complex Indic scripts to render properly on the resource-constrained X4 device. This includes correct handling of conjuncts, half-forms, matras, and script-specific glyph positioning.

I validated the update on physical hardware with:

  • Garud Purana in Hindi and Sanskrit
  • Srimad Bhagavat Mahapuran in Hindi
  • Valmiki Ramayana in Gujarati

The EPUB pages are rendering properly on the device.

A few implementation details:

  • EPUB files continue to use FAT 8.3-safe .EPU filenames.
  • Prepared book caches are stored under /FCACHE/<BOOKID> on the SD card.
  • Only the active page’s required font assets are loaded into memory.
  • Gujarati assets are generated only for books that require them.
  • macOS metadata files such as ._* and .DS_Store are cleaned automatically during cache preparation and validation.

The release also preserves the existing reader functionality, including TXT support, EPUB browsing, bookmarks, page navigation, Wi-Fi Transfer, and the standard X4 partition layout.

GitHub repository and release:
https://github.com/aimindseye/rustmix-x4-firmware/releases/tag/v1.1.0

Screenshots of Hindi and Gujarati EPUB rendering are included in the repository under the screenshots/ folder.

Feedback, testing reports, and EPUB samples in additional Indic scripts are welcome.

u/mindseye73 — 25 days ago
▲ 8 r/esp32projects+1 crossposts

Rustmix Wave v1.0.0 — an open-source Rust firmware for the Waveshare ESP32-S3 3.97-inch e-paper board

I have released Rustmix Wave v1.0.0, an open-source firmware project for the Waveshare ESP32-S3 3.97-inch e-paper board.

GitHub: https://github.com/aimindseye/rustmix-wave

Rustmix Wave was inspired by Rustmix for X4 and its approach of turning a small e-paper device into a practical offline-first tool rather than a single-purpose demo. The Waveshare 3.97-inch board provides a different hardware foundation, so this project adapts that idea to take advantage of its ESP32-S3, portrait e-paper display, SD card, rotary controls, RTC, environmental sensor, motion sensor, Wi-Fi, audio codec, microphone, speaker path, and power-management hardware.

The goal is to make the board feel like a small usable e-paper device with utilities, reading, audio, sensors, and games, while keeping the firmware modular and testable in Rust.

What is included

Reader

  • TXT and EPUB reading
  • EPUB table of contents
  • Bookmarks
  • Per-book resume positions
  • Reader preferences
  • Multiple e-paper-friendly font profiles
  • Themes, orientation, paragraph alignment, and progress display

Voice Notes

  • Native microphone recording
  • PCM16 mono 16 kHz WAV files
  • Saved-note playback
  • LOW, NORMAL, HIGH, and BOOST microphone gain modes
  • Pause and resume recording
  • Friendly note titles while preserving FAT 8.3 WAV filenames internally
  • Recording timestamps
  • Available SD-card storage display
  • Delete confirmation
  • LAN export and download shortcut

Offline Dictionary

  • Native Rust dictionary interface
  • Compatibility with the Rustmix X4 prefix-sharded dictionary pack
  • Exact-word lookup
  • Prefix lookup and wildcard cycling
  • Rotary keyboard with BOOT-short horizontal / vertical navigation switching

Calendar

  • Native monthly calendar
  • U.S. holiday pack support
  • Daily agenda
  • Personal event creation, editing, and deletion
  • Read-only U.S. holiday entries
  • Recovery-safe SD persistence using temporary and backup files

Board utilities

  • Battery, USB, and charging information from the AXP2101 PMIC
  • Local time and alarm support through the RTC
  • GPIO45 RTC alarm wake
  • Temperature and humidity readings
  • Motion diagnostics
  • Wi-Fi and SNTP time synchronization
  • Weather
  • SD-card file browser
  • LAN file-transfer portal
  • Unit converter
  • Audio diagnostics and test chime

Motion-based games

The firmware uses the onboard motion sensor for native motion events such as tilt, shake, rotate, and level detection.

The current motion games include:

  • Tilt Maze — tilt the device to move through a maze
  • Motion 2048 — tilt the device to perform tile swipes
  • Sokoban Tilt — tilt the device to move the player and push crates

There are also grid-based games such as Sudoku and Minesweeper. These use a consistent BOOT-short horizontal / vertical navigation model designed for the rotary controls.

Power-key behavior

The physical Power key has two behaviors:

  • Short Power press — opens a display-maintenance menu with a manual global refresh option to clear e-paper ghosting
  • Long Power press — enters sleep-image mode with network suspension

Wake restores the previous screen after a short guard interval.

SD-card-first design

A lot of the content is stored on the SD card so it can be updated without reflashing firmware:

  • Books
  • Dictionary shards
  • Calendar data
  • Voice Notes
  • Sleep images
  • Lua app packs
  • Game data
  • Settings

The Dictionary pack intentionally remains compatible with the Rustmix X4 layout.

Embedded Rust architecture

The firmware keeps long-lived hardware ownership in the main runtime and uses bounded worker tasks for operations that could otherwise create stack or memory pressure.

Examples include:

  • EPUB parsing in an isolated worker
  • EPUB title lookup in a smaller bounded worker
  • Weather HTTPS fetches in a worker
  • Lua app loading in a worker
  • Wi-Fi transfer through an explicit HTTP task with bounded streaming chunks

The e-paper transport remains owned by the native runtime rather than being moved into background workers. The Lua layer is also intentionally sandboxed and does not receive raw I2C, networking, or display-transport access.

Screenshots and documentation

The repository includes:

  • A screenshot-driven user guide
  • Architecture documentation
  • SD-card setup instructions
  • Release flashing instructions
  • Physical smoke-test guidance

Flashing

The supported release artifact is the ELF file.

Use the provided helper:

./scripts/flash-release.sh \
  dist/waveshare-epd397-rust-app-v1.0.0.elf

The project intentionally does not recommend raw espflash write-bin flashing at address 0x0.

Feedback welcome

This is the first stable release, and I would appreciate feedback from people experimenting with the Waveshare 3.97-inch board, embedded Rust, e-paper interfaces, offline readers, or motion-driven applications.

I am especially interested in ideas for additional lightweight apps that make sense on a low-power e-paper device.

reddit.com
u/mindseye73 — 29 days ago
▲ 19 r/esp32projects+2 crossposts

Just another X4 firmware - Rustmix

I created another firmware as learning exercise for my X4 in Rust called - Rustmix.
It is intended as a developer reference and starting point for someone who wants to create firmware in Rust instead of C++.

Rustmix is a reference build inspired by and/or informed by:

  • pulp-os: a minimal Xteink X4 Rust firmware lineage.
  • Biscuit: dashboard and simple e-reader product UX ideas.
  • CrossInk: compact e-ink UI patterns for headers, tabs, rows, and tool screens.
  • CrossPoint Reader: open Xteink X3/X4 firmware compatibility goals and partition-layout awareness.
  • CrossLuaReader-style SD Lua app experiments: small scripts, constrained host APIs, and data-driven apps.

Flashing custom firmware can void warranty or fail on restricted devices. Confirm your Xteink X4 allows third-party flashing before using these artifacts. Keep a copy of official recovery/stock firmware if available for your hardware variant.

Rustmix X4 firmware
Screenshots

u/mindseye73 — 13 days ago
▲ 43 r/eink

Interesting project - https://www.cnx-software.com/2026/04/26/lightink-an-esp32-based-solar-powered-e-ink-smartwatch-with-up-to-10-months-of-battery-life/

Daniel Ansorregui has developed LightInk, an open-source solar-powered E-ink watch inspired by 90s solar digital watches. It features a 1.54-inch e-paper display and supports Wi-Fi, Bluetooth, LoRa, and GPS, running on a 100mAh battery.

The project integrates a custom low-quiescent-power design using a TPS63900 buck-boost converter, capacitive-touch input, and deep-sleep-driven firmware, along with ultra-fast partial e-ink updates (<1 ms active time) and precise RTC timekeeping with drift calibration. It also supports solar-first operation (no dedicated charging IC) and dynamic power gating of peripherals, enabling around 9–10 months of operation on a small battery supplemented by solar power.

LightInk specifications:

  • System-in-package – ESP32-PICO-D4 SiP
    • CPU – Dual-core processor @ 240MHz
    • Memory – 520KB SRAM
    • Storage – 4MB flash
    • Wireless – 2.4 GHz Wi-Fi 4 up to 150 Mbps and Bluetooth 4.2 BR/LE connectivity
  • Display – 1.54-inch 200×200 B/W e-Paper panel (GDEH0154D67 or compatible)
  • Audio – 10-15mm piezo electric disc speaker
  • Connectivity
    • 2.4 GHz 802.11b/g/n Wi-Fi 4 and Bluetooth 4.2 BR/EDR via ESP32 SiP
    • LoRa via a Wio-SX1262 transceiver
    • GPS
  • Misc
    • Capacitive touch buttons utilizing the ESP32’s internal touch pins
    • 3V 2.0 mm circular mini vibration motor
    • LED light pins
    • RTC with manual drift calibration (targeting 1ppm, currently at 10ppm)
  • Power
    • TPS63900 buck-boost converter (1.8V to 5.5V, 75-nA IQ) operating dynamically at 2.6V/2.9V
    • Solar cell input
    • 100mAh battery
  • Dimensions – TBD
  • Enclosure – 3D printed

Github - https://github.com/DarkZeros/LightInk
Hackaday - https://hackaday.io/project/205564-lightink

u/mindseye73 — 2 months ago