Skip to content

Latest commit

ย 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

MicrowriterC

โŒจ๏ธ๐Ÿ–ฅ๏ธ Microwriter

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

โœจ Features

  • โŒจ๏ธ 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

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:


๐Ÿง  How this version works

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚      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.


โŒจ๏ธ Chord system

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.


๐ŸŽ“ Interactive chord trainer

Learning a chorded alphabet is initially less intuitive than using QWERTY, so the repository includes a small browser game for practicing the key combinations.

โ–ถ๏ธ Open the Microwriter Chord Trainer

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

๐Ÿงฐ Hardware

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

FireBeetle 2 ESP32-P4

DFRobot FireBeetle 2 ESP32-P4

RGB LCD

DFRobot RGB LCD1602 V2


๐Ÿ”Œ Wiring

Chord buttons

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_PULLUP

so 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.


LCD

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);

๐Ÿ“œ Display behavior

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.


โŒซ Delete key

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

๐Ÿ“ก Wi-Fi Access Point

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.


๐ŸŒ Web interface

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

๐Ÿ’พ microSD storage

The FireBeetle 2 ESP32-P4 onboard TF/microSD slot is accessed through:

SD_MMC

The 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.


๐Ÿš€ Installation

1. Clone the repository

git clone https://github.com/ronibandini/Microwriter.git
cd Microwriter

2. Install ESP32 support

Install 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

3. Install the LCD library

Install:

DFRobot_RGBLCD1602

The firmware includes:

#include "DFRobot_RGBLCD1602.h"

4. Configure the Access Point

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";

5. Upload the firmware

Open:

microwriter5.ino

Compile and upload it to the FireBeetle 2 ESP32-P4.

The serial monitor uses:

115200 baud

๐ŸŽฎ Using the Microwriter

1. Power on

The LCD displays:

Microwriter 1.0
Roni Bandini

The firmware then initializes the microSD card.

2. Type

Press combinations of the five chord keys.

For example:

01100 โ†’ A

The letter appears immediately on the LCD.

3. Correct text

Use the dedicated delete button.

4. Retrieve text

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.

5. Save

Press:

๐Ÿ’พ Save to SD

to write the current text to a .txt file.


๐Ÿ“ Repository structure

Microwriter/
โ”œโ”€โ”€ html/
โ”‚   โ”œโ”€โ”€ index.html
โ”‚   โ””โ”€โ”€ readme.txt
โ”œโ”€โ”€ images/
โ”œโ”€โ”€ LICENSE
โ”œโ”€โ”€ README.md
โ””โ”€โ”€ microwriter5.ino

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

html/index.html

Standalone browser game for learning the Microwriter chord alphabet.


๐Ÿ–จ๏ธ 3D enclosure

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

Cults3D

Microwriter โ€” 3D printable enclosure

The Cults3D page also includes photos of the completed build and internal assembly.


๐ŸŽฅ Demo

Watch the modern Microwriter in operation:

โ–ถ๏ธ Microwriter demo on YouTube


๐Ÿ”ฌ Ideas for extending the project

  1. ๐Ÿ”  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.

  2. ๐Ÿ’พ Build a document manager โ€” browse, reopen, rename, download, and delete saved microSD documents directly from the web interface.

  3. โŒจ๏ธ Add USB HID output โ€” allow the Microwriter to act as a chorded USB keyboard for a computer, tablet, or other host.


๐Ÿ“ฐ External references

Microwriter has been documented and referenced outside GitHub.

๐Ÿ—ž๏ธ Independent / community coverage

DFRobot Maker Community China

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.


๐Ÿ› ๏ธ Project tutorials

Hackster.io

Making a Microwriter

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

Medium

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.


๐Ÿ–จ๏ธ 3D model

Cults3D

Microwriter

The downloadable enclosure package includes the modern case, photographs of the finished build, and STL files.

Published November 14, 2025.


๐ŸŽฅ Video

YouTube

Microwriter demo

Short demonstration of the completed hardware and chorded text-entry system.


๐ŸŽ“ Companion project

GitHub Pages

Microwriter 5-finger chord alphabet trainer

Interactive web application included with this repository for learning and practicing the five-key alphabet.


๐Ÿ“š Historical references

For readers interested in the original device:

Centre for Computing History

Microwriter MW4

Museum documentation for the original Microwriter MW4, including its chord keyboard, LCD, processor, memory, batteries, and interfaces.


Science Museum Group

Experimental and pre-production models of the Microwriter typewriter

The Science Museum collection includes original experimental and pre-production devices donated by Cy Endfield.


HCI Museum

Microwriter

Historical overview of the Microwriter as an early portable text-entry and human-computer-interface experiment.


๐Ÿ”— You may also be interested in...

Other projects by Roni Bandini involving alternative writing systems, portable computing, and unconventional interfaces.

โŒจ๏ธ๐Ÿ“š Kindle Typewriter

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


๐Ÿ“š๐Ÿค– Gemini for Kindle

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


๐Ÿ—‚๏ธ๐Ÿค– PunchedCards

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


๐Ÿ” Network note

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.


๐Ÿ“œ License

Microwriter is released under the MIT License.

See LICENSE for details.


๐Ÿ‘ค Author

Roni Bandini

Maker, AI developer, electronic artist and writer.

Contributions, forks, chord-layout experiments, alternative enclosures, and writing-interface adaptations are welcome.

About

Modern and functional emulation of the 1983 Microwriter text entry system, utilizing an ESP32-P4 microcontroller and a five-key keyboard matrix to input characters via "chords" (combinations of keypresses). The project allows writing text on an RGB 1602 LCD and sharing it via a Wi-Fi Access Point (AP)

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages