Arduino Microを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でUSBキーボードを作った人って今まで一人もいないのでしょうか?
もしArduinoでUSBキーボードを製作をした人がいたら、その人のプログラムを流用させてもらって、カスタマイズしてオリジナルのキーボードが作ることができますよね。そうすればUSBの細かい仕様まで理解する必要はありません。
実は、Arduino IDEにはキーボードが簡単に作れるように、すでに「ベースのプログラム」が用意されています。
その仕組みを利用すれば、1スケッチに1行書くだけでArduino MicroがUSBキーボードになるんです。(イメージがつかみづらいと思いますが、先人が作ったスケッチを簡単に利用できる、というようなイメージを持っていただければと思います)
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を起動してみてください。
ウィンドウの左側にいくつかアイコンが並んでいます。この中の本が並んでいるアイコン(ライブラリ=図書館のイメージですね)をクリックします。

クリックすると、ライブラリを管理するエリアが表示されます。
このエリアは「ライブラリマネージャー」と呼ばれています。
このエリアでライブラリのインストール、アップデート、削除などの操作を行います。

ライブラリ管理のエリアが狭いときは、スケッチ領域との境界線をドラッグすると表示幅を調整することができます。
ここでは「コミュニティのライブラリ」を管理することができます。
デフォルトではライブラリ一覧の領域にすべてのライブラリが表示されています。
このライブラリ一覧をちょっとスクロールしてみてみてください。すごい量がありますよね。
そこで、ライブラリを検索するためにいくつか機能がありますので確認しておきます。
例えば、「Keyboardライブラリをインストールしたい」というように、具体的なライブラリ名がわかっている場合は、一番上の「検索をフィルタ…」という欄に「Keyboard」と入力するとすぐに見つかります。
その下の「タイプ」メニューは、インストールしてあるライブラリのみを表示したり、アップデートがあるライブラリのみを表示したり、というように、一部のライブラリを表示するためのメニューです。
次の「トピック」メニューは、特定の種類のライブラリを探すためのものです。例えば「データ処理」とか「センサ」とか「表示」などです。
自分が探しているライブラリが見つかったら、そのライブラリの欄にある「インストール」ボタンをクリックするとインストールできます。
このライブラリ管理で追加でインストールしたライブラリは、「書類」または「ドキュメント」フォルダの「Arduino」→「Libraries」フォルダにインストールされます。
zipファイルのライブラリ
ArduinoのライブラリはWebサイトなどでzipファイルで公開されていることもあります。
そのようなライブラリは、最初にWebサイトからzipファイルになっているライブラリをダウンロードします。
ダウンロードできたら、Arduino IDEの「スケッチ」メニューから「ライブラリをインクルード」▶︎「ZIP形式のライブラリをインクルード…」を選択すると、ファイルを選択するダイアログか表示されますのでダウンロードしたzipファイルを指定すれぱインストールできます。

Arduinoのライブラリは、コミュニティのライブラリがかなり充実しています。そのためzipファイルでライブラリをインストールする機会はあまり多くないと思いますが、頭の片隅に入れておいていただければと思います。
どのようなライブラリがあるのか?
ライブラリを使うとスケッチが簡単に書ける、というのはいいとして、具体的にどのようなライブラリがあるのでしょうか?もう少し具体的に確認したいと思います。
この部品は、温度と湿度が同時に測定できる温湿度センサーで「DHT22」という有名な製品です。このセンサーはネット通販でも簡単に入手できるのでよく利用されています。

このセンサーを使うには、結構複雑なプログラミングが必要なんです。Arduinoボードとセンサーはデジタルデータで通信をするのですが、データ通信のプログラミング、取得したデータを実際の温度と湿度に変換する計算など、結構大変です。
この部品はとてもよく利用されているため、この製品のライブラリがあります。
先ほどのライブラリ管理の画面の検索欄に「dht22」と入力すると、次のようにライブラリが見つかります。

検索結果にはDHT22のライブラリがたくさんリストされます。DHT22用のライブラリがいくつもある、というのはちょっと不思議ですよね。
これは、DHT22がよく利用されているため、多くの人がライブラリを開発しているためです。それぞれのライブラリは少しずつ違っていて、例えばあるライブラリではDHT22以外にも似たような製品のDHT11やDHT20という製品をサポートしている、などの特徴があります。
基本的な機能、つまり温度と湿度情報を取得する機能はどのライブラリでも共通で、スケッチでは1行書くだけで温度や湿度が取得できるにようになります。
このようによく利用されている電子部品などの製品は、ほとんどのケースでArduino IDEのライブラリにあります。ぜひライブラリを使いこなせるようになりましょう!
まとめ
今回は具体的な説明が出てこなかったので、理解できた気がしないかもしれません。
今の時点では、以下のことが理解できていれば大丈夫です。
- 複雑なプログラミングが必要な機能を、スケッチで簡単に書けるようにするために、ベースとなるプログラム「ライブラリ」が用意されている
- ライブラリはArduino IDEでデフォルト状態ですぐに使用できる「標準ライブラリ」や、あとから自分でインストールする「コミュニティライブラリ」「zipファイルライブラリ」がある
- 自分のスケッチでライブラリを利用する場合、
#include
でライブラリのヘッダファイルをインクルードする
次回は実際にキーボードライブラリを使用して、Arduino Microをキーボードとして動作させてみます。
更新履歴
日付 | 内容 |
---|---|
2021.7.18 | 新規投稿 |
2022.2.20 | ライブラリ説明追加 |
2025.1.31 | Arduino IDE2対応 |