Keyboardライブラリを使用して、実際にArduino Microがキーボードとして動作するスケッチを作成してみます。
説明内容
前回の記事では「ライブラリ」の概要を説明しました。
今回は、さっそく「Keyboardライブラリ」を利用して、Arduino MicroをUSBキーボードとして動作させてみます。
ところで今回作成するプログラムでは、当然ながら新しいC++言語の文法が出てきます。
通常ですと、説明の順番は「新しい知識を詳しく説明」▶︎「スケッチを作成して動作確認」という流れで進めています。
でも、今回出てくる新しい知識はかなり大きい概念ですので、説明がとても長くなってしまい、途中で何をしているのかよくわからなくなってしまう可能性があります。
そこで今回の記事では、ライブラリの使い方を簡単に説明して、Arduino Microをキーボードとして動作させてみます。
最初は詳しい知識を深掘りせず、まずはライブラリを使ったスケッチはどのようなものか、イメージをつかむことを優先したいと思います。
ライブラリをどのように利用するのか雰囲気をつかんでいただければ大成功です!
ライブラの詳細な知識については、次回以降の記事で詳しく説明します。
今回製作するキーボード
今回は、ひとつの機能しか持っていない簡単なキーボードを製作します。
次の動作をするキーボードを製作します。
PCに接続すると、5秒後に文字『A』をPCに送るキーボード
なんとも変なキーボードですよね。動作を図解すると次のようになります。
「A」という文字を1回しか入力できないキーボードです。「キーボード」と言っていますが、キー(スイッチ)は機能しません。
とにかく、PCに接続すると、5秒後に強制的に「A」という文字が入力されてしまうキーボードです。
とても役にたつキーボードではありませんが、このキーボードを持ち歩けば、「A」を入力したいときは、接続するだけで自動入力できるので、もしかしたらどこかで役に立つかもしれません!
説明の進め方
このキーボードを製作するために、次の流れで説明していきます。
- Arduino Microをキーボードとして認識されるようにする
- PCに文字「A」を送る
前回の記事で解説しましたが、一般的なUSBキーボードをPCに接続すると、USBキーボードとPCは次のようにデータのやり取りをします。
Arduino Microをキーボードとして動作させる場合、このようなデータのやり取りが必要です。このデータのやり取りにより、PCはArduino Microをキーボードとして認識します。
そこで、最初に「❶ Arduino Microをキーボードとして認識されるようにする」のパートで、この処理をどのようにスケッチに書けばよいか説明します。
これでArduino Microがキーボードとして振る舞うことができるようになりますので、いよいよ「A」をPCに送ります。
次の「❷ PCに文字「A」を送る」のパートでこの処理のスケッチの書き方を説明します。
それではArduino Microを準備して始めましょう!
❶ Arduino Microをキーボードとして認識されるようにする
それではさっそくスケッチを作成しましょう!
新規スケッチ作成
最初に、Arduino IDEのメニューから「ファイル」→「新規ファイル」を選択して新規ファイルを作成します。
作成後、この状態で保存しておきます。ファイル名は「keyboard_test」という名前にしましたが、他の名前でも構いません。
また、ボードの選択メニューから「Arduino Micro」を選択しておきます。

