第3回 Keyboardライブラリ

キーボードライブラリを使用して実際にキーボードのプログラムを作成します。

目次

説明内容

前回の記事では「ライブラリ」について説明しました。

今回は、さっそくキーボードの「ライブラリ」を利用して、Arduino MicroをUSBキーボードとして動作させてみます。

ところで今回作成するプログラムでは、当然ながら新しい文法が出てきます。

通常ですと、新しい文法を詳しく説明しながら、プログラムを作成して動作を確認していますが、今回出てくる新しい文法はかなり大きい概念ですので、説明がとても長くなってしまいます。

そこで今回の記事では、ライブラリの使い方を簡単に説明して、Arduino Microをキーボードとして動作させてみることを優先します。

今回の記事では、まずはキーボードライブラリの使い方を通して、どのように利用するのか雰囲気をつかんでいただけるだけで充分です。

新しい概念とその文法の詳細は次回の記事で説明します。

今回製作するキーボード

最初から複雑なことをすると本質的なところがわかりづらくなってしまいますので、今回は1つの機能しかないキーボードを製作します。今回製作するキーボードは

「PCに接続すると5秒後に文字『A』をPCに送るキーボード」

という動作をします。

シンプルキーボード

「A」という文字を1回しか入力できないキーボードです。PCに接続すると、5秒後に強制的に「A」という文字が入力されてしまいます。

人が何かのキーを押し、その押したキーに応じた文字データをPCに送るなどという高機能・高性能キーボードではありません。

ただ、このキーボードを持ち歩けば、「A」を入力したいとき、接続するだけで自動入力できる便利なキーボードです。

Keyboardライブラリのインクルード

それではさっそくこのような動作をするキーボードのプログラムを作成しましょう。

最初に新規ファイルを作成します。Arduino IDEのメニューから「ファイル」→「新規ファイル」を選択すると新規ファイルが作成されます。

一度、この状態で保存します。「ファイル」→「保存」を選択すると、保存ダイアログが表示されます。ファイル名は「keyboard_test」という名前にしましたが、他のファイル名でも構いません。

新規ファイル

新規ファイル作成時にデフォルトで書かれているコメントは必要ありませんので削除しておきましょう。また、ご自身がわかるようにこのプログラムのコメントを書いておきます。

コメント変更

このプログラムではキーボードライブラリを使用します。キーボードライブラリを利用するには、プログラムの先頭でヘッダファイルをインクルードします。キーボードライブラリのヘッダファイル名は

Keyboard.h

です。最初の「K」は大文字ですので注意してください。それでは、プログラムの先頭でこのファイルをインクルードしましょう。ヘッダファイルのインクルードは、プリプロセッサ指示子で「#include」でしたよね。

ライブラリインクルード

#include <Keyboard.h>と正しく入力できていないと、「Keyobard」の部分がオレンジ色になりません。オレンジ色になっているか確認しましょう。

これでキーボードライブラリを利用できるようになりました。

キーボードとして認識する命令

次に、PCに接続したときにArduino Microをキーボードとして認識するように命令を書きます。この命令は以下のように書きます。

Keyboard.begin();

「Keyboard」の最初の「K」は大文字です。「Keybaord」の後に「.」(ピリオド)を書いて、その後に「begin()」を書きます。これはArduino Microに対する命令ですので、最後に「;」(セミコロン)を忘れないでください。

ところで、この命令はsetup関数とloop関数のどちらに書けばよいかわかりますか?

前回の記事で、USBキーボードをPCに接続したときに、どのようなデータがやり取りされるか説明しました。接続直後、キーボード認識するためにいろいろなデータのやりとりがされていることがわかりました。データをやり取りして接続が確立すると、あとはPCはキーボードから文字データの受け取りを開始します。

ということは、キーボードとして認識する命令「Keyboard.begin();」は接続時に1度だけ実行すればOKですよね。1度だけ実行する命令はsetup関数に書きますので、プログラムは以下のようになります。

Keyboard.begin()

この「Keyboard.begin();」という命令の書き方は不思議ですよね。基礎編パート1で習得した知識で一番近いものは構造体でしょうか。構造体は、構造体を表す名前の後に「.」をつけて、構造体のメンバ変数を指定するんでしたよね。例えば「oto.onkai」という書き方でした。

