Rpi Keybow Kit でキーボードを追加
世間では、静かな自宅キーボードブームらしい。
ということで、お手軽に3キーのキーボードを追加してみる。
Pimoroni で Keybow Kit (3-key) を購入
イギリスのサイト、Pimoroni で3キーのキーボードを購入。日本円で2500円くらい。
別途、RPi Zero が必要。
RPi setup
組立
半田付けは不要。ネジ回しがあれば、組立可能。
できあがり。
大事なのは、PCからUSBキーボードとして認識してもらうために、USBケーブルをUSBの場所に指すこと。
SD カードにRPi の OSイメージを書き込む
Keybow Kit を USBキーボードとして利用する場合、
Boot用のMS-DOS Format boot partition しか使わないので、LinuxOSは、なんでもいい。
Keybow OS setup
Keybow OS をSDカードに書き込んで、設定を好みにいじる。
Keybow OS のdownload
https://github.com/pimoroni/keybow-firmware/releases
2020/08/31 時点で、 Version 0.0.4
が最新。
zip ファイルをdownload する。
SDカードに、 Keybow OS を書き込む
MacOSで、RPi用のSDカードをmountすると、 /Volume/boot
として見えるファイルシステムの内容を書き換える。
rm /Volume/boot/*
cd /Volume/boot
unzip "ダウンロードしたKeybow OS zipファイル"
layout ファイルを設定する
Keybow OS の設定ファイル /Volume/boot/keys.lua
を書き換える。
初期は、 layouts/default
をオリジナルファイル layouts/kurosuke.lua
を利用するように変更する。
require "keybow"
-- require "layouts/default" -- Numberpad
require "layouts/kurosuke"
-- Custom layouts (uncomment to enable) --
-- require "layouts/boilerplate" -- Handy bits of boilerplate text like Lorem Ipsum
-- require "layouts/lightroom" -- Handy hotkeys for Adobe Lightroom Classic CC
-- require "layouts/pico8" -- Controls for Pico-8
-- require "layouts/mediakeys" -- Basic media controls (play/pause, volume etc)
-- require "layouts/midi_keys" -- Experimental MIDI layout
-- require "layouts/blink" -- Numberpad with light feedback
-- require "layouts/mini" -- Keybow MINI example layout
-- require "layouts/mini_volume" -- Keybow MINI volume controls
-- require "layouts/mini_playback" -- Keybow MINI media playback controls
カスタマイズ
layouts/kurosuke.lua
を作成する。
以下は、左右のキーでVolume UP/DOWN、真ん中キーでパスワード入力する例。
キーを押すと、明るく光るようにする。
require "keybow"
function modifier(key, ...)
for i = 1, select('#', ...) do
local j = select(i, ...)
keybow.set_modifier(j, keybow.KEY_DOWN)
end
keybow.tap_key(key)
for i = 1, select('#', ...) do
local j = select(i, ...)
keybow.set_modifier(j, keybow.KEY_UP)
end
end
function setup()
keybow.use_mini()
keybow.auto_lights(false)
keybow.clear_lights()
keybow.set_pixel(0, 0, 0, 10)
keybow.set_pixel(1, 0, 10, 0)
keybow.set_pixel(2, 10, 0, 0)
end
function handle_minikey_00(pressed) -- Add to quick collection
if pressed then
keybow.set_pixel(0, 0, 0, 255)
else
keybow.set_pixel(0, 0, 0, 10)
end
keybow.set_media_key(keybow.MEDIA_VOL_DOWN, pressed)
end
function handle_minikey_01(pressed) -- Add to quick collection
if pressed then
keybow.set_pixel(1, 0, 205, 0)
keybow.text("パスワード\n")
else
keybow.set_pixel(1, 0, 10, 0)
end
end
function handle_minikey_02(pressed) -- Add to quick collection
if pressed then
keybow.set_pixel(2, 205, 0, 0)
else
keybow.set_pixel(2, 10, 0, 0)
end
keybow.set_media_key(keybow.MEDIA_VOL_UP, pressed)
end