新規ファイル作成時にデフォルトで書かれているコメントは必要ありませんので削除して、このプログラムのコメントを書いておきます。次のようにしてみました。
/*
キーボードのテストスケッチ
PCに接続すると一定時間後に「A」を自動的に入力する
*/
void setup() {
}
void loop() {
}
ヘッダファイルのインクルード
これから、Keyboardライブラリを使用するわけですが、ライブラリを利用するには、スケッチの先頭でライブラリのヘッダファイルをインクルードする必要があります。
キーボードライブラリのヘッダファイル名を確認しましょう。
Keyboard.h
最初の「K」は大文字ですので注意してください。
それでは、プログラムの先頭でこのファイルをインクルードしましょう。コメントの後の6行目に追加してみました。
/*
キーボードのテストスケッチ
PCに接続すると一定時間後に「A」を自動的に入力する
*/
#include <Keyboard.h>
void setup() {
}
void loop() {
}
これでKeyboardライブラリを利用できるようになりました。
キーボードとして認識するスケッチ
次に、PCに接続したときにArduino Microをキーボードとして認識するようにスケッチを書きます。
次のよう1行書くだけでArduino Microがキーボードとして認識されるようになります。
Keyboard.begin();
Keyboard
の最初のK
は大文字です。
Keybaordの後に.
(ピリオド)を入力して、その後にbegin()
を書きます。これはArduino Microに対する指示ですので、最後に;
(セミコロン)を付けます。
次に、Keyboard.begin();
はsetup関数とloop関数のどちらに書けばよいか考えてみましょう。
これは、Arduino MicroをPCに接続したときに、データのやり取りをしてArduino Microをキーボードとして認識してもらうための処理です。一度認識されるとそのあとはキーボードとして動作することができます。
つまり、Keyboard.begin();
はPCと接続時に1度だけ実行すれば良いので、setup
関数に書けばOKです。
スケッチは次のように作成してみました。(10行目に追加)
/*
キーボードのテストスケッチ
PCに接続すると一定時間後に「A」を自動的に入力する
*/
#include <Keyboard.h>
void setup() {
// Arduino Microがキーボードとして認識れさるようにする
Keyboard.begin();
}
void loop() {
}
ところで、Keyboard.begin();
という書き方はちょっと不思議な書き方ですよね。
「.
」を使うケースは、基礎編パート1で習得した知識で一番近いものは構造体でしょうかね。
構造体は、構造体を表す名前の後に「.
」をつけて、構造体のメンバ変数を指定するんでしたよね。例えばoto.ontei
という書き方でした。
でもこの命令の場合、メンバ変数ではなくbegin()
というように関数になっています。
実はKeyboard.begin();
という書き方は、今までとは違う考え方の仕組みなんです。かなり大きな概念ですので、次回以降の記事で詳しく説明します。
このスケッチをArduino Microボードに送ると、PArduino Microがキーボードとして認識されます。(ただし、他に何の動作も書いてないので、何もしないキーボードですが…)
それでは、実際にスケッチをArduino Microに送って、キーボードとして認識されるか確認してみましょう!
キーボードとして認識されるか確認する
作成したスケッチはキーボードとして動作しませんので、この状態でPCに接続しても何も起こらないような気がしますよね。
実際には、macOSでもWindowsでも、接続時にOS側でキーボード認識の処理がされます。
キーボードの認識処理はOSごとに異なりますので、macOSとWindwosの場合それぞれで、どのような処理になるのか見ておきましょう。
macOSの場合
macOSの場合、OSバージョンにより挙動が異なります。
━━ macOS Sequoia(バージョン15)以降の場合 ━━
スケッチの書き込みが終わると、Arduinoボードがキーボードとして動作を開始します。
動作を開始すると、macOSにとっては新しいUSB機器が接続されたことになりますので、次のようなダイアログが表示されます。

このダイアログで「許可」をクリックすると、Arduino MicroがキーボードとしてmacOSに接続されます。
先程のプログラムをArduino Microに書き込んで確認してみてください。
━━ 以前のmacOSの場合 ━━
申し訳ございません。macOSのどのバージョンから動作仕様が変わったのか追跡できませんでした。
以前のmacOSの場合、今まで接続したことがないキーボードが接続されると、キーボードの種類を判定する処理がされることがあります。そのときは次のように対応してください。
スケッチの書き込みが終わると、初めてのキーボードが接続されたと認識され、次のダイアログが表示されます。
「キーボードを識別するために「続ける…」ボタンをクリック」と指示されるので、このダイアログが表示されたら「続ける…」をクリックしてください。クリックすると以下のダイアログが表示されます。
詰んでしまいました…
なんと「左のShiftキーの隣のキーを押してくれ」なんて言ってます。今回確認するプログラムは何もしないキーボードですので、「左のShiftキー」どころか、キーなんてありません!
ということで、macOSをご利用で、このダイアログが出てきてしまった方は、このダイアログの左上の赤ボタンをクリックしてこのダイアログを閉じて見なかったことにしてください。
macOS側では、キーボードの種類判定はできない状況ですが、キーボードとしては認識されています。
先程のプログラムをArduino Microに書き込んで確認してみてください。
Windowsの場合
Windowsでは、今まで接続したことがないキーボードが接続されると、キーボードの認識処理がされます。
OSバージョンにより動作が若干異なります。
━━ Windows11の場合 ━━
スケッチの書き込みが終わると、USB機器を接続したときの音(ピコッ)がなります。これでキーボードとして認識されています。
認識状態は次の手順で確認できます。
Windowsの「設定」から「Bluetoothとデバイス」を選択し、次のように「デバイス」をクリックします。

