作ろうと思った背景
子供の教材開発の一環で,microbit の次のステップとして Arduino を想定していて,
その使い方を学んでいるときに,HID機能というものを知りました.
これは何かというと,ヒューマン・インターフェース・デバイスの略称で,
USB接続であたかもキーボード,マウスのように振舞う(なりすます)ことが
できる機能のことです.
このいわゆる「なりすまし」が使えると,
「ある1つのボタンを押したら,xxxというキー入力をする」とかが
出来るようになります.
本当にそんなことが出来るのだろうか,難しくないのだろうか,と思ったので,
試してみた結果が本記事の内容です.
準備するもの
- Arduino micro pro ※今回は,Amazon で3個で1980円の互換品を使用
- microUSBケーブル
- ブレッドボード
- タクトスイッチ
- ジャンパワイヤー
配線
Amazon で購入した Arduino micro pro 互換品は,ピンヘッダが半田付けされていないので,
最初にそれをはんだ付けする必要があります.
はんだ付けするにあたっては,ブレッドボードにピンヘッダを差し込み,
その上に,Arduino micro pro を乗せて,はんだ付けすると足が斜めにならずに済みます.
次にブレッドボードに,Arduino, タクトスイッチを配置して,
ジャンパワイヤーで繋げていきます.
- Arduino GND → スイッチ赤 → スイッチ青
- Arduino 5番 → スイッチ青
- Arduino 6番 → スイッチ赤
プログラミング
- Arduino へプログラムを書き込むための IDE をここからインストールします.
- Arduino を起動し,Tools → Board: “Arduino Uno” → “Arduino Leonardo” を選択します.
- 補足すると,Uno は先述のHID(なりすまし)機能を持っておらず,
ゆえにそのライブラリもありません. - Leonardo は HID機能を持ち,そのライブラリを持っています.
- 今回はそのライブラリのうち,Keyboard.h というものを使っていきます.
- なので,Board として Leonardo を選択する必要があります.
- 次に,Arduino を microUSBコードで繋げて,PCに繋ぎます.
- 書き込み先(ポート)の指定をしてあげます.
- Tools → Port → COM3(Arduino Leonardo).
- もしかしたら,PCによってはCOM3 と認識されないかもしれないです.
- それっぽいもの(笑) を選びましょう.
- 下記コードを貼り付け,適宜好みに合うように編集します.
#include <Keyboard.h> // キーボードライブラリの読み込み
#define Button5 5 // 5番ピンを Button5 と呼ぶことにするよ
#define Button6 6
void setup() {
Keyboard.begin(); // キーボード機能を使うおまじない
pinMode(Button5, INPUT_PULLUP); // Button5 をプルアップしておく.スイッチ青を押すとGND に繋がる
pinMode(Button6, INPUT_PULLUP);
}
void loop() {
// Button5 が押された時の動作設定
if(digitalRead(Button5) == LOW){ // Button5 がGND になったら,つまり,スイッチ青が押されたら
Keyboard.print("hogehoge"); // hogehoge と入力される.
Keyboard.write(9); // TABが入力される.参考先:http://www.asciitable.com/
Keyboard.print("fugafuga");
Keyboard.press(KEY_RETURN);
delay(100); //wait PC busy // PC側が入力を受け付けるまで100ms待つ
Keyboard.releaseAll(); // キーを離す
while(digitalRead(Button5) == LOW); // Button5 が連続で入力されてるとき,無視する
}
// Button6 が押された時の動作設定
if(digitalRead(Button6) == LOW){
Keyboard.print("fugafuga");
Keyboard.press(KEY_RETURN);
delay(100); //wait PC busy
Keyboard.releaseAll();
while(digitalRead(Button6) == LOW);
}
delay(100);
}
- File → Save as … より,ファイルを保存します.
- プログラムを Arduino に書き込みます.
- あとはメモ帳を開いて,タクトスイッチを押してみましょう.
むすび
やってみて,一番初めに思ったのは,「超簡単にできる!」です.
キーボード自作というと,正直ベーシック的な処理をいっぱい書かなきゃいけないのかな,と
勝手にイメージしていたのですが,今回書いたのは全部で35行程度でした.
で,これを作ってから,自作キーボードのその道には,もっと簡単に自作キーボードを作ることができる,QMKというファームウェアが存在することを知った(知ってしまった)ので,次はQMKについても記事を書こうかな,と思ってます.
ご参考:fabcross さんでも特集していたようです.
https://fabcross.jp/category/make/20200427_Zoom.html