自作キーボードの素 Shiroを買ったので、組み立ててラズパイで使ってみます。
ラズパイでは普段キーボードを使わずに、ちょっとした操作のみこのキーボードで使える用に設定していきます。
QMK-firmware ラズパイでやる
説明
この↓説明を読む

ラズパイなどLinux やってみる
(Windowsの場合はF:\Appli=/mnt/f/Appliに[Shift]+右クリックでLinuxシェルを開くで開いて作業する。)
qmk インストール
python3 -m pip install qmk
qmk --version
Warning: Your Python version is out of date! Some subcommands may not work!
Please upgrade to Python 3.7 or later.
Error: Your Python is too old! Please upgrade to Python 3.7 or later.
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
launchpadlib 1.10.6 requires testresources, which is not installed.
sudo apt install python3-testresources
Python アップグレード
Python3.65と古かったのでアップグレードする。
sudo apt-get install python3.7
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
sudo update-alternatives --config python3
alternative python3 (/usr/bin/python3 を提供) には 2 個の選択肢があります。
選択肢 パス 優先度 状態
------------------------------------------------------------
* 0 /usr/bin/python3.7 2 自動モード
1 /usr/bin/python3.6 1 手動モード
2 /usr/bin/python3.7 2 手動モード
python3 -V
Python 3.7.5
qmk_install.sh
cd script git clone https://github.com/qmk/qmk_firmware.git cd qmk_firmware util/qmk_install.sh まだ足りないみたい。以下をやる make git-submodule
Ubuntuの場合はPillowがどーのとエラーが出るのでアップグレードした。
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade pillow
これで各キーボードのHexファイルがダウンロードされるみたい。
make shiro:check make shiro:check:avrdude #Detecting USB port, reset your controller now.と出たら裏のリセットボタンを押す
うまくいかない時

sudo apt remove modemmanager
sudo chmod 777 /dev/ttyACM0 #別のシェルからやる、make shiro:check:avrdudeやったらすぐに実行する
この状態で、キーを押すとD1D2などが入力される。
make shiro:default make shiro:default:avrdude #Detecting USB port, reset your controller now.と出たら裏のリセットボタンを押す
数値がうまく入力できない?↓

この keymap.c ファイルだとCURしか使えない?みたい。
キーマップカスタマイズ
カスタマイズ
cd ~/script/qmk_firmware/keyboards/shiro/keymaps/default
この中のファイルconfig.h keymap.c readme.mdの3つあるうちの keymap.c を編集する。
$cat keymap.c #include QMK_KEYBOARD_H enum layer_number { _NUMBER = 0, _CURSOL, _MOUSE }; #define NUMBER TO(_NUMBER) #define CURSOL TO(_CURSOL) #define MOUSE TO(_MOUSE) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_NUMBER] = LAYOUT( NUMBER, CURSOL, MOUSE, KC_P7, KC_P8, KC_P9, KC_P4, KC_P5, KC_P6, KC_P1, KC_P2, KC_P3, KC_P0, KC_BSPC, KC_ENT ), [_CURSOL] = LAYOUT( NUMBER, CURSOL, MOUSE, KC_HOME, KC_UP, KC_PGUP, KC_LEFT, KC_ESC, KC_RIGHT, KC_END, KC_DOWN, KC_PGDN, KC_DEL, KC_BSPC, KC_ENT ), [_MOUSE] = LAYOUT( NUMBER, CURSOL, MOUSE, KC_CUT, KC_COPY, KC_PSTE, KC_UNDO, KC_FIND, KC_AGIN, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, KC_BSPC, KC_ENT ), };
Defaultディレクトリをコピー
カスタマイズする前にDefaultディレクトリごとコピーしておく。
cp -R ~/script/qmk_firmware/keyboards/shiro/keymaps/default ~/script/qmk_firmware/keyboards/shiro/keymaps/default.back
keymap.c 編集したら再度書き込む
Mouseの部分をWebiopiのリレースイッチのオン・オフのボタンとして使う用に設定する。
defaultフォルダではなく、別にtestなどのフォルダを作ってkeymap.cを編集するほうが良いみたい。
編集したらもう一度書き込む。
cd ~/script/qmk_firmware make shiro:test make shiro:test:avrdude #Detecting USB port, reset your controller now.と出たら裏のリセットボタンを押す
Macroでできるみたい