「入力」としてキーボードアイコンのついた「Arduino Micro」と表示されていれば正しく認識されています。

先程のプログラムをArduino Microに書き込んで確認してみてください。
━━ Windows10の場合 ━━
初めてのキーボードを接続すると、右下の領域に以下のようなメッセージが表示されます。
特に何かする必要はありませんが、このメッセージが出てきた、ということはArduino Microをキーボードとして認識したことになります。
認識状態は次の手順で確認できます。
Windowsのスタートメニューから「コントロールパネル」を選択します。
コントロールパネルが表示されますので「デバイスとプリンターの表示」をクリックします。
Windowsが認識されているデバイスがリストされます。
その中にキーボードアイコンの「Arduino Micro」があればOKです。(何だか絵がずいぶん違いますが…)
先程のプログラムをArduino Microに書き込んで確認してみてください。
❷ PCに「A」を送る
PCに文字データを送るスケッチの書き方
それではいよいよ、キーボードライブラリを使用して、文字データをPCに送る方法を確認します。
文字データをPCに送るには、スケッチに次のように書けばOKです。
Keyboard.print(文字データ);
注意点としては、文字データは"
で囲みます。
今回作成するスケッチは、PCに「A」を送りますので、次のように書けばOKです。
Keyboard.print("A");
ところで、このように簡単にPCに文字を送ることができますが、今回のスケッチでは必ずsetup関数の中に書く、という点に注意してください。
loop関数の中に書いてしまうと、Arduino Microは「A」という文字をPCにずっと送り続けてしまう、たちの悪いキーボードになってしまいます。
ここまでの内容で「❶ Arduino Microをキーボードとして認識されるようにする」ことと「❷ PCに文字データを送る」を実現する方法がわかりました!
それでは、最後に「PCに接続すると5秒後に「A」1文字を自動的に入力するキーボード」のスケッチを作成します。
PCに接続すると5秒後に「A」1文字を自動的に入力するスケッチ
スケッチを完成させるには、接続後5秒待ってから「A」を送るようにすればよいので、delay関数を追加すれば完成です。
スケッチは次のよう作成してみました。
/*
キーボードのテストスケッチ
PCに接続すると一定時間後に「A」を自動的に入力する
*/
#include <Keyboard.h>
void setup() {
// Arduino Microがキーボードとして認識れさるようにする
Keyboard.begin();
// 5秒待つ
delay(5000);
// 「A」を入力する
Keyboard.print("A");
}
void loop() {
// そのあとは何もしない
}
動作確認
これからプログラムを書き込みますが、書き込み直後、すぐにArduino Microはキーボードとして動作を始めます。
Arduino IDEでスケッチの書き込みが完了してから5秒後に、「A」という文字が現在のカーソル位置に入力されます。
そこで、スケッチの書き込みボタンをクリックしたら、スケッチのどこかにカーソルを合わせておくことを忘れないようにしてください。
それではArduino MicroをPCに接続して、スケッチを書き込んでみましょう!
書き込みが完了すると、次のようにカーソルの位置に「A」という文字が入力されれば成功です!
なお、入力モードを日本語にしている場合は、「A」ではなく「あ」または「ち」と表示されたかもしれません。いずれか表示されていればOKです。

