Skip to the content
PCBKitNew board
2 layers108 × 55 mmMacroKeyPad, the printed circuit board in 3D

Open Source Keyboard Appliance powered by Rust

Size
108 × 55 mm
Copper layers
2
Thickness
1.6 mm
Parts
28
Nets
47
Pads
137
Tracks, vias
208, 27
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
10 Jul 2025
Updated
27 Nov 2025

Overview

MacroKeyPad is an open-source printed circuit board by 9elements, from the 9elements/OSKAR repository on GitHub, published under the Apache-2.0 licence. It is a 2-layer board of 108 × 55 mm with 28 parts on 47 nets, routed with 208 tracks and 27 vias.

It is built around the SK6812-EC20. Its parts include 8 resistors, 4 switches, 3 connectors, 1 IC and 1 diode. It belongs with the keyboards and input boards and the RP2040 boards of this library.

Main components

1

README

README.md

Open Source Keyboard Appliance powered by Rust

OSKAR is a firmware for the Raspberry Pi Pico that combines the 9elements picoprog project and additional HID code into a firmware for our multi-feature Macro-Keypad.

Prerequisites

Before you can compile and use OSKAR, you need to install the following dependencies:

  • Rust and Cargo: Follow the instructions on the official Rust website to install Rust and Cargo.
  • Install flip-link and elf2uf2
sh
# Only Linux
sudo apt install build-essential libudev-dev pkg-config

# All systems
cargo install flip-link elf2uf2-rs

Compiling the Firmware

To compile the firmware, follow these steps:

  1. Clone the repository:
sh
git clone https://github.com/9elements/OSKAR.git
cd OSKAR
  1. Build the firmware:
sh
cargo run --release
  1. The compiled binary will be located in the target/thumbv6m-none-eabi/release directory.

Flashing the Firmware

To flash the firmware onto the Raspberry Pi Pico, follow these steps:

  1. Connect the Raspberry Pi Pico to your computer while holding the BOOTSEL button. This will put the Pico into USB mass storage mode.

  2. Copy the UF2 file to the Pico:

sh
# Linux
cp target/thumbv6m-none-eabi/release/oskar.uf2 /path/to/pi/volume

# macOS
cp target/thumbv6m-none-eabi/release/oskar.uf2 /Volumes/RPI-RP2/
  1. The Pico will automatically reboot and start running the new firmware.

Usage

Modes

The Device features a 3-position selection switch on its left side. When the switch is moved all the way to the back it simply acts as the picoprog featuring SPI and UART capabilities (Green LED). Moved all the way to the front it acts as a Macro Keyboard (Red LED). With the switch in the middle position the device combines both features at once (purple LED).

Macro Keyboard

The standard firmware of the Keyboard has the encoder configured as volume knob with mute on press. The keys 1-3 (from left to right) are configured as o s and f (for open source firmware).

At the top of the file src/hid.rs there is a constant struct called KEYLAYOUT.

rust
const KEYLAYOUT:KeyLayout = KeyLayout {
    encoder_left: KeyType::Media(MediaKey::VolumeDecrement),
    encoder_right: KeyType::Media(MediaKey::VolumeIncrement),
    encoder_button: KeyType::Media(MediaKey::Mute),
    key1: KeyType::Keycode(KeyboardUsage::KeyboardOo),
    key2: KeyType::Keycode(KeyboardUsage::KeyboardSs),
    key3: KeyType::Keycode(KeyboardUsage::KeyboardFf),
};

The struct holds the current configuration of the Keyboard, each key can be configured to any keycode of the enum KeyType located in src/hid_codes.rs for example:

rust
const KEYLAYOUT:KeyLayout = KeyLayout {
    encoder_left: KeyType::Media(MediaKey::VolumeDecrement),
    encoder_right: KeyType::Media(MediaKey::VolumeIncrement),
    encoder_button: KeyType::Media(MediaKey::Mute),
    key1: KeyType::Keycode(KeyboardUsage::KeyboardF10),
    key2: KeyType::Keycode(KeyboardUsage::KeyboardF11),
    key3: KeyType::Keycode(KeyboardUsage::KeyboardF12),
};

Which could then be used to be configured as hotkeys in your operating system.

Serial (picocom or combined mode)

Once the firmware is running, you can use any terminal program to communicate with the UART and SPI peripherals via USB. The device will appear as a USB CDC (Communications Device Class) device. Currently /dev/ttyACM0 (macOS: /dev/tty.usbmodemOSFC20241) is a debug console that prints information about the Pico's current operation.

UART Communication (picocom or combined mode)

To communicate with the UART peripheral, open the corresponding serial port (e.g., /dev/ttyACM1 on Linux, /dev/tty.usbmodemOSFC20243 on macOS) with your terminal program. For now the Baud is fixed at 115200 but can be changed in code. Dynamic reconfiguration is still planned.

