Print My Messages

Tailwind CSS

Wouldn't it be awesome to send messages that the other person can see and hold in their hand immediately? Messaging with smartphones is boring. Letters take too long. Fax is outdated.

What about thermal printers? They are small and fast. That seems like a strange but good idea for a project!

The Design

thermal printer prototype

Two buttons, a rotary encoder, a display (2004 LCD, e-paper or OLED) and the thermal printing guts.

I love the ESP32 for it's features and form factor - so I went with it for the logic. Here is the designed UI and it even connects to a MQTT broker:

ui prototype

The sidequest

But plans change. Why? Because I got my hands on two EPSON TM-T20II thermal printers! Business grade, fast, and with automatic cutting:

ui prototype

A good friend joined the project. We wanted to integrate the ESP32 into the printer to make it usable with MQTT.

The Firmware

Summarised, we programmed the ESP32 with C++ with the following features:

  • Send EPOS (XML printing commands) over wifi to the printer.
  • MQTT client with multiple subscriptions to support different message types.
  • Parse gemini text (a simpler way of markdown)
  • Simple webserver to make settings and easily upgrade the firmware of the ESP32.

Here's the UI made with Tailwind CSS: firmware ui

The Hardware

To integrate the ESP32 into the printer we designed a case and replaced the drawer port with a usb connector for power delivery.

Now we have a printer that we can use with MQTT.

The app

We need an app. A web app to use it anywhere. We made a prototype with pure Web Components but at the end that didn't really work out because it was too much effort to get little things to work. Because of that we decided to switch over to Vue and use Vuetify for the UI.

The result: app Features: Connect to a MQTT broker, preview and send messages with gemini, live printer status, save printers / history and settings to local storage.

Further plans

And now? Currently we are improving the firmware and app. But, I would love to get the initial idea to work in the future. Someday, this post will receive an update.