Keyboardライブラリ
今回は「Arduino Microをキーボードとして認識しもらう方法」と「PCに文字データを送る方法」を確認しました。
どちらも次のようにKeyboard
に続いて、.
をつけて関数名のようなものを書く形式でした。
Keyboard.begin(); // キーボードとして認識してもらう処理
Keyboard.print("A"); // PCに文字Aを送る処理
これらはdigitalWrite
などの普通の関数の呼び出しに似ていますが、かなり異なる考え方のものなんです。
そこで、次回の記事ではこれらがどのようなものなのか、詳しく解説します。
更新履歴
日付 | 内容 |
---|---|
2021.7.22 | 新規投稿 |
2021.7.25 | キーボードデバイス認識状態確認手順を追加 |
2022.2.20 | 認識手順の説明補足 |
2025.2.2 | Arduino IDE2対応 最新のOS情報に更新 |
ウルトラ初心者ですが毎日少しずつ進めさせて頂いております
何日か色々試し悩んでも解決しないので質問させてください
今回の記事を進めていた所エラーが発生し
ました
Keyboardが存在しません
と出て先にすすめません
原因がわかれば教えて頂けますでしょうか
何10回と確認しましたがタイプミスはありませんでした
再起動を行なってもダメでした
インクルードまでは読み込みますが
セットアップでエラーが出ます
【開発環境】
Mac OS10.12.3
MacBook Air
ボード
MEGA 2560 R3
お暇なときにでもよろしくお願いします
ご質問どうもありがとうございます。
まず、こちらで以下の環境で確認してみました。
OS: macOS 13.3.1 (MacBook Pro M2)
IED:
Arduino 1.8.19
Arduino IDE 2.1.0
ボードファイル:
Mega2560
この内容で#include <Keyboard.h>を含むスケッチで試してみたのですが、問題ありませんでした。
「Keyboardが存在しません」ということですので、素直に解釈すると、Keyboard.hという名称のファイルが見つからないということになります。
そこでお手数ですが、Keyboard.hがあるか以下の手順でご確認いただけますでしょうか。
Arduino Version1系の場合:
1) Arduinoアプリアイコンを右クリックして表示されるメニューから「パッケージの内容を表示」を選択
2) 表示されるFinderで「Contents」▶︎「Java」▶︎「Libraries」を開く
3) この中に「Keyboard」というフォルダがあるか確認する。あれば、さらに「Keyboard」▶︎「src」フォルダの中にKeyboard.hがあるか確認する
Arduino Version2系の場合:
1) Finderメニューで、Optionキーを押しながら「移動」▶︎「ライブラリ」を選択
2) 表示されたFinderで、「Arduino15」▶︎「libraries」フォルダにKeyboardフォルダがあるか確認する
3) あれば、「Keyboard」▶︎「src」フォルダにKeyboard.hがあるか確認する
いずれの場合もKeyboard.hがなければアプリを再度ダウンロードしてみてください。
Keyboard.hがあるようであれば、何らかの理由で見つけられなくなっていますので、再度対処方法を検討してみます。
お手数ですが、上記内容のご確認をいただければと思います。
素早いご連絡ありがとうございます
試して改めてご連絡いたします
色々試してみましたのでご報告致します
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」のボードを買おうかと思います
詳細にご検証いただいてどうもありがとうございました。
まず最初に謝らなくてはなりません。
私の方で検証してOKでした、という内容ですが、検証の仕方が間違っていました。私の方で検証してOKだったのは「#include <Keyboard.h>」のみを記述したスケッチで確認したためです。このように記述した場合、スケッチでは実際にはKeyboardライブラリが使用されていませんので、特にエラーにはなりません。
setupにKeyboard.begin(); を追加して確認したところ、、、コメントいただいた内容と同じエラーになりました。
そのあと考えてみたのですが、Arduino Megaは非対応なのではないか、と思いました。
Arduino公式サイトのKeyboardライブラリのページを確認すると、
https://www.arduino.cc/reference/en/libraries/keyboard/
ライブラリが対応しているポードの一覧があり、その中に「Arduino Mega」がありますので対応していることになります。私はArduino Megaを持っていないので確認できず、この情報を元に対応している、と判断していました。
ただ私の理解では、Keyboardライブラリがサポートしているボードは、USB-シリアル変換チップが搭載されていないもの、という認識です。Arduino Megaは変換チップとしてATMega16U2が搭載されているので非対応ではないか、と思っています。とは言っても公式ページではサポートとなっていますので、ちょっと??の状態です。
私の環境でボードをArduino Microにしたところエラーがなくなりましたので、私の認識は間違ってはいないのではないか、と思っています。
最近はArduinoボードの価格も高くなってきましたので手軽に購入できる感じではありませんが、この先実機でご確認されたいようでしたらMicroを入手された方が良いかもしれません。
ただ、実機がなくてもスケッチ内容を見ていただければライブラリやクラスの使い方はご理解いただけるかな、と思います。
解決となる回答ができずに申し訳ございません。他に何かご不明点がございましたらお手数ですがご質問いただければと思います。
ご連絡頂きありがとうございます
Microで試したところ問題なく動作きました
引き続き学習させていただきます
こちらこそご連絡いただきどうもありがとうございました。
やはりUSB-シリアル変換チップが載っているボードはダメっぽいですね。公式ページのサポートボードのリストが謎です…
今回は的確なご回答ができず申し訳ございませんでした。
引き続きサイトの方をよろしくお願いいたします。