Arduino MicroをUSBキーボードにするにはどのようなプログラムを作成すればよいのでしょうか。キーボード製作に向けて新しい知識を習得します。
USBキーボードの動き
キーボードのプログラムを作成する前に、一般的なUSBキーボードの内部動作がどのようになっているのか確認します。
以下のようなUSBキーボードのUSBコネクタをPCに接続すると、すぐに文字が入力できるようになりますよね。
そんなの当たり前!って感じですが、実は接続した瞬間から文字入力できるようになるまで、内部では接続した瞬間からいろいろなデータがやり取りされているのをご存知でしょうか。
データのやり取りって何?って感じですよね。USBキーボードをPCに繋ぐだけで、あとはキーが押されたら文字入力するだけです。データのやり取りなんて必要なさそうです。
これには以下の背景があります。
USB機器ってキーボード以外にも、マウス、SSD、カメラなどいろいろな種類がありますよね。例えばキーボードが接続された場合は、文字入力を受け付けるようにする必要があります。またSSDなどの外部記憶装置が接続された場合は、データをUSB機器に送信する必要があります。
このように接続される機器によって、PC側の処理は大きく変わります。
でもPCから見た場合、ユーザが何を接続するのかは分かりませんよね。そこで、PCとUSB機器が接続された瞬間、どのような機器が接続されたかなどの情報をやり取りして、PCがUSB機器の種類を判別、適切に使えるようにするわけです。
それでは、USBキーボードをPCに接続後、PCがキーボードを認識するまでの内部の動作をみてみましょう。以下の図は、USBキーボードをPCに接続したあと、実際にどのようなデータがやり取りされているかを説明したものです。
このやり取りの図はかなり簡略化しています。実際にはもっと複雑なデータがやり取りされています。ここでは具体的なデータのやり取りの中身は理解する必要はありません。USBキーボードを接続しただけで、文字入力できるようになるまで、これだけいろいろなやり取りをしなくてはいけないんだ、という理解だけでOKです。
USBキーボードをPCに接続後、このようなデータのやり取りをして、やっとPCがキーボードの接続を認識するわけです。PCが一度キーボードを認識して接続が確立すると、キーボードから文字データの受け取りを開始します。
普段あまり気にせずにPCにキーボードを接続していたと思いますが、実は内部でこんな大変なやり取りをしていたわけです。
USBキーボードのプログラム
さて、これからプログラムを作成してArduino MicroをUSBキーボードとして振る舞うようにするわけですが…
ちょっと嫌な予感がしませんか?
というのは、Arduino MicroをPCに接続したあと、まずは先程説明したようなPCとのデータのやり取りをする必要があります。
でも、どうやってデータをやり取りするのか、具体的にどのような内容のデータのやり取りをするのか、さっぱりわかりませんよね。
ということでUSBの仕様書を調べる必要があるわけですが、公式のUSB仕様書は600ページ程度あります。仕様書を読み解いてたら、いくら時間があっても足りません。
なんだかUSBの仕様書はとても読む気になれませんが、そもそもArduinoでキーボードを作った人って今まで一人もいないのでしょうか。もしArduinoでキーボードを製作をした人がいたら、その人のプログラムを流用させてもらって、カスタマイズしてオリジナルのキーボードが作ることができますよね。そうすればUSBの細かい仕様まで理解する必要はありません。
実は、Arduino IDEにはキーボードが簡単に作れるように、すでにベースのプログラムが用意されています。キーボードのプログラムをゼロから自分で作る必要はなく、その仕組みを利用すれば、USBキーボード接続時の処理は1つの命令で実現できてしまうんです。
Arduino IDEでは、これ以外にも、よく使われる機能を簡単に使えるようにするためのベースとなるプログラムがたくさん用意されています。
それでは次に、この「ベースのプログラム」について詳しく見ていきましょう。
ライブラリ
先ほど、「よく使われる機能を簡単に使えるようにするためのベースとなるプログラム」と説明しましたが、プログラミングの世界ではこれを「ライブラリ」と呼んでいます。
「ライブラリ」は日本語で「図書館」という意味です。プログラミングの世界のライブラリとは、図書館のようないろいろな先人の知恵(プログラム)が詰まったところ、というイメージでしょうか。
このライブラリは1つだけ存在するというわけではなく、Arduinoをキーボードにするための「キーボードライブラリ」というように、ある機能を実現する目的ごとに、たくさんのライブラリが存在します。どのようなライブラリがあるか、実際のこのあとに確認してみます。
この「ライブラリ」ですが、Arduino IDEだけの用語ではなく、例えばPythonやJavaScriptなど他のプログラミング言語でもさまざまなライブラリが用意されています。
ライブラリは非常に重要な項目ですので、基礎編パート2ではいくつかのライブラリを利用して使い方に慣れていきます。
ライブラリの使い方
次に、ライブラリをどのように利用するか確認しましょう。
Arduinoをキーボードとして動作させるためのライブラリ(=ベースとなるプログラム)はすでに用意されています。そのプログラムを探して、自分のプログラムにコピペすれば利用できます。
でもこんなことをしたら、自分のプログラムが読みづらくなってしまいますよね。自分のプログラムにライブラリのプログラムをコピーしてしまうと、どれが自分のプログラムでどれがライブラリのプログラムかわかりづらくなってしまいます。
そこで、基礎編パート1の第37回で説明した「#include」の機能を使用します。ライブラリはヘッダファイル(拡張子が「.h」のファイル)で提供されていますので、#include
を使用してライブラリのファイルを自分のプログラムにヘッダファイルとして取り込みます。
キーボードのライブラリで実例を確認してみましょう。
キーボードのライブラリを使用する場合、以下のようにプログラムの先頭に
#include <Keyboard.h>
と書きます。
このようにキーボードのライブラリをインクルードしておくだけで、このあとキーボード接続時の処理を1つの命令で実現できるようになります。またArduino MicroからPCに文字データを送るときも1つの命令で実現できてしまいます。
具体的にどのようにプログラムを書くかは次回、実際にArduino Microをキーボードとして動作させながら説明します。
ライブラリを使ったプログラミング
基礎編パート1のスケッチは、一つ一つの命令が、Arduinoの一つ一つの動作になっていました。そのため、スケッチを見るとArduino内部でどのような動作をしているかよくわかりましたよね。
ところで、ライブラリを使ったプログラミングでは複雑な機能も簡単に実現できます。一方で、ライブラリの中身までは確認しませんので、実際にArduinoが何をしているのかよくわかりません。物事の中身が気になって仕方ない、という方にはちょっとフワフワしか感じがあるかもしれません。
基礎編パート2では、ライブラリを中心にスケッチを作成していきます。基礎編パート1とは違った理解のしづらさを感じるかもしれませんが、ぜひライブラリを使ったプログラミングにも慣れるようにしてみてください。
ライブラリの種類
ここまで、キーボードのライブラリを中心に説明してきましたが、他にどのようなライブラリが用意されているのか、具体的にみていきましょう。
最初にライブラリの分類について説明します。Arduinoのライブラリは大きく以下のように分類されます。
分類 | 内容 |
---|---|
標準ライブラリ | Arduino IDEに標準で付属するライブラリ。デフォルトでインクルードできます。 |
コミュニティのライブラリ | Arduino IDEの「ライブラリ管理」という機能で、あとから追加したり削除したりできるライブラリ。使用する場合は「ライブラリ管理」という機能でインストールする必要があります。 |
zipファイルのライブラリ | 上記以外の、主にWebサイトで個別に配布されているzipファイル形式のライブラリ。このライブラリはArduino IDEの「.ZIPファイル形式のライブラリをインストール」という機能でインストールする必要があります。 |
それでは、ここで実際にどのようなライブラリがあるのかみてみましょう。
Arduino IDEを起動してください。Arduino IDEの「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理…」を選択してください。
選択すると、ライブラリを管理するダイアログが表示されます。
標準ライブラリは何もしなくてもデフォルトで利用できますが、コミュニティのライブラリはこのダイアログでインストールする必要があります。
このダイアログにリストされているライブラリをちょっとスクロールしてみてみてください。すごい量がありますよね。そこで、このダイアログの使い方についてざっと確認しておきましょう。
まず左上の「タイプ」メニューは、ライブラリが大量にリストされているため、自分でインストールしてあるライブラリのみを表示したり、インストール済みのライブラリのうち、アップデートがあるもののみをリストしたり、といったように、一部のライブラリを表示するためのメニューです。
次に中央上にある「トピック」メニューは、たくさんのライブラリの中から、特定の種類のライブラリを探すためのものです。クリックするといろいろな種類が表示されますよね。例えば「データ処理」とか「センサ」とか「表示」などです。ライブラリの説明は英語ですが、興味があるトピックがあればどれぐらいライブラリが提供されているかみてみてください。
自分が探しているライブラリが見つかったら、そのライブラリの欄にある「インストール」ボタンをクリックするとインストールできます。
このようにあとから自分で探してインストールしたライブラリは、「書類」または「ドキュメント」フォルダの「Arduino」→「Libraries」フォルダにインストールされます。インストールしたライブラリを削除する場合、ライブラリのフォルダごと削除すればOKです。
まとめ
今回は具体的な説明が出てこなかったので、理解できた気がしないかもしれません。今の時点では、以下のことが理解できていればOKです。
- 複雑なプログラミングを簡単な命令で使えるようにするために、ベースとなるプログラム「ライブラリ」が用意されている
- ライブラリはArduino IDEでデフォルト状態ですぐに使用できる「標準ライブラリ」や、後から自分でインストールする「コミュニティライブラリ」「zipファイルライブラリ」がある
- 自分のプログラムでライブラリを利用する場合は
#include
でライブラリのヘッダファイルをインクルードする
次回は実際にキーボードライブラリを使用して、Arduino Microをキーボードとして動作させてみます。
更新履歴
日付 | 内容 |
---|---|
2021.7.18 | 新規投稿 |
2022.2.20 | ライブラリ説明追加 |