Skip to content

Instantly share code, notes, and snippets.

@aphrodoe
Last active April 11, 2026 15:54
Show Gist options
  • Select an option

  • Save aphrodoe/953e5fc902d5e6ec4d5a578a546f8ef1 to your computer and use it in GitHub Desktop.

Select an option

Save aphrodoe/953e5fc902d5e6ec4d5a578a546f8ef1 to your computer and use it in GitHub Desktop.
Seedsigner UI on a 80x16 LCD Display

Alternative SeedSigner UI

After the call on Thursday, I was really excited about the LVGL front! I like working with constraints. Since exploring alternative UI/UX across various extremely constrained environments like lower resolution displays was a prospective project idea, it really clicked well to me.

So what better way to start exploring than going hands-on? I tried using what I had lying around, specifically the Arduino UNO R3 and a 16x2 character (80x16 pixels) LCD Display.

I took it as a fun challenge to create a semblance of the seedsigner UI in this constrained environment and I have been working on this since the call.

Disclaimer

  • This is not a seedsigner! Obviously, I can't have a SeedSigner with a limited scope board like a UNO R3. It is just a mockup that acts as a proof of concept for the LCD Display.
  • Even though it is a mockup, I have made sure that this works air-gapped as well. For demonstration purposes, I will be using the keyboard to provide input. However, since I have used only four keys (W, A, S, D) for navigation, this can be equivalently achieved by using four push buttons connected to the Arduino. I didn't have pushbuttons lying around, hence I used my keyboard.
  • It is not associated with any LVGL work, but the concept remains the same.

The Meat of it

I properly defined the problem statement. There were basically a few questions I had to work on for the solution:

  1. How do I work with a 80x16 display (only 16x2 characters) to represent the core screens in the SeedSigner UI?
  2. Should/Can I add some icons?
  3. How do I emulate the keyboard for the seed generation using words? I can't really show the entire on-screen keyboard with this small display.

Let's discuss how I addressed these questions one by one, along with the video demo of what I built.

Walkthrough

PXL_20260411_141323071.mp4

Here is how i dealt with the first two questions. Since I could only have two lines of characters, I reserved the first line for the breadcrumbs. The second line had to deal with all the other stuff. For navigating the content. I used two keys for up and down (in this video W and S). Since the screen size is small, it didn't make sense to move in two dimensions like in the original SeedSigner, hence I constricted it to a 1D scroll. I used the two other keys: D for selecting the option, and A for going back.

Another challenge was the icons. Since each character in this display is a 5x8 pixel grid, I did make some pixel art icons utilising that grid. In this video, you can see the icons for scan, seeds, tools and settings as well as an x for enabling persistent settings.

image image image image

The seed generation and BIP-39

This was the most significant challenge I faced. The Uno can't really load all the 2048 words in the RAM to display, it only has like 2KB RAM. Neither can I display a full on-screen keyboard to type it. To tackle the keyboard problem, I used the scroll behaviour of W and S to select letters from a list of 26. However, this was a tradeoff since it took quite some time. The only thing I could do to compensate is the autofill feature. Instead of loading all words in the RAM to display and select from the list, I loaded it in the Uno's 32 KB flash memory. Then I built a search engine function that fetches words one at a time from flash memory. As the user cycles through letters with the Up/Down buttons, the bottom row of the LCD instantly updates with the closest matching word. And it confirms it after 4 letters/ unique word (because no two words in the BIP-39 dictionary share the same first four letters), basically an autocomplete feature.

PXL_20260411_145904676.mp4

Afternote

I had quite some fun doing this challenge! I would really love to work on the LVGL stuff too and integrating it in various hardware scenarios and even audio experiences. As Keith pointed out in the call, the thing that is fixed is the JSON config. It will be upto the hardware to render it but the config would be the same. Also, I prefer hands-on so I hope to acquire more hardware for testing and integrating various UIs. I am also hoping to get my hands on the Pi Zero so I can finally set up my SeedSigner too!

@S1DDHEY

S1DDHEY commented Apr 11, 2026

Copy link
Copy Markdown

Wow really impressive work that too in just 2 days is insane.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment