Thermal Typewriter

Murtaza Tunio
Nov 28, 2019 · 3 min read
(It looks neat because I threw everything behind the desk)

This past week I bought a thermal printer for an art project I’ve been working on. After it did its part during the show, I had the idea to turn it into a typewriter. A typewriter in the sense that it would take mechanical keystrokes and turn them directly into physical letters on a sheet of paper.

After using it for a while I can guarantee that the experience is indeed magical. It feels so nice and analog to write without using a screen. I have never experienced anything like this (save with an actual typewriter). Why is this special?

1) You can not see the line you are writing, it is hidden from view because the actual print head is buried five lines below the part where the paper leaves the machine.
2) I made it so that there is no backspace. So every letter you write is committed to paper forever, it makes you think twice before mashing the keyboard.
3) A side effect of not being able to see the previous 5 lines you wrote is that you have to keep track of what you have written. It forces you to maintain focus and flow — there is no way to check what you’ve written until it comes up and out of the printer.

How does it work?

My life was made easy by a python library (python-escpos) which implements the standard protocol for communicating to thermal printers. Using this and a stackoverflow post which describes how to fetch individual key-presses (like getch()) without having to press Enter each time. I added a few special keys to cut the receipt and had to use a different key for Enter. And that is all, no fancy extras.

The code:

The complete and entire code for the Thermal Typewriter

What could be improved?

As warned by the python-escpos docs, it is indeed a riot dealing with a ‘usb to parallel’ based interface. Every so often the buffer on the printer just quits, or the connection to the printer just drops out, which sadly requires me to hook up a screen and restart everything. And so, I advise using a printer with a usb or ethernet interface, and writing a better script than I have…

I would also like to take the Rasberry Pi out of the loop, and just have a cable between my modified keyboard and the printer. Perhaps in the future I can try to get an arduino nano inside the body of the keyboard.

Some More Pictures!

(Video coming soon!)

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade