Standalone T9 Predictive Keyboard

Fast, tactile, one-handed typing with a T9 powered macropad. Runs CircuitPython, so you can drag/drop your own custom dictionary.

Similar projects worth following
A T9(ish) predictive-text implementation that lives in the firmware itself!
This means it will work on any machine that accepts USB keyboard input.
Great for quick one-handed typing.
Words are updated "in place" by quickly/strategically injecting backspace characters.

* Runs on any CircuitPython capable device hooked up to a 3 X 4 button matrix. Tested primarily on the RP2040.
* Words are stored in a serialized trie, which can be traversed directly from flash, so dictionary size does not impact program memory.
* Since dictionary lives on flash, it can be updated (drag+dropped, thanks CircuitPython!) independently of source code.
* Supports the other kind old cell phone style input, where you double/triple/quadruple-click a button to get the character you want.
* Can be alternatively booted as a normal number pad or function key matrix.

You remember T9, right?

This was the "predictive text" algorithm used mainly by cell phones in the 90's and 00's that allowed you to type on 12 buttons, while maintaining a keystroke-to-valid-character-input ratio of close to 1.

Basically, T9 searches through the combinations of letters tied to keypad sequences and looks for valid words/prefixes.

So if you typed: 2-3-3-7, the algo would have to search for words in:


If you're lucky, you'll have typed: beer

But if for some reason, that's not what you were going for, you can hit the "cycle" key and the algo will swap out "beer" for "beep", and then maybe "bees".

Here's a clip of me typing the word "actually". You can see the word replacements happening in real-time.

  • 1
    Connect Raspberry Pi Pico Pins

    Connect wires to pins:
    GP9, GP10, GP11 (These will connect to keypad column pins)
    GP12, GP13, GP14, GP15 (These will connect to keypad row pins)

  • 2
    Connect Keypad Pins

    Looking from the top, the left-most pins are connected to the rows, and are followed by the column pins.

  • 3
    Install CircuitPython on the Pico

    Follow the Adafruit instructions here.

    Make sure you're using a version newer that 6.2.X

View all 5 instructions

Enjoy this project?



sanchit wrote 06/06/2021 at 17:22 point


  Are you sure? yes | no

Leah wrote 06/04/2021 at 17:04 point

This is lovely! Some questions:

1) Will you be selling boards/kits like the ones listed at ?

2) If so, when? I'd like to buy one.

3) In any case... where did you get those fantastic keycaps? Did some googling, found nothing.

  Are you sure? yes | no

Guy Dupont wrote 06/04/2021 at 18:18 point

Thanks! And yes, I hope to sell a kit! The keycaps were designed by a friend, and I got them custom made. I am about to place a pretty big order! Will post here when they're available.

  Are you sure? yes | no

Leah wrote 06/04/2021 at 18:45 point

Exciting! Thank you!

  Are you sure? yes | no

Guy Dupont wrote 05/30/2021 at 20:27 point

If anyone for HAD sees this, I did not mean to submit for the "Rethinking Displays" Challenge :P

  Are you sure? yes | no

kristina panos wrote 05/31/2021 at 22:10 point

Thanks -- I made a note in the spreadsheet. :)

  Are you sure? yes | no

Guy Dupont wrote 05/31/2021 at 22:27 point

thanks Kristina! 

  Are you sure? yes | no

Mike Szczys wrote 05/25/2021 at 18:11 point

Awesome implementation! @Elliot Williams you should see this!

  Are you sure? yes | no

Guy Dupont wrote 05/25/2021 at 18:29 point

Thanks Mike! I have a few other hardware revisions too, including some vintage stuff. Should have a video this weekend.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates