Skip to content

felixm-byte/multifunctional-fn-keyboard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Jun 5, 2026
a433743 · · Jun 5, 2026

History

21 Commits
Jun 4, 2026
Jun 5, 2026
Jun 4, 2026
Jun 4, 2026
Apr 2, 2026
Jun 5, 2026

Repository files navigation

multifunctional-fn-keyboard

A function keyboard that is also a retro-style game controller. Switch modes, display button mappings or (soon) cool graphics on the colour display, and connect to any USB device. Includes accelerometer/gyroscope for natural-feeling motion controls in games. a poster explaining features of the device, a photo and text in English and Simplified Chinese

Schematic diagram showing the wiring of pins on the Pi Pico. Schematic diagram PCB render

Inspiration

I've always thought a little remappable keyboard would be super useful for input in DIY projects, to easily test USB input, and I love the GameCube controller's middle screen and wanted to design games around it, so I decided to build this project to combine those 2 goals. Once I build the physical model, I will test out multi-key input for deeper shortcuts within apps, to make it also work as a function keyboard. I also have a built-in accelerometer/gyroscope, which will make for fun features and interactions in games and potentially also for software shortcuts.

Design note

The controller works better without button-caps since the buttons can be directly exposed. This means I need one less part and one less supplier, making the design cheaper and simpler, and it is fine to expose buttons directly from the PCB, which is done in products like Hack Club Sprig.

Parts

  • Display: ST7735 LCD display from Aliexpress, "1.8 TFT NO TOUCH" version
  • Microcontroller: Pi Pico 2 (definitely compatible with 2W, probably also with original series Picos)
  • Refer to ibom.html for interactive bill of materials
  • all other parts listed with LCSC part numbers in design/production/bom.csv
  • PCB parts: £14.70 (backorder or JLCPCB idle parts) + £3 (display + screws)
  • 3D printed parts
  • 4xM3 16mm (pan-head) screws with nyloc ends
  • I have included a seperate document with links (bom-links.csv) for ease of purchasing, but it is probably best to get all parts except the Pi Pico using the JLCPCB assembly service.
  • Total part cost: ~£18 (excluding PCB production and case 3D printing)

Renders

product isomorphic render product top-down render For demonstration only - colour and look will vary based on PCB manufacturing and colour used..

Details

  • Runs on MicroPython - you need to install this on the Pi Pico before installing main.py, mappings.kb and gamepad_mappings.kb (the content of the mappings files can be the same, but you need one mappings.kb and one gamepad_mappings.kb for the firmware to run)
  • Uses basic USB keyboard inputs (currently - additional feature implementation in progress) so universally compatible with devices supporting USB HID
  • Designed in KiCad (PCB) and OnShape (case) - click to open source files, use these programs to open or edit.

Setup guide

  • Get together all of the parts listed in the parts list (the 3D-printed shell is optional but strongly recommended for safety and comfort).
  • To get all of the parts I will manufacture the PCB using a service like JLCPCB using the Gerber source file (design/gerber.zip), purchase parts using the bom.csv file which can be uploaded directly to LCSC for convenience. It could be more cost-effective to buy a Pi Pico 2 from a local source than LCSC. I would recommend you do something similar.
  • Solder on all parts as shown in diagrams, including the Pi Pico (2) which should be soldered onto the PCB. The soldering should be moderate/medium difficulty, but I have not assembled it yet myself. Alternatively, use a PCB-assembly service like JLCPCB (notes in PCB assembly section).
  • (optional) design/production/case-(bottom/top).stl are the 3D printing file for the case. 3D print the case in 2 seperate parts and use M3 16mm screws and nyloc nuts to attach it to the PCB, by placing the PCB into the slots in the bottom (larger) part of the case, inserting the screws through from the bottom, placing the top part of the case (which has cross cutouts for the button layouts) above the PCB and using the nyloc part to secure the screws from the top.
  • (optional) Set up a custom .kb mappings file using the setup.py tool, ensure it is named mappings.kb or gamepad_mappings.kb for its use.
  • Install main.py along with required micropython libraries (from external libraries section of readme), and .kb files, to the Pico.
  • Connect to the device via USB. Press one button along with the HELP button to see what a button is mapped to. Hold down the 1,2,3,4&5 buttons simultaneously to switch from gamepad to keyboard mode (this leads to changed latencies for the specific use).se).

PCB assembly

  • If you would prefer not to assemble the PCB by hand, I would recommend using a PCB assembly service, especially for the small parts that can be placed cheaply by this service.
  • I made an effort to minimise the number of parts used that are outside the JLCPCB basic library, so that the model can be assembled affordably using the JLCPCB PCBA service, which charges a US$3 fee per JLCPCB 'extended' part used.
  • Some parts like the Pi Pico itself are non-machine-solderable (JLCPCB charges much extra for them) so I would recommend soldering them yourself, but you can pay the extended manufacturing surcharge and a series of $3 'extended parts' fees to have it fully assembled if that suits you better.
  • Please let me know if there are any JLCPCB basic parts that could be used as substitutes so I can integrate them into the design, but I have looked quite deeply into this so I doubt there are any.
  • I have chosen the B3F-4000 switches because of their much greater number of cycles (3 million vs 100 thousand) which is important for a keyboard that would be used regularly. Feel free to substitute this to suit your usecase.

References

External libraries

About

A function keyboard that is also a game controller

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published