

Selenium s
Welcome to MKPico, a framework designed for creating custom keyboard firmware using the Raspberry Pi Pico microcontroller. MKPico is built using FreeRTOS, Pico SDK and tinyUSB.
- Size
- 126.2 × 90.5 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 73
- Nets
- 79
- Pads
- 412
- Tracks, vias
- 526, 54
- Routed
- Yes
- KiCad
- KiCad 8.0 (file 20240108)
- Created
- 6 Jul 2024
- Updated
- 29 Nov 2024
Overview
Selenium s is an open-source printed circuit board by randcanary, from the randcanary/mkpico repository on GitHub. It is a 2-layer board of 126.2 × 90.5 mm with 73 parts on 79 nets, routed with 526 tracks and 54 vias.
It is built around the WS2812B-2020. Its parts include 36 diodes, 34 switches, 2 connectors and 1 IC. It belongs with the RP2040 boards of this library.
Main components
1README
Readme.mdMKPico, a Pi pico USB Keyboard framework
Welcome to MKPico, a framework designed for creating custom keyboard firmware using the Raspberry Pi Pico microcontroller. MKPico is built using FreeRTOS, Pico SDK and tinyUSB.

Overview
This repository is the home of MKPico, and it includes everything you need to get started with developing your own keyboard firmware. MKPico abstracts the complexities of USB communication and real-time task management, providing an easy-to-use framework that is both powerful and efficient.
The first project built using MKPico is Selenium S, a custom 34-key split keyboard that demonstrates the capabilities of the framework. Selenium S serves as a reference implementation and a starting point for your own projects.
The main goals of the project are:
- Cross-Platform Compatibility: MKPico ensures that your keyboards work seamlessly across multiple operating systems, including Linux and Windows.
- Support for Boot and Normal Modes: The framework fully supports USB boot mode, making your keyboard operational even during system boot (BIOS/UEFI) and in the normal operating system environment. Real-Time Operating System: Powered by FreeRTOS, MKPico offers real-time task management, allowing for precise control over keyboard functions and responsiveness.
- USB Protocol Management: Built on TinyUSB, MKPico handles USB communication reliably, ensuring your keyboard is fully compliant with USB standards.
- Modular Design: MKPico’s modular architecture allows you to extend or customize the framework to suit specific needs, whether it’s adding new HID features or integrating with other hardware components.
- Easy porting to new keyboard designs: The repository should allow to create new keyboard designs easily by defining a new layout and some key characteristics.
Project Structure
The MKPico project is organized into several key directories, each serving a specific purpose in the development and configuration of custom keyboards. Below is an overview of the project structure:
-
config/:- This folder contains configuration files for specific keyboards. Each keyboard has its own configuration file, which defines settings such as the key layout, pin mappings, and any special features or behaviors unique to that keyboard. By modifying these files, you can easily adapt MKPico to support different keyboard designs.
-
include/:- The
includedirectory houses the internal API headers that define the interfaces and data structures used throughout the MKPico framework. These headers are essential for maintaining a clear and consistent API across different modules of the project, making it easier to develop and extend functionality.
- The
-
src/:- This folder contains the core logic of the MKPico framework. It includes the following components:
- Internal I2C Communication: Manages communication between the split halves of the keyboard, ensuring synchronized key presses and other functions across the two parts.
- USB Interface: Handles the USB communication with the host computer, including enumeration, report generation, and processing of USB HID events.
- Logic of Layers and Key Map: Implements the functionality for keyboard layers and key mapping, allowing users to define multiple layouts and switch between them dynamically.
- Keystrokes Handling: Processes key presses and releases, manages debouncing, and ensures accurate and responsive input detection.
- This folder contains the core logic of the MKPico framework. It includes the following components:
Getting started
This section guides you through setting up the environment to work with FreeRTOS and the Raspberry Pi Pico SDK.
1. Clone FreeRTOS Repository
First, clone the FreeRTOS kernel repository:
git clone https://github.com/FreeRTOS/FreeRTOS-Kernel.git
cd FreeRTOS-KernelAnd move to the smp branch that supports multiple core:
git checkout -t remotes/origin/smp
git submodule update --init2. Clone Pico SDK Repository
Second, clone the Pico SDK repository:
git clone https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init3. Set environment variables
Set environment variables to point to the FreeRTOS and Pico SDK directories:
export FREERTOS_KERNEL_PATH=/path/to/FreeRTOS-Kernel
export PICO_SDK_PATH=/path/to/pico-sdk4. Initialize project code
Now, clone your project repository and initialize it.
cd /path/to/your/workspace
git clone https://github.com/tknbr/mkpico.git
cd mkpico
git submodule update --init5. Set up CMake and Build the Project
You can now set up CMake and build the project:
mkdir build
cd build
cmake ..
makeAcknowledgements
The development of MKPico and the Selenium S keyboard was greatly influenced and supported by the vibrant communities dedicated to mechanical keyboards and custom firmware development. We would like to extend our gratitude to the following communities and content creators for their invaluable resources, tutorials, and inspiration:
-
Mechanical Keyboard Enthusiasts on GitHub: The numerous open-source keyboard projects and libraries available on GitHub have been instrumental in shaping the direction of MKPico. Special thanks to repositories like QMK Firmware, which provided insight into advanced keyboard features and firmware structure.
-
YouTube Content Creators: Channels such as Joe Scotto and Ben Vallack have offered detailed build guides, reviews, and deep dives into keyboard design that have been incredibly helpful during the development process.
-
Online Keyboard Communities: Platforms like r/ErgoMechKeyboards on Reddit, and forums like Geekhack, have provided a wealth of information and community support that was crucial in overcoming challenges during the project.
This project would not have been possible without the contributions of these communities, and we encourage anyone interested in custom keyboard development to explore these resources and get involved.
Parts
73| Qty | Value | Footprint | References |
|---|---|---|---|
| 34 | Diode | ScottoKeebs_Components:Diode_SOD-123 | D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +18 |
| 34 | Keyswitch | ScottoKeebs_Hotswap:Hotswap_MX_1.00u | S1, S2, S10, S11, S12, S13, S14, S15, S16, S17, S18, S19, S20, S21, S22, S23 +18 |
| 2 | AudioJack4 | Connector_Audio:Jack_3.5mm_PJ320D_Horizontal | J1, J2 |
| 2 | WS2812B-2020 | LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm | D35, D36 |
| 1 | Raspberry_Pi_Pico | ScottoKeebs_MCU:Raspberry_Pi_Pico | U1 |
Questions
How big is the Selenium s PCB?
It measures 126.2 × 90.5 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Selenium s use?
73 parts, built around the WS2812B-2020. 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 Selenium s KiCad files?
From the randcanary/mkpico repository on GitHub, at the commit this page was made from: the board is config/selenium_s/pcb/v4.kicad_pcb and its schematic config/selenium_s/pcb/v4.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Selenium s design in my own project?
Its repository states no licence, so its author keeps all rights: ask randcanary before reusing the design.
Similar boards
- 4 layers16.9 × 119.4 mm

- 4 layers78 × 59 mm

- 2 layers240 × 240 mm

- 2 layers26 × 28 mm

- 2 layers86 × 54 mm

- 4 layers35 × 85 mm

Vimdrones esc development board
VimDrones/AM32_esc_development_board
Open Source AM32 ESC development board
95 parts44GPL-3.0 - 2 layers31.9 × 36 mm

Lemon pcb swizzle
rianadon/Cosmos-Keyboard-PCBs
Open-Source keyboard PCB designs for the Cosmos Keyboard Generator
63 parts43 - 6 layers155.5 × 194.6 mm

NerdEKO Gamma NoATX
phil31/NerdEKO-Gamma
fork of the NerdOCTAXE-Gamma design (https://github.com/Patsch91/NerdOCTAXE-Gamma), with 12 x BM1370 (14TH/s SHA256)
499 parts42