The first YARH.IO handheld — a modular Raspberry Pi 3B+ device built for hackability. Every component is accessible and replaceable. Exposed GPIO, I2C bus, and a fully open design make it a platform for experimentation, not just a finished product.

MKI handheld in hand

The MKI uses a modular architecture where the main module houses the Raspberry Pi 3B+, display, power supply, battery, RTC, and GPIO ribbon cables. The extension module connects underneath and carries additional hardware — USB devices, LoRa radios, RFID readers, IR transceivers, or a Pi-DAC+ for audio. A shared USB connector and a full GPIO header on the bottom of the main module make the interface between the two. The width of the main module is set by the keyboard dimensions for comfortable handheld use.

MKI right side view

The display is a Kuman 5-inch resistive touch screen running at 800x480 over HDMI with an SPI-based ADS7846 touch controller. Resistive touch works with any stylus or gloved hand. The screen is large enough for terminal work, web browsing, and graphical applications without compromise. Touchscreen calibration is handled through xinput-calibrator and a persistent Xorg config file.

MKI left side view

Input comes from a Fosmon portable Bluetooth keyboard with a built-in trackpad. The layout includes modifier keys for Vim, tmux, and Emacs workflows. The trackpad provides pointing capability for graphical applications and web browsing. Bluetooth pairing is done once through the system menu; on subsequent boots the keyboard reconnects automatically when you press Enter.

MKI top view

Power comes from a single removable Fenix ARB-L21-5000 lithium-ion cell — 5000 mAh in a standard 21700 form factor. The battery slides out for quick swaps in the field. Charging and 5V regulation use the internals of a Fenix ARE-D1 smart charger, mounted inside the housing. The Raspberry Pi 3B+ was chosen deliberately over the 4B for this build: lower power draw means longer runtime on a single cell, and the 3B+ provides more than enough compute for terminal work, scripting, and lightweight GUI tasks.

MKI rear open

A DS3231 high-precision RTC module keeps time when the device is offline. It connects over I2C and is configured via a device tree overlay. The Raspberry Pi GPIO header is broken out to IDC connectors on the bottom of both the main module and the extension module, using 40-pin, 26-pin, 14-pin, and 10-pin female IDC sockets. This gives direct access to GPIO, I2C, SPI, and UART lines without opening the case. Any Raspberry Pi HAT or add-on board can be wired in through the extension module.

MKI with keyboard

No snap-fit or glued joints. Every panel is fastened with #2-56 stainless steel socket cap screws — 1/4", 3/8", 1/2", and 3/4" lengths throughout. The device can be fully disassembled and reassembled with a single hex driver, and the screws tolerate repeated cycles without stripping. Rubber bumpers on the base protect surfaces and prevent sliding. All housing parts are 3D-printed in PLA, ABS, or ASA depending on the required strength and heat tolerance.

Parts

Part Source
Raspberry PI 3B+Raspberry Pi
Kuman 5'' Resistive Touch Screen 800x480 HDMI TFT DisplayAmazon
Fosmon Mini Bluetooth KeyboardAmazon
Fenix ARE-D1 is a single channel smart chargerFenix Tactical
Fenix ARB-L21-5000 V2.0 Li-ion rechargeable batteryAmazon
High Precision Real Time Clock ModuleAmazon
40 Pin IDC Socket Connector Male X 3Amazon
40 Pin IDC Socket Connector FemaleAmazon
26 Pin IDC Socket Connector FemaleAmazon
14 Pin IDC Socket Connector FemaleAmazon
10 Pin IDC Socket Connector Female X 2Amazon
2 Position 3 Pin SPDT Mini Micro Toggle SwitchAmazon
Micro USB Connector AdapterAmazon
USB 2.0 Type A Male Socket ConnectorAmazon
Flexible Silicone Rubber Wire 24AWG, 28AWGAmazon
Jumper Wire Pins, Male and FemaleAmazon
#2-56 Socket Cap Screw, Stainless Steel. 1/4'' x 33, 3/8'' x 20, 1/2'' x 8, 3/4'' x 4.Trimcraft Aviation RC

System & Software

Software packages

sudo apt install tmux vim mc xserver-xorg-input-evdev xinput-calibrator i2c-tools -y

/boot/config.txt

# Enable internal audio (loads snd_bcm2835)
dtparam=audio=on
# Configure HDMI
disable_overscan=1
hdmi_drive=1
hdmi_force_hotplug=1
hdmi_ignore_edid=0xa5000080
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
# Enable 800x480 Mode
hdmi_cvt 800 480 60 6 0 0 0
# Enable Touchscreen
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
# Enable RTC
dtparam=i2c_arm=on
dtoverlay=i2c-rtc,ds3231

/usr/share/X11/xorg.conf.d/10-evdev.conf

sudo cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf

/usr/share/X11/xorg.conf.d/40-libinput.conf

Section "InputClass"
    Identifier "libinput touchscreen catchall"
    MatchIsTouchscreen "on"
    MatchDevicePath "/dev/input/event*"
    Driver "evdev"
EndSection

/usr/share/X11/xorg.conf.d/99-calibration.conf

Section "InputClass"
    Identifier "calibration"
    MatchProduct "ADS7846 Touchscreen"
    Option "Calibration" "142 3964 295 3975"
    Option "SwapAxes" "0"
EndSection

After everything is set up and the system is rebooted, run "Calibrate screen" from the system menu and replace the default "Calibration" values with the new ones.

Bluetooth Keyboard

To connect the Bluetooth keyboard for the first time, use the Bluetooth icon on the menu bar and select Add device. Press the Bluetooth button on the keyboard — the blue light starts blinking. The keyboard icon and name "Bluetooth Keyboard" should appear in the Bluetooth devices list. Select and Pair.

To connect the Bluetooth keyboard after a device reboot, wait until the system has completely loaded and press the Enter button. The blue light on the keyboard starts blinking. As soon as the blue light turns off, the keyboard is connected and ready to use.