前回マウスであったので、今回はキーボードです。ラズパイのUSBコネクタにUSBキーボードを取り付けたときに使える Rpi-keyboard ノードです。ノードの設定は不要、使い方は簡単ですが、キースキャンコードの解釈は簡単なような、でも何処をみたらいいんだろうか、トホホな感じがいたします。
※「ブロックを積みながら」投稿順 index はこちら
Rpi-keyboardノード
Rpi-keyboardノードはその名のとおり、Raspberry Pi上でNode-REDサーバーを動かしているときに、Raspberry PiのUSBコネクタにUSBキーボードを接続したときのみ使えるノードです。ぶっちゃけ、キーボードのキーを押した、押し続けた、離したが分かるだけのもの。
今回実験に使用したフローは簡単デス。
Rpi-keyboardノードから送出される msg (全体)をデバッグウインドウに表示するだけのもの。
ノードにはお名前の設定以外の項目はありません。こんな感じ。
Rpi-keyboardノードが送出するメッセージ
ラズパイのUSBポートに、テンキー付の「109キー配列」日本語キーボード(WINキーのあるWindows用のやつ)を接続して以下の実験を行いました。
msgには以下のプロパティが載っています。
-
- payload、キーコード?が載っている
- action、押されたときはdown、押し続けたときはrepeat、離したときはupが載っている
- topic、pi/key が載っている
上記だけみると簡単そうにも見えます。
まず「A」キーを押して離したときの様子。
同一のpayload(キーコード)で、downがきて、upとなります。キーコードから察するに、ここで送られてきている「キーコード」30(10進、16進なら1E)は、
Scan Code1 の make コード
であるようです。up/downがあるのでbreakコードとかは使わないのね。分かり易いっちゃ分かり易いか。
次に「B」キーを押して離したときのようす。
予想どおりですな。
次に「下矢印キー」を押し続けてみましたぞ。出だしが以下に。downがきて、repeatが続くと。
押している間、repeatが続き、離したところで下のupが来ます。
down, repeat…, up というシーケンスは予想どおりだけれどもキーコードの105(16進69)って何?
あちこちのキーを触ってみた観察結果が以下に
-
- 全てのキー(CTRL、SHIFT、ALT、変換、無変換など含む)は各キー単独のキーコード(1バイトに収まる。もしかすると7ビット)を持つ
- キーの同時押しの場合も、各キー単独のコードが送られる。
複数バイトの組み合わせのコードが送られてくることはなく、各キーに固定の1バイト(以下)コードが送られてくるようです。「A」、「B」みたいな普通のキーはScan Code1のmakeと同じコードみたいですが、特殊なやつらも皆独立のキーコードをもっています。たとえばWINキーは125(0x7D)でした。
キー毎のキーコードを調べておけば解読は簡単そう(「普通の」キースキャンコードを解読するドライバの場合とてもメンドイ処理になると思います。知らんけど)です。でも、どこかにキーコードの一覧ないのかしら。