Whitterm-220 Clever Serial Terminal

June 4, 2016

21/12/18 UPDATE: Hello to Hack a Day readers. This project was shared when I did it but re-posted recently. It is 2.5 years old and there are many things I would do differently. I am considering work on a IO board specific to the project (RS232 driver, GPIO break-out, proper RX/TX LED buffers and potentially internal LiPo UPS). Glad there is renewed interest in the project as I still use it day to day :).

30/06/19 UPDATE: I did what I was considering! See the updated WT-220 2.0 here

The Whitterm-220 (WT-220) is my latest project. It’s a clever terminal, in the sense that it aims to emulate the dumb terminals of the 80s but with the versatility of something produced now. The name comes from my inspiration for the project: failure to win a VT-220 on eBay. I decided it would be fun to make a homage to the VT-220, that would actually be useful – a not so dumb, or clever terminal – that would do more than simply parsing RS232 levels into Ascii characters.

I used this project to experiment with Fusion 360. On the whole it has been good, although I did run into a number of features I’m used to on other pro CAD packages that are missing. It seems more of a in development tool, where features are added at the request of engineers in desperation upon finding a tool missing! The design is a stepped, laminated wood enclosure, which a screen and RPi assembly attach into. Each layer of plywood is a separate ‘sketch’, that I export to DXF for laser-cutting. You can view the assembly on Autodesk 360

Inside this laminated plywood enclosure is a Raspberry Pi 2, booting into Arch linux. Using a Raspberry Pi is what makes it a clever terminal – it has the serial I/O you’d get on a dumb terminal but running Linux enables SSH, firmware flashing, development, even a desktop shell. The screen is the official Raspberry Pi 7″ touch screen. It was dearer than other screens but since it uses an FPC connection rather than HDMI, it allowed me to create a bezel-less design.

In terms of IO, I have two DB9 connectors for RS232 level serial and TTL, enabling it to interface with industry kit and microcontroller projects (the RS232 levels are provided by a MAX3232 level shifter). Both connect to the hardware UART of the Pi, providing a reliable serial connection that cannot be obtained with USB adaptors. With the 6 free pins on the TTL DB9, I brought out GPIO from the Pi for internal/external driving of projects. Additionally there are two USB ports and a DC jack connecting to the input of a LM2596 buck converter, providing the Pi with a stable 5V on a range of input voltages.

The three forward most layers sit around the LCD and include RX/TX led indicators, illuminating an acrylic layer sandwiched in the middle.
The three forward most layers sit around the LCD and include RX/TX led indicators, illuminating an acrylic layer sandwiched in the middle.

As a power indicator, I sandwiched an acrylic layer with white LEDS at the front, which doubles up as RX and TX activity indicators. These indicators are buffered using a simple Op-Amp circuit (MOSFET would have been better but I had low voltage, rail to rail op-amps to hand), with the ability to force on with a GPIO pin if it becomes distracting.

RX and TX are buffered with this circuit to provide the LED indication. A MOSFET would have been better I had op-amps to hand.
RX and TX are buffered with this circuit to provide the LED indication. A MOSFET would have been better I had op-amps to hand.

As I said, it boots into Arch linux, which I’ve customised to load cool-retro-term – a terminal CRT emulator. It’s form over function but I like it. Here’s HTOP running in CRT

wt-220 htop gif

To demo the actual purpose of the device – a serial terminal – I’ve created a basic python ping pong script. My Macbook is connected via a TTL serial adaptor and sends ‘ping’ every second. The WT-220 waits for ping then sends pong back. Both print the send/receive to the term.