でもこの命令の場合、メンバ変数ではなく「begin()」というように関数になっています。構造体は変数を組みにする仕組みでしたので、構造体とも違います。

実は「Keyboard.begin()」という書き方は、今までとは全く違う考え方の命令なんです。かなり大きな概念ですので、次回の記事で詳しく説明します。

このあと、このプログラムをArduino Microに送ると、PCに接続すればArduino Microがキーボードとして認識されます。ただし、他に何も命令を書いていないので、何もしないキーボードになりますが…

キーボードとして認識されるか確認する

さて、接続しても何もしない、何もできないキーボードのプログラムを作ったわけですが、一度ここで動作させてみましょう。

動作させても、キーボードとしての機能は何も持っていないから、何も起こらないような気がします。実は、macOSもWindowsも、初めて接続されたキーボードは初回接続時にキーボード認識の処理がされます。

実際に動作確認する前に、各OSでどのような処理になるか、あらかじめ確認しておきます。この後、先程のプログラムをArduino Microに書き込みますが、書き込み直後に各OSで以下のような処理がされます。動作させてみてびっくりしないように、どのようなことが起こるのか先に確認しておきましょう。

macOSの場合

macOSは今まで接続したことがないキーボードが接続されると、キーボードの種類を判定する処理がされます。

初めてキーボードを接続すると、以下のダイアログが表示されます。

macOSキーボード認識1

「キーボードを識別するために「続ける…」ボタンをクリック」と指示されるので、このダイアログが表示されたら「続ける…」をクリックしてください。クリックすると以下のダイアログが表示されます。

macOSキーボード認識2

詰んでしまいました…

なんと「左のShiftキーの隣のキーを押してくれ」なんて言ってます。今回確認するプログラムは何もしないキーボードですので、「左のShiftキー」どころか、キーなんてありません!

ということで、macOSをご利用の方は、このダイアログが出てきたら左上の赤ボタンをクリックしてこのダイアログを閉じて見なかったことにしてください。macOS側では、キーボードの種類判定はできない状況ですが、キーボードとしては認識されています。

Windowsの場合

Windowsでは、今まで接続したことがないキーボードが接続されると、OSがキーポードを自動判定します。

初めてのキーボードを接続すると、右下の領域に以下のようなメッセージが表示されます。

Windowsキーボード認識

特に何かする必要はありませんが、このメッセージが出てきた、ということはArduino Microをキーボードとして認識したことになります。

それでは、先程のプログラムをArduino Microに書き込んでください。上に説明した処理がされていればキーボードとして認識されています。

文字データをPCに送る命令

それでは次に、キーボードライブラリに用意されている、文字データをPCに送る命令を確認します。

文字データをPCに送るには、以下の命令を使用します。

Keyboard.print(文字データ);

基礎編パート1でも説明しましたが、文字データは「 ” 」で囲みます。今回作成するプログラムは、PCに「A」を送りますので、「A」という文字データをPCに送るには以下のように書けばOKです。

Keyboard.print("A");

キーボードライブラリを利用すると、簡単にキーボードが作れますよね。

それでは、最後に「PCに接続すると5秒後に「A」1文字を自動的に入力するキーボード」のプログラムを作成します。

PCに接続すると5秒後に「A」1文字を自動的に入力するキーボードプログラム

PCに文字データ「A」を送る命令はわかりましたので、あとは「接続すると5秒後に「A」1文字をPCに送るようにプログラムを書けばOKです。

PCにキーボード接続してから5秒待ってから、先程の命令を使用して「A」という文字をPCに送ればいいので、Keyboard.begin();でキーボードとして認識された後に、以下の命令を書けばOKですよね。

delay(5000);

Keyboard.print("A");

それでは、プログラムを完成させましょう。

最初のキーボード認識プログラム

 

動作確認

これからプログラムを書き込みますが、書き込み直後、すぐにプログラム動作が始まります。5秒後に「A」という文字が、現在のカーソル位置に入力されますのでカーソルの位置に注意してください。

それでは、Arduino MicroをPCに接続して、Arduino IDEから先程のプログラムを書き込んでください。

書き込みが完了すると、以下のようにカーソルの位置に「A」という文字が入力されれば成功です! なお、入力モードを日本語にしている場合は、「A」ではなく「あ」と表示されたかもしれません。「A」「あ」「ち」のいずれか表示されていればOKです。

動作確認

