I have been thinking about building an open-source RPI Pico-based E-Ink writer for a long time. I was primarily motivated by my opinion that the Freewrite seems way more expensive than its components should cost. I also didn't like the industrial/mechanical design, and I didn't like a lot of the choices made by the company (cloud storage). I wanted a little more flexibility, such as being able to use my own keyboard. I haven't started a GitHub project page and unfortunately, I don't think I have the capability of pulling this off as a single hardware/firmware developer, so I'm putting my ideas into the ether so that maybe someone picks this up and brings it into a reality.

The webcomic "The Guy I Almost Was" put me down this path twenty plus years ago. There's a part of the story where the author daydreams about buying a typewriter at a garage sale - the same one William Gibson used to write Neuromancer - to pursue his own fantasy of becoming a beatnik novelist after nearly becoming broke, homeless, and rejected for not having the latest Apple Newton. https://www.electricsheepcomix.com/almostguy/
Writing and editing became a large part of my career in technology, but I've felt I never developed the habits of a 'good' writer and am distracted like everyone else by the Internet at my desk and my cellphone everywhere else. Several writers have talked about using old word processors to write their novels and I thought I could be one of these people. Back in 2016 my iPhone 5 screen was damaged and I didn't have the funds to fix it, so I ended up buying a Chang Jiang長江 card phone which could fit in my wallet. It was bliss, until I began 'missing out' on the social scene happening in group chats... but I still yearn for an offline, disconnected experience and continue to pursue this idea.

I call my e-ink writer 'the microWrite', 'μWrite', 'uWrite', or 'you write'. I call it this since I'd like to use micropython as the basis of the firmware/software. An e-writer was one of the first projects that came to mind when I discovered micropython. I don't think lack of USB host mode is the biggest problem; this can be overcome with an extra micro-controller. There are several options which I'll detail in this post. The major components of the MicroWrite can probably be had for less than $150, and perhaps half of this at scale and if a smaller e-ink display is used:

- An RPI Pico as the main processor module.

-- The new "w" Wi-Fi enabled version takes care of connectivity.

-- The castellated pads makes integrating the RPI Pico onto another PCB very simple.

-- The 'sleep' function of a microcontroller combined with an E-Ink displays persistent image retention when powered off seem like a perfect combination.

- An e-ink display. There are many more options on the market nowadays.

-- Pervasive Displays has a large number of options with different sizes, resolutions, and features, such as partial refresh (they even have micropython libraries for some of their product line): https://www.pervasivedisplays.com/

-- As a stop-gap solution, I thought about finding a large character LCD or VFD to test out the basic hardware concepts before diving into e-ink.

- USB host IC. Since the RPI Pico doesn't offer USB host/OTG functionality, a second controller co-processor/micro-controller allowing users to plug in their keyboard of choice. However, YouTuber Ben Eater has made a few videos explaining the complexity of USB keyboard protocols (basic/advanced), so supporting every USB keyboard could be a challenge. Luckily there is a WCH CH559-based project which allows USB to serial translation. The RPI2040 has 4 serial interfaces which could handle this input.

-- https://github.com/atc1441/CH559sdccUSBHost

-- Another option is the Maxim MAX3421E (I bought a dev board for this and never opened it) https://www.maximintegrated.com/en/products/interface/contro...

-- There are more discussions about USB host on the micropython forum: https://forum.micropython.org/viewtopic.php?t=6013

-- It might also be possible to use a WCH376, these are popular ways to add USB flash/SD card storage to 8-bit systems (ISA), but peripheral support hasn't emerged from the open source community.

-- Another option might be bluetooth, but I didn't investigate this that much.

- Power. This is a bit more complicated since various buck/boost converters, and battery charger ICs would be needed to supply the various voltages, handle charging, powering a keyboard, and handling "sleep". There are so many options, such as 18650 lithium or larger cells, or Nokia batteries, that this isn't a major concern.

- Storage and connectivity. There are also a lot of options for this. Millions of characters can be stored cheaply and the RPI Pico has a lot of great connectivity. I didn't like the cloud features of the Freewrite, but I suppose those could be implemented easily.

- Industrial design. 3d printing is ubiquitous and I'm sure a community of designers would design their own bespoke options to accommodate different screen sizes and layouts.

- Manufacturing. There are so many PCB manufacturing houses available now. Kicad has put schematic and layout tools into the hands of anyone willing to learn.

Software Design Considerations

There are so many software design considerations that the project becomes overwhelming.

-How many characters are "enough" to show on screen?

-Do I incorporate different font sizes?

-Do I use monospace fonts, or try to implement proportional fonts?

-Do I stick with an ASCII character-set and ASCII file-encoding, with a simple 80 column screen or do I go all out and try to implement unicode right-to-left language support for languages like Hebrew and Arabic and IME input for East Asian languages?

-How do I handle screen updates and 'keeping track' of what parts of the e-ink display need to be updated? My biggest concern from a software perspective is actually the biggest grip from the author: How would I implement the cursor/editing system and screen update routines? I came across this page which opened up a can of worms: https://lord.io/text-editing-hates-you-too/

-How do I handle the 'sleep' routines for the USB host IC, E-Ink, and the RPI2040 to conserve battery, while at the same time remaining responsive enough to the user (so that keystrokes are not lost).

Future

If all this could be solved, the microWrite could be used as a terminal device; allowing SSHing into another computer. Or maybe it could even be used to expose the python repl environment, allowing individuals to code from it. It could also be the basis of an e-reader; and maybe this is a first step to solving the challenges of displaying text.