まだWindowsが98とか98 Second Editionの頃、教育機関や研究機関などではワークステーションが主流で1台のサーバに複数のX端末を接続して利用していました。OSはSystem VとかBSD系列のUNIXが使われていて、キーボードはメーカによって色々なものがあったと思います。
そんな時代に使い勝手の良さを追求したキーボードが株式会社PFUより発売されていました。Happy Hacking Keyboardと呼ばれたこのキーボードは最低限のキーのみを配置していて、非常にコンパクトな筐体なのにキーピッチも狭くなく、とても使い勝手のいいものでした。UNIXではコマンドラインでの作業が多く、キーボードの隅から隅まで指が届くHappy Hacking Keyboardは常にキーボードの上に手を置いたままにしておけるのでUNIXでの利用に最適だったのです。
当時このキーボードを実際に利用してみたところ、使いやすくとても気に入ったので後に購入してしまいました。購入したのはHappy Hacking Keyboard Liteというモデルです。
UNIXでは絶大な威力を発揮していたこのキーボードですが、やがてWindowsが主流になってくると特殊キーが増えてきて、このキーボードでは対応できないキーが多くなってきました。もともと英語キーボードがベースになっているので、日本語環境で利用するときは(本体ディップスイッチの切り替えで多少はキー割り当ての変更は出来ますけど…)複数キーの組み合わせで対応というややこしいことになってしまいます。そんな訳で使い勝手が悪くなってきて、今のOADG109などという時代ではもう利用することはなくなってしまいました。
ところが以前Arduinoを使ってMacのテンキーをPCで利用することが出来たときから、Happy Hacking Keyboardも復活させたいと思うようになりました。いまのフルキーのキーボードは場所をとるし、小型のものはキーピッチが狭く使いにくいのでHappy Hacking Keyboardのキーを自由にカスタマイズできたら最適なキーボードになりそうです。
うまい具合に手持ちのHappy Hacking Keyboard Liteは古い物なので、インターフェイスがPS/2によるシリアル通信になっていてArduinoとの接続は簡単です。今発売されているHappy Hacking KeyboardはUSBかBluetoothなのでArduino単体での接続は出来ないのです。
もうArduinoの利用にもだいぶ慣れてきましたので、さっそく作業に取り掛かってみましょう。
使用するArduinoはPro Micro互換機のブートローダーを書き換えてLeonardoにしたものです。
LeonardoがUSBキーボードになるのは周知の事実ですが、PS/2キーボードをArduinoに接続するのも多くの事例がネットで公開されていますので簡単です。この2つの機能を組み合わせればHappy Hacking KeyboardをUSBキーボードにするのもそれほど難しくはないはずです。
面倒なのはPS/2のメスコネクターの入手でしょうか。これについては、たまたまPS/2キーボードとマウスを一つのケーブルにしてノートPCの一つしかないPS/2コネクタにつなぐための分岐(統合?)ケーブルをジャンク部品として所有していたので、メスコネクター部分を切り取って利用することにしました。
PS/2のArduinoへの接続はArduinoのライブラリマネージャからPS2Keyboardというライブラリが見つかるので、これを利用することにしました。
PS/2の信号線は4本しかないので配線は簡単でした。PS2Keyboardライブラリでは外部割り込みを利用しているのですが、Leonardoで割り込みに使えるのは0、1、2、3、7のピンなので今回は1を使いました。Pro Microでは一番端のTXピンになります。
PS/2キーボード → Arduino
1 DATA 8ピン
2 未使用
3 GND GND
4 5V VCC
5 CLOCK 1ピン
6 未使用
ところで開発環境のUbuntu日本語でいきなりHappy Hacking Keyboardのような英語キーボードを使って動作確認をすると、記号キーの違いなどでややこしくなるので、まずは手持ちの日本語PS/2キーボードをつないで開発することにしました。
(日本語PS/2の低価格フルキーボード。Happy Hacking Keyboard Liteと比べるとかなり大きいものです。)
キーボードの接続が済みPS2KeyboardとUSB Keyboardそれぞれのライブラリの動作を確認してみたのですが、PS2KeyboardライブラリはPS/2のスキャンコードをアスキーコードに変換し、USB KeyboardライブラリはアスキーコードをUSBのキーコードに変換していました。これをそのまま組み合わせるとアスキーコード変換部分が助長で、CPUリソースとメモリの無駄遣いになってしまいます。
そこでPS2Keyboardライブラリからスキャンコード読み取り部分を、USB Keyboardライブラリはこちらのサイトを参考にUSBキーコード送信部分を取り出し、変換テーブルを使って直接コード変換を行うことにしました。
完成したスケッチはこちらです。
OADG109PS2.ino
Keyboard.h
Keyboard.cpp
Keyboard.hとKeyboard.cppはOADG109PS2.inoと同じフォルダーに入れてください。
これで、とりあえずPS/2キーボードをUSBキーボードに変換することが出来ました。ただしこのスケッチではNum Lockなどの修飾キーを押したときに、キーボードのLEDを点灯させる機能は実装していません。(そもそもHappy Hacking Keyboard LiteにはLEDがないので今のところ実装予定はありません。)
開発環境のUbuntuでは、キー入力の遅延もなく正しく動作するようです。そこでWindows10でテストをしてみたのですが、何故かキー入力が出来ません。Leonardoのシリアルドライバをインストールしても結果は同じです。Windows8と7でも試したのですが一緒でした。
WindowsXPはLeonardoのドライバ未インストールのとき、Leonardoドライバを自動的に検索している間のキー入力は受け付けてくれませんでしたが、検索失敗後にキーが入力出来るようになりました。
スケッチを何度も見直して見ましたが、原因はよく分かりません。もしかするとブートローダーに問題があるのかと思い、Pro Microのブートローダーに書き戻したり、スケッチをブートローダーに上書きしてローダーなしの状態で試してみても同じでした。
Pro MicroではなくLeonardo互換機にこのスケッチを書き込んで試しても、やっぱりキー入力できません。
ネットでググってもこれといった解決策は見つからなかったので、念の為Windows環境のArduino IDEをつかってスケッチを書き込んでみると…
キー入力できた!!
なぜ?何が違う?と疑問に思いながら、確認のためArduinoのUSBを抜き差してみると…
キー入力できない!!
どうやらWindows環境ではArduino接続後にリセットするとキー入力できるようになるようです。これはLeonardoのシリアルドライバがインストールしてあってもなくても一緒でした。
多分USBキーボードライブラリ周りが怪しいので、いずれ別のライブラリで試してみたいと思いますが、とりあえずメインで使用しているLinux環境では普通に利用できているのでこの問題の解決は先送りです。
それでは早速Happy Hacking Keyboardのカスタマイズに取り掛かろうと思ったのですが、仕様決めに少し時間がかかりそうなのでまた次回に投稿します。
最新の画像[もっと見る]
- ラスベリーパイのベアメタル環境でLVGLを使う 5日前
- ラスベリーパイのベアメタル環境でLVGLを使う 5日前
- ラスベリーパイのベアメタル環境でLVGLを使う 5日前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
※コメント投稿者のブログIDはブログ作成者のみに通知されます