Raspberry Pi Card Keyboard
A script for using the M5Stack CardKB with Raspberry Pi
Setting your pi to us layout
In order for buttons to return the correct symbols, the keyboard layout will need to be set to us on your Pi. You can do this by running:
sudo nano /etc/default/keyboard
and changing XKBLAYOUT to us:
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
Enable I²C
The cardKB communicates over I²C, make sure this is enabled on your raspberry pi. You can find a tutorial on how to do so here.
Connect CardKB to Raspberry Pi
Connect the wires on the CardKB JST connector to the appropriate pin on the Raspberry Pi.
You may need to improvise a connection solution with breadboard wires like so:
Load the uinput module
You will need to load the uinput module to allow python-uinput to input key presses. You can check if it is loaded with:
lsmod | grep uinput
If nothing is displayed, then the module is not loaded. To load the module, run:
modprobe uinput
To load the module automatically on startup, run:
sudo nano /etc/modules
add uinput at the bottom of the file. Save and then reboot.
Install CardKB via PyPI
sudo apt update
sudo apt install python3-smbus python3-uinput python3-pip
sudo pip install --break-system-packages cardkb
Test CardKB
sudo cardkb &
[!IMPORTANT]
By default, the python script listens to/dev/i2c-1. Some displays (like the Pimoroni Hyperpixel) expose a different interface. You can specify which interface to use by adding an argument to the start command.sudo cardkb 11 &
Running CardKB when Raspberry Pi starts
We can use systemd to run the CardKB script as a service. To do so, you can use the cardkb.service from source code:
sudo curl -L -o /etc/systemd/system/cardkb.service https://raw.githubusercontent.com/ian-antking/cardkb/main/cardkb.service
[!IMPORTANT]
If you are running cardkb on a i2c bus other than 1, then you will need to edit thecardkb.servicefile to add the bus number to the end of theExecStartline like so:ExecStart=/usr/local/bin/cardkb 11
sudo systemctl daemon-reload
sudo systemctl enable cardkb.service
sudo reboot
When your Pi restarts, your cardkb should be working, allowing you to log in.
Metadata
Release files for cardkb 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cardkb-1.0.0.tar.gz | 4.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cardkb-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.7 kB
Release files / cardkb-1.0.0.tar.gz
| Download URL | cardkb-1.0.0.tar.gz |
|---|---|
| Size | 4.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e21e5779e8f7d018541363f7aa6078f244aebdb748515f6878fe9b83af269323
|
|
BLAKE2b-256 checksum How to use checksums |
6e81310ab88d12ab3b61e0c4289c6c120ea5787da3c0e2e72b6b2519c7768386
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2025.
Transparency logRelease files / cardkb-1.0.0-py3-none-any.whl
| Download URL | cardkb-1.0.0-py3-none-any.whl |
|---|---|
| Size | 5.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
64ba4d0b39c5044749aa39e72f28eb7063fe99bbf1b3378c71fb66a1cdc5ab90
|
|
BLAKE2b-256 checksum How to use checksums |
445f89b44f180286dc819045f4f5efb3dd8c20885046239bfb60b2e142bd443f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2025.
Transparency log