Ize Compose
Multilingual writing firmware for the Zerowriter Ink (Inkplate 5 V2). Started as a Korean-input firmware, now supports 92 keyboard layouts across dozens of scripts.
Supported Device
- Zerowriter Ink (Inkplate 5 V2)
- ESP32, 800×600 monochrome e-ink display
- Requires SD card for non-Latin fonts and document storage
Features
Writing
- Plain-text editing with cursor navigation
- Phonetic Korean composition (cho/jung/jong jamo assembly)
- Latin accent cycling (e.g., a → á → â → ã → ...)
- Right-to-left (RTL) text mode for Arabic-script layouts
- Text search (Ctrl+F)
- Copy / paste (Ctrl+C / Ctrl+V)
- Word and character count (3 display modes)
Keyboard & Language
- 92 keyboard layouts selectable from the system menu
- Two independent layout slots: one for English (QWERTY or Dvorak), one for a second language
- 12 script composition engines: Korean, Arabic, Indic scripts, Thai, Myanmar, Khmer, Lao, Tibetan, Sinhala, Ethiopic, Japanese, Hebrew
- RTL layout support: Arabic, Hebrew, Kurdish (Arabic), Pashto, Persian, Urdu
Files
- Saves and loads
.txtfiles on SD card (/ize_compose/) - File browser (up to 65 files)
- WiFi (AP mode) for uploading/downloading text and firmware OTA via browser
Display
- Partial screen update for fast typing feedback
- Configurable full-refresh threshold
- Boot/sleep image loaded from
/ize_compose/initial.pngon SD card - Sleep mode: Ctrl+L or sleep button; wake with wake button
Settings (system menu)
- Line spacing
- Typing speed (key repeat delay)
- Screen refresh limit
- Keyboard layout selection
- Font slot
Keyboard Layouts (92)
Dvorak, QWERTY, 한국어, Shqip, العربية, Հայերեն, Deutsch (AT/DE/CH), Azərbaycanca, Беларуская, Nederlands (BE/NL), বাংলা, Bosanski / Босански, Português (BR/PT), Български, Français (CA/FR/CH), Català, Hrvatski, Čeština, Dansk, देवनागरी, Eesti, ኢትዮጵያ, Føroyskt, Suomi, Georgian, Ελληνικά, ગુજરાતી, Hausa, עברית, Magyar, Íslenska, Gaeilge, Italiano, 日本語, ಕನ್ನಡ, Qazaq / Қазақ, ខ្មែរ, Kurdî / کوردی, Кыргызча, ລາວ, Español América, Latviešu, Lietuvių, Lëtzebuergesch, മലയാളം, Malti, Māori, Română (MD) / Молдовеняскэ, Монгол, Crnogorski / Црногорски, မြန်မာ, नेपाली, Македонски, Norsk, پښتو, فارسی, Polski, ਪੰਜਾਬੀ, Română, Русский, Srpski / Српски, සිංහල, Slovenčina, Slovenščina, Español, Kiswahili, Svenska, Тоҷикӣ, தமிழ், తెలుగు, ไทย, བོད་སྐད, Türkçe, Українська, English UK, اردو, Oʻzbek / Ўзбек, Tiếng Việt, Cymraeg
Font Files
Latin is embedded in the firmware. All other scripts are loaded from SD card at boot.
Place the following files in /ize_compose/hwalja/ on the SD card:
| File | Scripts covered |
|---|---|
hwalja_hangul.bin |
Korean (Hangul syllables) |
hwalja_jamo.bin |
Korean (Jamo, composition glyphs) |
hwalja_jp.bin |
Japanese (Hiragana, Katakana) |
hwalja_greek_cyrillic.bin |
Greek, Cyrillic |
hwalja_arabic.bin |
Arabic, Persian, Urdu |
hwalja_indic.bin |
Devanagari, Bengali, Gujarati, Kannada, Malayalam, Punjabi, Tamil, Telugu, Sinhala |
hwalja_sea.bin |
Thai, Khmer, Lao, Myanmar, Tibetan |
hwalja_misc.bin |
Ethiopic, Georgian, Armenian, and others |
Without these files the device still works, but only Latin text is displayed correctly.
Build Environment
Platform / Board / Framework
| Item | Value |
|---|---|
| Platform | espressif32 |
| Board | esp32dev + Inkplate 5 V2 build flags |
| Framework | Arduino |
| CPU clock | 240 MHz |
| Upload / monitor speed | 921600 baud |
board = esp32devis used with manual build flags rather than a dedicated Inkplate board definition. This firmware will not work on a generic ESP32 dev board — the flags and PSRAM are specific to the Inkplate 5 V2 hardware.
Libraries
| Library | Version | Source |
|---|---|---|
| InkplateLibrary | 11.0.0 | lib/ (local, no separate install needed) |
| SdFat | 2.3.1 | PlatformIO registry |
| U8g2_for_Adafruit_GFX | 1.8.0 | PlatformIO registry |
| ESP32 BLE Keyboard | 0.3.2 | PlatformIO registry |
| Adafruit GFX Library | 1.12.6 | PlatformIO registry |
| Adafruit BusIO | — | PlatformIO registry |
Build flags
| Flag | Purpose |
|---|---|
-DARDUINO_INKPLATE5V2 |
Board identification |
-DINKPLATE_5V2 |
Enables correct code path inside InkplateLibrary |
-DBOARD_HAS_PSRAM |
Declares PSRAM presence to ESP-IDF |
-mfix-esp32-psram-cache-issue |
Workaround for ESP32 PSRAM cache bug (older silicon) |
-DSCREEN_WIDTH=800 / -DSCREEN_HEIGHT=600 |
Display resolution constants |
-O2 + build_unflags = -Os |
Speed optimization; overrides PlatformIO's default size optimization |
-D CORE_DEBUG_LEVEL=0 |
Suppresses all serial debug output |
Flash / partition settings
| Item | Value |
|---|---|
| Partition table | huge_app.csv (maximizes app partition) |
| Flash speed | 80 MHz |
| Flash mode | QIO (quad I/O) |
huge_app.csvis a built-in partition table provided by the PlatformIO espressif32 platform. No manual file is needed.
Installation
Requirements
- PlatformIO (VS Code extension or CLI)
- Zerowriter Ink (Inkplate 5 V2) with SD card
Build and flash
git clone <this repo>
cd <repo>
pio run --target uploadSD card setup
- Format SD card as FAT32.
- Create the folder
/ize_compose/hwalja/. - Copy the
hwalja_*.binfont files into/ize_compose/hwalja/. - (Optional) Place
initial.png(800×600 PNG) in/ize_compose/for the sleep/boot image.
Firmware OTA update (WiFi)
- Open the system menu → Network → WiFi.
- Connect to the
IZE_COMPOSEaccess point from a PC or phone. - Navigate to
192.168.4.1in a browser. - Upload a new
.binfirmware file.
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| Ctrl+Space | Toggle Korean / English mode |
| Ctrl+L | Sleep (shows boot image) |
| Ctrl+F | Text search |
| Ctrl+C | Copy all text to clipboard |
| Ctrl+V | Paste clipboard |
| Space (accent cycling) | Cycle diacritic variants for last character |
Repository Structure
src/
IZEcompose.ino — main firmware
jado.h — keyboard layout definitions and keymaps (92 layouts)
jeong_eum.h — Korean composition engine and script engine types
insoe.h — text rendering, font selection
EmbeddedLatinFont.h — Latin font baked into firmware
PsramAssets.h — PSRAM asset loading helpers
hwalja_*.bin — font binary files (copy to SD card, not compiled in)
lib/
InkplateLibrary/ — Inkplate driver (local copy)
tools/
make_fonts.py — script used to build hwalja_*.bin from BDF sources
u8g2/bdfconv.exe — BDF font converter (used by make_fonts.py)
build/
fontbuild*/ — intermediate font build artifacts
noto_fonts/ — source Noto font TTFs used for font building
platformio.ini — PlatformIO build config
Current Limitations
- Supports only Inkplate 5 V2 (800×600). Other Inkplate boards are not tested.
- Korean cursor movement during mid-syllable composition is not supported.
- Only
.txtfiles; no formatting. - Single document open at a time.
- WiFi and BLE cannot be active simultaneously.
- The sleep image must be exactly 800×600 pixels; other sizes are not handled.
Credits
- Inkplate Arduino Library — Soldered Electronics
- U8g2_for_Adafruit_GFX — Oliver Kraus
- ESP32 BLE Keyboard — T-vK
- SdFat — Bill Greiman
- Noto Fonts — Google (used for font building; license: SIL OFL 1.1)
- Zerowriter Ink — original hardware