ところで、OSがUSBキーボードと認識しているか確認してみましょう。

macOSの場合

最初に左上のAppleメニューをクリックして「このMacについて」を選択します。

macOSデバイス確認(1)

次に「システムレポート…」ボタンをクリックします。

macOSデバイス確認(2)

システムレポートのダイアログが表示されますので、左側のリストから「USB」を選択して、以下のようにUSBデバイスのリストに「Arduino Micoro」と表示されていればOKです。

macOSデバイス確認(3)

 

Windowsの場合

最初に左下のスタートメニューから「Windowsシステムツール」の中にある「コントロールパネル」を選択します。

Windowsデバイス確認(1)

コントロールパネルから「デバイスとプリンターの表示」をクリックします。

Windowsデバイス確認(2)

WindowsOSで認識されているデバイスがリストされます。その中に「Arduino Micro」というキーボードがあればOKです。何だか絵がずいぶん違いますが…

Windowsデバイス確認(3)

さて…

さて、Arduino Microをキーボードにすることができたわけですが、何だか気持ち悪いですよね。

Keyboard.begin();
Keyboard.print();

この2つの変数でもない、構造体でもない、関数でもないなんともよくわからない文法です。

この文法については次回の記事で詳しく説明します。

更新履歴

日付 内容
2021.7.22 新規投稿
2021.7.25 キーボードデバイス認識状態確認手順を追加
2022.2.20 認識手順の説明補足
通知の設定
通知タイミング
guest
7 コメント
新しい準
古い順 一番投票が多い
本文中にフィードバック
全てのコメントを見る
柿のたね
柿のたね
1 年 前

ウルトラ初心者ですが毎日少しずつ進めさせて頂いております

何日か色々試し悩んでも解決しないので質問させてください

今回の記事を進めていた所エラーが発生し
ました

Keyboardが存在しません

と出て先にすすめません
原因がわかれば教えて頂けますでしょうか

何10回と確認しましたがタイプミスはありませんでした

再起動を行なってもダメでした

インクルードまでは読み込みますが
セットアップでエラーが出ます

【開発環境】
Mac OS10.12.3
MacBook Air

ボード
MEGA 2560 R3

お暇なときにでもよろしくお願いします

柿のたね
柿のたね
返信  管理者
1 年 前

素早いご連絡ありがとうございます
試して改めてご連絡いたします

柿のたね
柿のたね
返信  管理者
1 年 前

色々試してみましたのでご報告致します

macノートを3台所有しており
全てのmacで同じエラーになり結果ダメでした

【使用PC】
mac book air OS10.12
mac book air M1チップ
mac book air M2チップ

【ソースコード】

#include <Keyboard.h>

void setup() {
Keyboard.begin();

}

void loop() {

}

【コンパイルエラーメッセージ》

/Users/appletealabel/Documents/Arduino/sketch_may04a/sketch_may04a.ino: In function ‘void setup()’:
sketch_may04a:4:1: error: 「Keyboard」が存在しません。スケッチに「#include <Keyboard.h>」という行を含めていますか?
 Keyboard.begin();
 ^~~~~~~~
「Keyboard.h」に対して複数のライブラリが見つかりました
使用済:/Users/xxxxxxxxx/Documents/Arduino/libraries/Keyboard
未使用:/Applications/Arduino.app/Contents/Java/libraries/Keyboard
未使用:/Users/xxxxxxxxx/Documents/Arduino/libraries/Keyboard-1.0.4
exit status 1
「Keyboard」が存在しません。スケッチに「#include <Keyboard.h>」という行を含めていますか?

※「xxxxxxxx」のパス部分はユーザーネームです

ネットの書き込みで他の人も同じ現象が起こっている方がいたので
色々試してみたところ

ツール → ボード → Arduino Microに変更すると
コンパイル完了しました

ただし当然ながら使用ボードがMEGA2560なので書き込みでエラーが出ます

管理者様のボード設定はどうなっておりますでしょうか

コンパイルエラーが出るボード
・Uno
・Nano
・Mega2560

コンパイル完了 可能なボード
・Micro
・Leonardo

※その他ボードは未チェックです

大人しく「micro」か「Leonardo」のボードを買おうかと思います

柿のたね
柿のたね
返信  管理者
1 年 前

ご連絡頂きありがとうございます

Microで試したところ問題なく動作きました

引き続き学習させていただきます

目次