rpi-gpio-matrix-keyboard
rpi-gpio-matrix-keyboard copied to clipboard
User space GPIO matrix keyboard driver for Raspbery Pi
Raspberry Pi GPIO Matrix Keyboard
User space GPIO matrix keyboard driver for Raspbery Pi. Can be used to put Raspberry Pi into an old computer case with a functional keyboard without any extra hardware like Arduino or Keyrah.
The code is designed for Commodore Plus/4 keyboard layout, but can be easily modifed to support other 80s and 90s computers' keyboards (Commodore 64, 8-bit Atari, Amiga, etc.)

Compilation
cmake .
make
Installation
To install the keyboard driver as a systemd serice
sudo cmake install
Commodore Plus/4 Wiring
This is the wiring used to define the cols, rows, and keymap. Additionally the LED pins can be connected to a free GPIO and GND for extra functionality (or simply +5v).

| Plus/4 Pin | Pi GPIO Pin | GPIO No. | Matrix map |
|---|---|---|---|
| 1 | 3 | 2 | Row 6 |
| 2 | 7 | 4 | Col 4 |
| 3 | - | - | LED GND |
| 4 | - | - | LED |
| 5 | 8 | 14 | Row 1 |
| 6 | 10 | 15 | Col 5 |
| 7 | 11 | 17 | Row 2 |
| 8 | 12 | 18 | Col 6 |
| 9 | 13 | 27 | Col 7 |
| 10 | 15 | 22 | Row 4 |
| 11 | 16 | 23 | Row 3 |
| 12 | 18 | 24 | Row 5 |
| 13 | 19 | 10 | Col 3 |
| 14 | 21 | 9 | Col 2 |
| 15 | 22 | 25 | Row 7 |
| 16 | 23 | 11 | Col 8 |
| 17 | 24 | 8 | Col 1 |
| 18 | 26 | 7 | Row 8 |

Python Prototype
The Python script gpio_keyboard.py is my initial version of this driver. It has basically the same funcitonality except:
- Python
evdevdoes not seem to supportEV_REPon the uinput objects, so the emulated keyboard will not generate auto-repeat - At 60Hz scanning frequency it takes about 6% CPU compared to <1% for the C version.