Tiny Thin Client Is Small But Compatible

We were impressed with [moononournation’s] tiny thin client project. It claims to use an Arduino, but as you might guess it is using the Arduino software along with a network-enabled microcontroller like an ESP32. The impressive part is that it is standards-compliant and implements VNC’s RFB protocol.

The original coding for RFB on Arduino is from [Links2004] and armed with that, the thin client is probably easier to create than you would guess. However, this project wanted to use a larger screen and found that it led to certain problems. In particular, the original code had a 320×240 display. This project was to use an 800×480 display, but with the limits on the ESP32, the frame rate possible would be under 7 frames per second. The answer was to combine a 16-bit parallel interface with better compression back to the VNC server.

The little keyboard is probably not very practical, but it is compact. That would be another easy thing to modify. Currently, the keyboard uses I2C, but it would be straightforward to change things up. This would be a worthy base to build a bigger project on top. A 3D printed enclosure would be nice, too.

We’ve seen a number of projects built around commercial thin clients. Some from defunct businesses are good sources for obscure parts, too.

10 thoughts on “Tiny Thin Client Is Small But Compatible

  1. It would be great if it were possible to virtualize a GUI application to somehow “project” its display directly to a VNC channel. This could be an easy-to-implement thick client app (think GTK, WinForms etc.) that uses this ultra-thin client just for the display and limited interaction: say, a 1.3″ e-Ink or OLED with a couple of buttons (not a real keyboard) would suffice for many uses but if the app itself runs on Windows or Linux or Mac it would be significantly easier to develop, would be less limited by hardware (could even run in the cloud for those who like clouds) etc. Also, in many cases frame rate wouldn’t be an issue, for example I’d want to have the current time, temperature and weather report shown on the screen and have a couple of buttons to change display modes. If seconds are not shown, the display would refresh once per minute or when the user clicks a button.

  2. Oh man, this would have had me so excited 20 years ago. It was my goal to have one big powerful computer and a terminal in every room. That kind of lost it’s appeal when my phone became the portable, wireless terminal that is always with me. I guess though, an affordable, power sipping solution like this wouldn’t have existed before the same advances that made my phone possible so I guess it just wasn’t to be…

  3. Another possible solution if the GUI application in question is one you’re writting yourself would be something like a lilygo t-display being driven from the host using belay (it was featured on hackaday recently). If you didn’t see it essentially belay allows you to command a board with micropython directly from a python script running on the host machine. I’ve only just started playing with it, so can’t really comment on performance, but I have got my display up and running and given it’s methodology I can imagine it being more responsive than a VNC with a lot lower overheads on both sides.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.