コマンドでWebiopiを操作する
curlで操作する
sudo apt-get install php-curl
これでうまくいった。
#オフ curl -X POST http://192.168.31.53:8000/GPIO/6/value/1 #オン curl -X POST http://192.168.31.53:8000/GPIO/6/value/0
Terminal起動
[Ctrl]+[ALT]+[t]キーの同時押しで起動するからコレを組み込む。
[Shift]+[Ctrl]+[q]で終了、キーを離した時に終了する。
GPIOの状態を確認する
Raspi4にはうまくいかなかった。Raspi3にはある。
Pigpiodを有効にする Raspi4ではダメだった・・・
sudo raspi-config
5,Interfacing Options > Remote GPIOをオンにする。

Raspi4だと以下のように表示される・・・Raspi3はできたみたい。
Failed to get unit file state for pigpiod.service: No such file or directory
起動しても↓エラーになる。
$ sudo systemctl enable pigpiod Failed to enable unit: Unit file pigpiod.service does not exist.
Wiringpi インストール
どうやらgpioコマンドはWiringpiのものらしい。
sudo apt-get install wiringpi $ gpio readall 以下のようなエラーになる。 Oops - unable to determine board type... model: 17 以下を実行 wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb
以下のようにコマンド使えるようになった。
gpio -h gpio: Usage: gpio -v gpio -h gpio [-g|-1] ...
BCMがGPIO番号。Vがオン(0)・オフ(1)の状態。↓以下の表では5・6・19(ラズパイ時計)がオン(0)になっている状態。
$ gpio readall +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | | | 3.3v | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | ALT0 | 1 | 3 || 4 | | | 5v | | | | 3 | 9 | SCL.1 | ALT0 | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | IN | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | IN | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 1 | IN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 | | | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | ALT0 | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | ALT0 | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | ALT0 | 0 | 23 || 24 | 1 | OUT | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | OUT | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | OUT | 0 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | OUT | 0 | 31 || 32 | 1 | OUT | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | OUT | 1 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | OUT | 0 | 35 || 36 | 1 | OUT | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 1 | OUT | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 1 | OUT | GPIO.29 | 29 | 21 | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+
Pinoutというものもある。
$ pinout ,--------------------------------. | oooooooooooooooooooo J8 +==== | 1ooooooooooooooooooo P | USB | Wi ooo +==== | Fi Pi Model 3B+ V1.3 ooE | | ,----. +==== | |D| |SoC | | USB | |S| | | +==== | |I| `----' | | |C| +====== | |S| | Net | pwr |HDMI| |I||A| +====== `-| |--------| |----|V|-------' Revision : a020d3 SoC : BCM2837 RAM : 1024Mb Storage : MicroSD USB ports : 4 (excluding power) Ethernet ports : 1 Wi-fi : True Bluetooth : True Camera ports (CSI) : 1 Display ports (DSI): 1 J8: 3V3 (1) (2) 5V GPIO2 (3) (4) 5V GPIO3 (5) (6) GND GPIO4 (7) (8) GPIO14 GND (9) (10) GPIO15 GPIO17 (11) (12) GPIO18 GPIO27 (13) (14) GND GPIO22 (15) (16) GPIO23 3V3 (17) (18) GPIO24 GPIO10 (19) (20) GND GPIO9 (21) (22) GPIO25 GPIO11 (23) (24) GPIO8 GND (25) (26) GPIO7 GPIO0 (27) (28) GPIO1 GPIO5 (29) (30) GND GPIO6 (31) (32) GPIO12 GPIO13 (33) (34) GND GPIO19 (35) (36) GPIO16 GPIO26 (37) (38) GPIO20 GND (39) (40) GPIO21 For further information, please refer to https://pinout.xyz/
スゲェ、わかりやすく表示してくれる♪
Pinの状態取得・出力
これをキーボードに組み込もう。
$ gpio -g read 5 0 $ gpio -g write 5 1 $ gpio -g read 5 1 $ gpio -g write 5 0 $ gpio -g read 5 0
Terminal起動・Gpio状態取得・GPIO出力・Terminal閉じる
- Terminal起動:[Ctrl]+[ALT]+[t]キーの同時押し
- GPIOの状態取得:gpio -g read 5
- GPIO出力:gpio -g write 5 1・gpio -g write 5 0
- Terminal終了:[Shift]+[Ctrl]+[q]
キーに直接キーコンビネーションを入力する場合
[_NUMBER] = LAYOUT( NUMBER, CURSOL, MOUSE, KC_7, KC_8, KC_9, KC_4, KC_5, KC_6, KC_1, KC_2, KC_3, LALT(LCTL(KC_T)), KC_BSPC, KC_ENT ),
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {のキーの部分に直接入力する場合は、LALT(LCTL(KC_T))などで可能。
関数に書く場合はメンドウ
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
の関数に書く場合はLALT(LCTL(KC_T))だとエラーになる。
LALT(LCTL(KC_T))の場合は↓このようにやる。
register_code(KC_LALT); register_code(KC_LCTL); register_code(KC_T);
QMKは複雑なワンキーでキー操作はできないようなので、ラズパイ側でキーボードショートカットキーを設定する。
キーボードショートカットを使ってやる
bashスクリプト
以下のようにgpoi.shでオンの時はオフ、オフの時はオンのコマンドを実行する。
#!/bin/bash #PIN=5 /bin/bash /home/pi/script/gpio.sh このように入力・PINに番号指定 #コレ↑だと最初に引数が来てるのでコマンド送信できない # bash gpio.sh 12のようにする。$1=12 echo "PIN: $1" GIP=`/usr/bin/gpio -g read $1` echo "GIP: $GIP" if [ -n "$1" ]; then if [ $GIP -gt 0 ]; then GIO=0 else GIO=1 fi echo "GIO: $GIO" if [ -n "$GIO" ]; then gpon=`/usr/bin/gpio -g write $1 $GIO` echo "gpio -g write $1 $GIO" echo $gpon fi fi
キーバインディング カスタマイズ lxde-pi-rc.xml
$ sudo vim /etc/xdg/openbox/lxde-pi-rc.xml
chainQuitKeyの下に追加した。
<keybind key="C-A-2"> <action name="Execute"> <command>/bin/bash /home/pi/script/gpio.sh 12</command> </action> </keybind> <keybind key="C-A-7"> <action name="Execute"> <command>/bin/bash /home/pi/script/gpio.sh 16</command> </action> </keybind> <keybind key="C-A-0"> <action name="Execute"> <command>/bin/bash /home/pi/script/gpio.sh 20</command> </action> </keybind> <keybind key="C-A-1"> <action name="Execute"> <command>/bin/bash /home/pi/script/gpio.sh 21</command> </action> </keybind> <keybind key="C-A-5"> <action name="Execute"> <command>/bin/bash /home/pi/script/gpio.sh 5</command> </action> </keybind> <keybind key="C-A-6"> <action name="Execute"> <command>/bin/bash /home/pi/script/gpio.sh 6</command> </action> </keybind> <keybind key="C-A-3"> <action name="Execute"> <command>/bin/bash /home/pi/script/gpio.sh 13</command> </action> </keybind> <keybind key="C-A-9"> <action name="Execute"> <command>/bin/bash /home/pi/script/gpio.sh 19</command> </action> </keybind>
keymap.c
enum custom_keycodes { COMNUM = SAFE_RANGE, COMPASS, NUM2, NUM7, NUM0, NUM1, NUM5, NUM6, NUM3, NUM9, TEMDEL }; enum layer_number { _NUMBER = 0, _CURSOL, _MOUSE }; #define NUMBER TO(_NUMBER) #define CURSOL TO(_CURSOL) #define MOUSE TO(_MOUSE) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #_MOUSEを先頭に持ってきて、デフォルトのキーにする。 [_MOUSE] = LAYOUT( NUMBER, CURSOL, MOUSE, COMNUM, COMPASS, KC_PSTE, NUM2, NUM7, NUM0, NUM1, NUM5, NUM6, NUM3, NUM9, TEMDEL ), [_NUMBER] = LAYOUT( NUMBER, CURSOL, MOUSE, KC_7, KC_8, KC_9, KC_4, KC_5, KC_6, KC_1, KC_2, KC_3, KC_0, KC_BSPC, KC_ENT ), [_CURSOL] = LAYOUT( NUMBER, CURSOL, MOUSE, KC_HOME, KC_UP, KC_PGUP, KC_LEFT, KC_ESC, KC_RIGHT, KC_END, KC_DOWN, KC_PGDN, KC_DEL, KC_BSPC, KC_ENT ), }; bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch(keycode){ case COMNUM: if(record->event.pressed){ SEND_STRING("364364"); } break; case COMPASS: if(record->event.pressed){ //pressed SEND_STRING("daishikyuimasugu"); } break; case NUM2: if(record->event.pressed){ register_code(KC_LALT); register_code(KC_LCTL); register_code(KC_2); unregister_code(KC_LALT); unregister_code(KC_LCTL); unregister_code(KC_2); } break; case NUM7: if(record->event.pressed){ register_code(KC_LALT); register_code(KC_LCTL); register_code(KC_7); unregister_code(KC_LALT); unregister_code(KC_LCTL); unregister_code(KC_7); } break; case NUM0: if(record->event.pressed){ register_code(KC_LALT); register_code(KC_LCTL); register_code(KC_0); unregister_code(KC_LALT); unregister_code(KC_LCTL); unregister_code(KC_0); } break; case NUM1: if(record->event.pressed){ register_code(KC_LALT); register_code(KC_LCTL); register_code(KC_1); unregister_code(KC_LALT); unregister_code(KC_LCTL); unregister_code(KC_1); } break; case NUM5: if(record->event.pressed){ register_code(KC_LALT); register_code(KC_LCTL); register_code(KC_5); unregister_code(KC_LALT); unregister_code(KC_LCTL); unregister_code(KC_5); } break; case NUM6: if(record->event.pressed){ register_code(KC_LALT); register_code(KC_LCTL); register_code(KC_6); unregister_code(KC_LALT); unregister_code(KC_LCTL); unregister_code(KC_6); } break; case NUM3: if(record->event.pressed){ register_code(KC_LALT); register_code(KC_LCTL); register_code(KC_3); unregister_code(KC_LALT); unregister_code(KC_LCTL); unregister_code(KC_3); } break; case NUM9: if(record->event.pressed){ register_code(KC_LALT); register_code(KC_LCTL); register_code(KC_9); unregister_code(KC_LALT); unregister_code(KC_LCTL); unregister_code(KC_9); } break; case TEMDEL: if(record->event.pressed){ register_code(KC_LSFT); register_code(KC_LCTL); register_code(KC_Q); unregister_code(KC_LSFT); unregister_code(KC_LCTL); unregister_code(KC_Q); } break; } return true; }
これでうまくいった。
ただ・・・ログインしている状態じゃないと??キーが適用できない(泣)
ついでにRaspi3のスライダーをRaspi4で操作しようとしたけど未解決。
Windows10でやる
Hexダウンロード
説明ページ↓
コレ↓ダウンロード
Windows インストール
ここからqmk_toolbox_install.exeをダウンロードしてインストールする。
インストール後ドライバーもインストールされた。

Hexファイルをダウンロードして、Auto-Flashをチェック、素SHIROをPCと接続して裏面のリセットボタンを押すと書き込み始まる。

ここで書き込んだキーボード配列はラズパイでは使えなかった。と思ったけどそんなことはなかった・・・
JONファイルを出力できるWebアプリ QMK Configurator
キーを視覚的にセットできるQMK ConfiguratorというWebアプリがあります。

こちらはJSONファイルを出力できますが、JSONファイルなのでこのままでは使えず?keymap.cファイルダウンロードできないみたい。
HexファイルはFirmwareからダウンロード可能でした。
FULL SOURCEはqmk_firmwareの中身をすべてダウンロードしちゃう。keymap.cはデフォルトでカスタマイズしたファイルはダウンロードできなかった。
コメント