A modern ESP32-P4 recreation of the Microwriter chorded text-entry system.
Microwriter is a functional reinterpretation of the portable writing machine created by Cy Endfield and Chris Rainey in the late 1970s and commercialized in the early 1980s.
Instead of a conventional QWERTY keyboard, letters are entered by pressing combinations โ or chords โ of five keys positioned for the fingers of one hand.
This modern version uses a DFRobot FireBeetle 2 ESP32-P4, six physical buttons, a 16ร2 RGB LCD, Wi-Fi, and microSD storage.
Text can be:
- โ๏ธ entered using five-key chords
- ๐ฅ๏ธ displayed on the RGB LCD
- ๐ scrolled automatically as it grows
- ๐ก retrieved through a Wi-Fi web interface
- ๐พ saved to a microSD card
- ๐ practiced with the included browser-based chord trainer
- โจ๏ธ Five-key chorded text entry
- ๐ Dedicated thumb key
- ๐๏ธ One key for each finger
- โซ Dedicated delete button
- ๐ค AโZ alphabet support
- โ๏ธ Space and basic punctuation
- ๐ฅ๏ธ 16ร2 RGB LCD output
- ๐ Automatic text scrolling
- ๐ก ESP32 Wi-Fi Access Point
- ๐ Built-in web interface
- ๐ Character and word counters
- ๐พ microSD text storage
- ๐ Interactive browser-based Microwriter trainer
- ๐จ๏ธ Custom 3D-printable enclosure
- ๐ MIT licensed
The original Microwriter was developed by filmmaker and inventor Cy Endfield, working with engineer Chris Rainey.
Its goal was unusual: enable useful text entry with one hand and without a conventional keyboard.
The device used a chorded keyboard:
THUMB INDEX MIDDLE RING PINKY
โ โ โ โ โ
Rather than assigning one letter to each key, characters were produced by pressing several keys simultaneously.
Conceptually:
Individual keys
โ
Combination / chord
โ
Letter
โ
Text
This allowed a very small device to encode an entire alphabet with only a handful of buttons.
The original hardware also included a display, memory, rechargeable batteries, and interfaces for transferring or printing text.
Historical references:
- Centre for Computing History โ Microwriter MW4
- Science Museum Group โ Experimental and pre-production Microwriters
- HCI Museum โ Microwriter
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Five chord keys โ
โ โ
โ T I M R P โ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโโ
โ
โ GPIO
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FireBeetle 2 ESP32-P4 โ
โ โ
โ โข Detect chord โ
โ โข Map chord โ character โ
โ โข Maintain text buffer โ
โ โข Drive LCD โ
โ โข Run Wi-Fi AP โ
โ โข Run HTTP server โ
โ โข Write microSD files โ
โโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโ
โ โ
โผ โผ
โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ
โ 16ร2 LCD โ โ Wi-Fi Browser โ
โ โ โ โ
โ Live text โ โ Read / save โ
โโโโโโโโโโโโโโ โโโโโโโโโฌโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโ
โ microSD โ
โ .txt file โ
โโโโโโโโโโโโโ
The firmware continuously reads the state of the five chord buttons.
Each key becomes either:
0 = released
1 = pressed
The five values are concatenated into a binary-looking chord.
For example:
01100
maps to:
A
The character is then appended to the current text buffer and displayed on the LCD.
The five chord inputs are processed in this order:
Thumb โ Index โ Middle โ Ring โ Pinky
Example mappings:
| Character | Chord |
|---|---|
| A | 01100 |
| B | 00111 |
| C | 10100 |
| E | 01000 |
| H | 10001 |
| O | 00100 |
| S | 00010 |
| T | 01010 |
| U | 00001 |
| Z | 10101 |
| Space | 10000 |
. |
01110 |
- |
01101 |
, |
01011 |
' |
11101 |
The firmware contains mappings for the complete alphabet.
Learning a chorded alphabet is initially less intuitive than using QWERTY, so the repository includes a small browser game for practicing the key combinations.
The trainer shows a target character and lets you select:
THUMB
INDEX
MIDDLE
RING
PINKY
It tracks:
- โ correct answers
- ๐ข attempts
- ๐ accuracy
The trainer source is included under:
html/
โโโ index.html
โโโ readme.txt
| Component | Purpose |
|---|---|
| DFRobot FireBeetle 2 ESP32-P4 | Main controller |
| DFRobot RGB LCD1602 V2 | Text display |
| 5 ร push buttons | Chord keyboard |
| 1 ร push button | Delete key |
| microSD card | Text storage |
| 4 ร M3 screws | Enclosure assembly |
| Jumper wires | Connections |
| USB-C cable | Programming and power |
| 3D-printed enclosure | Physical case |
The current firmware defines:
| Function | GPIO |
|---|---|
| Thumb | 31 |
| Index | 34 |
| Middle | 20 |
| Ring | 36 |
| Pinky | 35 |
| Delete | 21 |
The source configuration is:
int pinThumb = 31;
int pinIndex = 34;
int pinMiddle = 20;
int pinRing = 36;
int pinPinky = 35;
int pinDelete = 21;Each button connects between its GPIO and GND.
The firmware uses:
INPUT_PULLUPso no external pull-up resistors are required.
โน๏ธ Some earlier project documentation lists a slightly different GPIO assignment. The table above follows the current GitHub firmware.
The DFRobot RGB LCD1602 communicates over IยฒC.
Connect:
| LCD | ESP32-P4 |
|---|---|
| VCC | VCC |
| GND | GND |
| SDA | SDA |
| SCL | SCL |
The firmware initializes the display as:
DFRobot_RGBLCD1602 lcd(
0x2D,
16,
2
);The original build uses a red LCD backlight:
lcd.setRGB(255, 0, 0);The LCD has:
16 columns ร 2 rows
so it can display 32 characters at once.
When the current text contains 32 characters or fewer, the first sixteen characters appear on the first row and the remaining characters on the second.
Once the text exceeds 32 characters, the display automatically shows the latest portion:
...previous text
โ
โโโโโโโโโโโโโโโโโโ
โlatest 16 chars โ
โlatest 16 chars โ
โโโโโโโโโโโโโโโโโโ
The complete text remains in memory even though only the latest 32 characters are visible.
A sixth physical button acts as a dedicated delete key.
Rapid presses are counted inside a short time window:
const unsigned long doubleClickTime = 400;If the button is pressed several times rapidly, the firmware removes the corresponding number of characters from the end of the text.
For example:
HELLO WORLD
three quick delete presses become:
HELLO WO
The Microwriter creates its own Wi-Fi network.
It does not need to connect to your home router.
The default configuration in the firmware is:
const char* ap_ssid = "Microwriter";
const char* ap_password = "12345678";๐ Change the default password before using the device in a public environment.
The Access Point starts automatically after approximately 20 seconds of inactivity.
When it starts, the LCD displays something similar to:
AP: Microwriter
192.168.4.1
Connect a phone, tablet, or computer to:
SSID: Microwriter
and open the IP address shown on the display.
The ESP32-P4 runs an HTTP server on:
port 80
The main route:
/
displays a web interface containing:
- ๐ current text
- ๐ข character count
- ๐ word count
- ๐พ microSD status
- ๐ refresh button
- ๐พ save button
This provides a simple way to retrieve the text without connecting the Microwriter to another computer over USB.
Conceptually:
Microwriter
โ
โ Wi-Fi Access Point
โผ
Phone / Laptop
โ
โผ
http://DEVICE_IP
โ
โผ
Copy text
The FireBeetle 2 ESP32-P4 onboard TF/microSD slot is accessed through:
SD_MMCThe firmware initializes it in 1-bit mode:
SD_MMC.begin("/sdcard", true);From the web interface, press:
๐พ Save to SD
The ESP32 writes the complete current text to a file similar to:
/microwriter_123456.txt
The numeric part is based on the ESP32 runtime counter returned by:
millis()The file contains the complete text buffer.
git clone https://github.com/ronibandini/Microwriter.git
cd MicrowriterInstall a current ESP32 Arduino core that supports the ESP32-P4.
Select an ESP32-P4-compatible board configuration in Arduino IDE.
The source was developed for:
ESP32P4 Dev Module
Install:
The firmware includes:
#include "DFRobot_RGBLCD1602.h"Before uploading, change:
const char* ap_ssid = "Microwriter";
const char* ap_password = "12345678";Example:
const char* ap_ssid = "MyMicrowriter";
const char* ap_password = "YOUR_PASSWORD";Open:
microwriter5.ino
Compile and upload it to the FireBeetle 2 ESP32-P4.
The serial monitor uses:
115200 baud
The LCD displays:
Microwriter 1.0
Roni Bandini
The firmware then initializes the microSD card.
Press combinations of the five chord keys.
For example:
01100 โ A
The letter appears immediately on the LCD.
Use the dedicated delete button.
Stop typing for roughly 20 seconds.
The device starts its Wi-Fi Access Point and displays its IP address.
Connect to the network and open that address in a browser.
Press:
๐พ Save to SD
to write the current text to a .txt file.
Microwriter/
โโโ html/
โ โโโ index.html
โ โโโ readme.txt
โโโ images/
โโโ LICENSE
โโโ README.md
โโโ microwriter5.ino
Main ESP32-P4 firmware implementing:
- chord detection
- character mapping
- LCD output
- deletion
- text buffering
- Wi-Fi Access Point
- HTTP server
- web interface
- microSD storage
Standalone browser game for learning the Microwriter chord alphabet.
The modern enclosure was designed for the FireBeetle, LCD, and six physical buttons.
The downloadable design contains three STL files:
Cuerpo.stl
Tapa.stl
base.stl
Recommended printing configuration:
Material: PLA
Supports: Yes
Microwriter โ 3D printable enclosure
The Cults3D page also includes photos of the completed build and internal assembly.
Watch the modern Microwriter in operation:
-
๐ Add modes for numbers and symbols โ reproduce more of the original Microwriter's modal input system instead of limiting chords primarily to letters and basic punctuation.
-
๐พ Build a document manager โ browse, reopen, rename, download, and delete saved microSD documents directly from the web interface.
-
โจ๏ธ Add USB HID output โ allow the Microwriter to act as a chorded USB keyboard for a computer, tablet, or other host.
Microwriter has been documented and referenced outside GitHub.
DFๅๅฎขๅจๅ โ November 21, 2025
DFRobot's Chinese Maker Community included the project in its weekly collection of noteworthy maker projects.
The feature describes the modern Microwriter as a recreation of Cy Endfield's portable writing device and highlights:
- the FireBeetle ESP32-P4
- six-button interface
- 16ร2 RGB LCD
- 3D-printed enclosure
- Wi-Fi text retrieval
- microSD storage
The article references the Hackster build tutorial as its source.
Complete English-language build tutorial published November 14, 2025.
It includes:
- history of the original Microwriter
- parts list
- enclosure design
- wiring
- Arduino setup
- chord operation
- Wi-Fi text retrieval
- microSD storage
- demo
- source-code links
- 3D files
Fabricando un oscuro dispositivo de los 70 para escribir en el camino
Spanish-language article by Roni Bandini about the history of the Microwriter and the construction of this modern ESP32-P4 version.
This article is also linked from the GitHub repository's About section.
The downloadable enclosure package includes the modern case, photographs of the finished build, and STL files.
Published November 14, 2025.
Short demonstration of the completed hardware and chorded text-entry system.
Microwriter 5-finger chord alphabet trainer
Interactive web application included with this repository for learning and practicing the five-key alphabet.
For readers interested in the original device:
Museum documentation for the original Microwriter MW4, including its chord keyboard, LCD, processor, memory, batteries, and interfaces.
Experimental and pre-production models of the Microwriter typewriter
The Science Museum collection includes original experimental and pre-production devices donated by Cy Endfield.
Historical overview of the Microwriter as an early portable text-entry and human-computer-interface experiment.
Other projects by Roni Bandini involving alternative writing systems, portable computing, and unconventional interfaces.
Turn a jailbroken Kindle Paperwhite into a minimalist networked typewriter with a Raspberry Pi and thermal printer.
Another experiment in stripping writing technology back to a deliberately constrained physical interface.
github.com/ronibandini/Kindle-Typewriter
Run Google Gemini directly from a jailbroken Kindle using BusyBox, Bash, KTerm, and the Gemini API.
Like Microwriter, it repurposes hardware intended for one interaction model and turns it into something quite different.
github.com/ronibandini/GeminiForKindle
Punched-card recognition using computer vision, Edge Impulse, and LattePanda IOTA.
Another project revisiting an obsolete computing interface with contemporary hardware and software.
github.com/ronibandini/PunchedCards
The firmware creates a Wi-Fi Access Point and serves the current text through an HTTP server.
The default source contains:
const char* ap_password = "12345678";Change this password before normal use.
The web interface uses plain HTTP and does not implement user authentication beyond the Wi-Fi password itself.
Avoid using it for sensitive text on an untrusted network.
Microwriter is released under the MIT License.
See LICENSE for details.
Roni Bandini
Maker, AI developer, electronic artist and writer.
- ๐ GitHub: @ronibandini
- ๐ธ Instagram: @ronibandini
- ๐ฆ X: @RoniBandini
- โ๏ธ Medium: bandini.medium.com
- ๐ ๏ธ Hackster: Roni Bandini
Contributions, forks, chord-layout experiments, alternative enclosures, and writing-interface adaptations are welcome.