Using Flashrom or Flashprog (picocom or combined mode)

To interact with the Raspberry Pi Pico for reading and writing SPI flash chips, you can use tools like flashrom or flashprog. These tools support the serprog protocol, which allows communication over a serial interface.

  1. Install flashrom or flashprog e.g.:
sh
# Debian or Debian-based Linux distributions
sudo apt-get install flashrom

# macOS with Homebrew
brew install flashrom
  1. Use the following command to read from the SPI flash chip:
sh
flashrom -p serprog:dev=/dev/ttyACM2 -r backup.bin

This command reads the contents of the SPI flash chip and saves it to backup.bin.

  1. Use the following command to write to the SPI flash chip:
sh
flashrom -p serprog:dev=/dev/ttyACM2 -w firmware.bin

This command writes the contents of firmware.bin to the SPI flash chip.

Make sure to replace /dev/ttyACM2 with the correct serial port if your device is connected to a different port or if you're on a different operating system (on macOS it will be /dev/tty.usbmodemOSFC20245).

License

This project is licensed under the Apache 2.0 License. See the LICENSE file for details.

Parts

28
QtyValueFootprintReferences
810KResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R2, R3, R4, R5, R6, R7, R8
3~key-switches:Cherry_MX_SK6812_MINI_ESW1, SW3, SW4
2LOGOLOGOG***, G***
1Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_HorizontalJ2
1Conn_02x04_Odd_EvenConnector_IDC:IDC-Header_2x04_P2.54mm_HorizontalJ1
1PicoMCU_RaspberryPi_and_Boards:RPi_Pico_SMD_HEADERU1
1RotaryEncoder_SwitchRotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mmSW2
1SK6812-ESK6812-E:LED_SK6812-ED2
1SLW-1274547-4A-RA-DSwitch:SLW12745474ARADJ3

The 19 most common of 28 parts.

Questions

How big is the MacroKeyPad PCB?

It measures 108 × 55 mm and has 2 copper layers, 1.6 mm thick.

What parts does the MacroKeyPad use?

28 parts, built around the SK6812-EC20. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the MacroKeyPad KiCad files?

From the 9elements/OSKAR repository on GitHub, at the commit this page was made from: the board is hardware/pcb/MacroKeyPad.kicad_pcb and its schematic hardware/pcb/MacroKeyPad.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the MacroKeyPad design in my own project?

Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers81.2 × 96.6 mmKv4p ht PANEL, the printed circuit board in 3D

    Kv4p ht PANEL

    VanceVagell/kv4p-ht

    Open source handheld ham radio project KV4P-HT

    174 parts828GPL-3.0
  • 6 layers66 × 66 mmPD240W kicad, the printed circuit board in 3D

    PD240W kicad

    theohg/PD240W

    PD240W is a complete hardware and firmware project converting USB-C Power Delivery into a programmable 240W (48V 5A) bench power supply, featuring C++ code for Raspberry Pi Pico, custom PCB Gerbers, and a 3D-printable…

    299 parts125
  • 2 layers88.9 × 50.8 mmBLDC BIZ CARD, the printed circuit board in 3D

    BLDC BIZ CARD

    ageppert/Brushless-Motor-Biz-Card

    A brushless motor and driver built in to a business card form-factor for learning and experimenting!

    82 parts38MIT
  • 2 layers233.2 × 147.7 mmErgoSHIFT rgb, the printed circuit board in 3D

    ErgoSHIFT rgb

    mizma/ergoSHIFT

    11 button leverless controller with shifted home position

    84 parts19CC-BY-SA-4.0
  • 2 layers154.5 × 105.5 mmSeismos 5CoreStencil, the printed circuit board in 3D

    Seismos 5CoreStencil

    ReSummit/Seismos

    A split keyboard that evolves the concept of the Zebra keyboard, but fancier

    100 parts18GPL-3.0
  • 4 layers25.6 × 23.6 mmCANNONBALL, the printed circuit board in 3D

    CANNONBALL

    user-will/PCB_CANNONBALL

    An ESP32-C3 dev board with more sensors and features then you could know what to do with

    61 parts14
  • 2 layers99 × 99 mmButns, the printed circuit board in 3D

    Butns

    jhbruhn/butns

    a small grid 64 clone

    265 parts5MIT
  • 4 layers74.5 × 70.3 mmNest mini v2-drop in pcb, the printed circuit board in 3D

    Nest mini v2-drop in pcb

    marceldale/nest-mini-v2-voice

    Open voice satellite board for the Google Nest Mini (2nd gen): local Home Assistant voice assistant with ESP32-S3 + XMOS XU316, ESPHome, Voice PE compatible. Open hardware, prototype stage.

    249 parts4CERN-OHL-S-2.0