This is the MVP. If I spin another iteration of the prototype I will add or change the following:

  • Larger 480x320 display rather than 320x240 because the text is too small to be comfortable to read. Can use a larger font, but then fewer characters will fit. Cheaper larger screens already appeared on the market since I started the project.
  • P-Channel transistors for turning off the LCD and backlight to enable better power saving modes.
  • Connect more Feather pins to the stm32 used by the terminal including some RTC pins so I can easily wake up the ESP32 every time the user starts typing.
  • Change the SWD header to something through-hole and/or more compact because the surface mount connector I'm using is rare and unnecessarily expensive.
  • Try and use lower profile male header pins on the Feather because the female headers are low profile. So there's an opportunity there to build something more compact.
  • Move the Feather to the other side because the battery connector protrudes out in the wrong direction. Also move it flush with the edge so the USB port doesn't hang out.
  • Include holes for the 12x2 and 16x2 SMD female headers' alignment pins. I had to snap those off to make it fit when I soldered them on.
  • Add PCB pads for a current-limiting (or 0-ohm) resistor for the LCD backlight. Right now it happens to work, but looking at the tolerance range of voltages and current on the LCD this implementation is maybe a bit dangerously minimal.
  • Consider adding up and down arrows even though that would likely ruin the keyboard symmetry. Right now I have them implemented as shift-left == up and shight-right == down. I also have tab implemented as shift-space. Other than that it is a full keyboard.

If I continue to work on the firmware, I will try and add:

  • A way to temporarily switch the display to a graphical mode. So you could have a MicroPython program that outputs graphics. Either some extension to the terminal commands over serial OR use the I2C pins I have connected.
  • Focus on power savings modes. Most of this will require hardware changes to matter as the LCD backlight is a big user and there's no easy way to wake up the ESP32 the moment a key is pressed yet.
  • More accurate terminal emulation. It only really supports one "active" line (the last one) because of the focus on supporting MicroPython's readline, so all previous lines are basically a dumb scrollback buffer. Would need some changes to support, say, curses type "full screen" text apps.
  • A way to clear the screen through a keyboard shortcut would be nice.
  • I have all the LCD pins connected for using the 16-bit data bus, but so far I'm only using an 8-pin bus.
  • There are still some low hanging fruit optimisations in the text rendering and rendering the text line buffer to screen.

Oh and I'm working on some ideas for 3D-printed keycaps and a case.