Arduinoライブラリのインストール方法:ライブラリマネージャ、ZIP、手動
Arduinoライブラリのインストール方法をステップごとに:ライブラリマネージャ、.ZIPと手動でのインストール、バージョンの切り替え、No such file or directoryエラーの直し方を解説します。
Arduinoライブラリのインストールとは、センサー、ディスプレイ、モジュールをスケッチで使えるように、既製のコードのパッケージをArduino IDEに追加することです。方法は3つあります。ライブラリマネージャ(最も簡単でおすすめの方法)、ダウンロードした.ZIPファイルをIDEに追加する方法、ライブラリのフォルダを手でスケッチブックのlibrariesフォルダにコピーする方法です。インストールしたら、スケッチの先頭に#include <LibraryName.h>と書けば、ライブラリのすべての関数が使えるようになります。正しいライブラリなら1分でインストールできますが、間違ったライブラリやバージョンだと、何時間ものバグ探しになることもあります。
このガイドでは、Arduino IDE 2で3つの方法をステップごとに紹介します。続いて、似た名前の何十ものライブラリから正しいものを選ぶ方法、古いバージョンに戻す方法、ライブラリのスケッチ例を開く方法、最も多い2つのメッセージ、No such file or directoryエラーとMultiple libraries were foundの警告の直し方を紹介します。最後の章では、ESP32とRaspberry Pi Picoで動くライブラリ、代わりが必要なライブラリ、MicroPythonでのライブラリの追加方法を取り上げます。IDEをまだインストールしていなければ、Arduino IDEのインストール方法から始めましょう。
Arduinoライブラリとは?何のためにある?
ライブラリは、決まった1つの仕事をするコードのファイルの集まりで、ほかの人が再利用できるようにまとめたものです。少なくとも1つのヘッダーファイル(.h)、たいてい1つ以上のソースファイル(.cpp)、そしてほぼ必ずいくつかのスケッチ例が入っています。たとえばDHT11センサーは、測った値を1本の線で、マイクロ秒単位でタイミングを取った40ビットのパケットとして送ります。そのタイミングを自分で書く代わりに、DHTライブラリをインストールしてdht.readTemperature()と書くだけで、難しい部分はライブラリがやってくれます。ライブラリとボードパッケージを混同しないでください。ボードマネージャからインストールするボードパッケージはESP32やPicoのような新しいプロセッサのファミリーをIDEに教えるもので、ライブラリは特定のハードウェアや仕事を簡単にするものです。Arduinoのライブラリは3つの場所から来ます。
| ライブラリの種類 | どこから来る? | どこにある? | 例 |
|---|---|---|---|
| 組み込みのライブラリ | IDEが最初の起動時に自分でインストールする | Arduino15の中のlibrariesフォルダ | Servo, Stepper, LiquidCrystal, SD, Ethernet, Keyboard, Mouse |
| ボードパッケージのライブラリ | ボードマネージャからインストールしたパッケージに付属する | Arduino15/packagesの下にある、パッケージ専用のlibrariesフォルダ | UnoならWire、SPI、EEPROM、SoftwareSerial、ESP32ならWiFi、WebServer、HTTPClient、Preferences |
| 自分でインストールするライブラリ | ライブラリマネージャ、.ZIP、手動のコピー | スケッチブックのlibrariesフォルダ | DHT sensor library, LiquidCrystal I2C, Adafruit SSD1306, ESP32Servo |
WireやSPI、ESP32のWiFiライブラリなど、ボードパッケージに付属するライブラリはインストールする必要がなく、#includeの行を書くだけで使えます。自分でインストールするライブラリは、スケッチブックの中のlibrariesフォルダに入ります。OSごとの初期設定の場所は次のとおりです。
| OS | 自分でインストールするライブラリ | Arduino15(組み込みのライブラリとボードパッケージ) |
|---|---|---|
| Windows | C:\Users\<user>\Documents\Arduino\libraries | C:\Users\<user>\AppData\Local\Arduino15 |
| macOS | /Users/<user>/Documents/Arduino/libraries | /Users/<user>/Library/Arduino15 |
| Linux | /home/<user>/Arduino/libraries(ホームフォルダの中) | /home/<user>/.arduino15 |
方法1:ライブラリマネージャでライブラリをインストールする
ライブラリマネージャを使うと、Arduinoの公式のライブラリインデックスにある何千ものライブラリを検索し、1回のクリックでインストールできます。このインデックスのライブラリは決まった仕様に沿ってまとめられているので、フォルダの構成が崩れることはなく、必要なほかのライブラリ(依存ライブラリ)も自動で提案され、新しいバージョンが出るとIDEが知らせてくれます。そのため、必要なライブラリがリストにあるなら、いつもこの方法を使いましょう。例として、DHT11とDHT22のセンサー用のAdafruitのライブラリをインストールしてみます。
- Arduino IDE 2を開き、左のサイドバーの本のアイコンをクリックします。「スケッチ」>「ライブラリをインクルード」>「ライブラリを管理」や、Ctrl+Shift+Iのショートカット(macOSではCmd+Shift+I)でも同じパネルが開きます。
- 検索欄にDHT sensor libraryと入力します。数秒で、名前や説明にその言葉を含むライブラリがすべてカードの一覧で表示されます。
- 各カードには、上にライブラリの名前と作者、その下に短い説明とMore info(詳細)のリンクがあります。似た名前のDHTのライブラリがいくつか表示されるので、作者がAdafruitのDHT sensor libraryのカードを選びます。
- カードの下のバージョンの一覧には最新のバージョンが表示されています。特別な理由がなければ最新のままにして、「インストール」をクリックします。
- IDEがInstall library dependencies(依存ライブラリのインストール)という題のウィンドウを開き、このライブラリにはAdafruit Unified Sensorという別のライブラリが必要だと伝えます。「全てをインストール」をクリックします。
- 出力パネルにダウンロードの行が流れ、右下にSuccessfully installed library DHT sensor library:1.4.7のような通知が表示されます。カードにはインストールしたバージョンが表示されます。
依存ライブラリのウィンドウでの選択は大切です。Install without dependencies(依存ライブラリなしでインストール)を選ぶと本体のライブラリだけがインストールされ、コンパイルするとAdafruit_Sensor.h: No such file or directoryになります。DHTライブラリのファイルの1つが、そのヘッダーをインクルードしているからです。依存の連鎖が何段にもなることもあります。Adafruit SSD1306のOLEDライブラリはAdafruit GFX Libraryを必要とし、それがさらにAdafruit BusIOを必要とします。「全てをインストール」をクリックすれば、IDEは連鎖全体を一度にインストールします。わざと依存ライブラリを省くのでなければ、いつもこの選択肢を使いましょう。

一覧が多すぎるときは、検索欄の上の2つの絞り込みが便利です。
| 絞り込み | 選択肢 | 用途 |
|---|---|---|
| タイプ | All, Updatable, Installed, Arduino, Partner, Recommended, Contributed, Retired | Installed(インストール済み)はどのライブラリがどのバージョンでインストールされているかを、Updatable(更新可能)は新しい版が出ているものを表示します。Arduinoは公式のライブラリ、Contributedはコミュニティのライブラリ、Retiredはもう開発されていないものの一覧です。 |
| トピック | Display, Sensors, Communication, Device Control, Timing, Data Storage, Data Processing, Signal Input/Output, Other, Uncategorized | ライブラリの正確な名前がわからないときに結果を絞り込みます。たとえばDisplayを選ぶと、LCD、OLED、TFTのライブラリだけが残ります。 |
同じ名前のライブラリから正しいものを選ぶ
ライブラリマネージャにDHTとだけ入力すると何十もの結果が出ますし、LiquidCrystal I2Cで検索しても、ほとんど同じ名前のライブラリがいくつも表示されます。同じハードウェアを動かすものでも、関数の名前、コンストラクタのパラメーター、例が違います。あるライブラリ用に書かれたコードは、似た名前の別のライブラリではコンパイルできないことがよくあります。正しいものを選ぶには、次の順番で確認しましょう。
- コードの#includeの行を見る:参考にしている例に#include <LiquidCrystal_I2C.h>とあれば、そのファイルを含むライブラリが必要です。よく書かれた例は、ライブラリの名前と作者も書いています。
- 作者を確認する:Adafruit、SparkFun、Arduino、Espressifなどのよく知られた名前や部品のメーカーは、たいてい最も資料がそろい、最も長く保守されているライブラリを公開しています。
- More infoのリンクを開く:ライブラリのページで、最後の更新日、未解決の課題(issue)、対応しているボードを確認します。何年も更新されていないライブラリは、ESP32やPicoで問題を起こすことがあります。
- バージョンの履歴を見る:バージョンの一覧が長ければ、ライブラリが定期的に開発されていることがわかります。バージョンが1つだけで説明が空のライブラリは避けましょう。
- まずライブラリ自体の例を試す:インストールしたら、その例の1つをコンパイルします。例はコンパイルできるのに自分のコードができないなら、そのコードはおそらく別のライブラリ用に書かれています。
| 部品 | ライブラリマネージャでの検索語 | おすすめのライブラリ(作者)と依存ライブラリ | #includeの行 |
|---|---|---|---|
| DHT11 / DHT22 | DHT sensor library | DHT sensor library (Adafruit) + Adafruit Unified Sensor | #include <DHT.h> |
| 16x2 I2C LCD | LiquidCrystal I2C | LiquidCrystal I2C (Frank de Brabander) | #include <LiquidCrystal_I2C.h> |
| SSD1306 OLED | Adafruit SSD1306 | Adafruit SSD1306 + Adafruit GFX Library + Adafruit BusIO | #include <Adafruit_SSD1306.h> |
| DS18B20 | DallasTemperature | DallasTemperature (Miles Burton) + OneWire | #include <DallasTemperature.h> |
| RC522 RFID | MFRC522 | MFRC522 (GithubCommunity) | #include <MFRC522.h> |
| 赤外線受信モジュールとリモコン | IRremote | IRremote (shirriff, z3t0, ArminJo) | #include <IRremote.hpp> |
| WS2812B NeoPixel | Adafruit NeoPixel | Adafruit NeoPixel (Adafruit) | #include <Adafruit_NeoPixel.h> |
| DS1307 / DS3231 RTC | RTClib | RTClib (Adafruit) + Adafruit BusIO | #include <RTClib.h> |
| サーボ(ESP32で) | ESP32Servo | ESP32Servo (Kevin Harrington, John K. Bennett) | #include <ESP32Servo.h> |

この混乱の最もよく知られた例がI2C LCDです。ライブラリマネージャのLiquidCrystal I2C(Frank de Brabander)はlcd.init()で表示を始めます。GitHubで出回っている同じライブラリの別の版では、代わりにパラメーターなしのlcd.begin()を使います。その版用に書かれたコードをライブラリマネージャのライブラリでコンパイルすると、エラーno matching function for call to 'LiquidCrystal_I2C::begin()'(該当する関数がない)になります。直し方は簡単で、lcd.begin()をlcd.init()に変えるか、インストールしたライブラリの例から始めます。配線とI2Cアドレスの見つけ方はI2C LCDディスプレイの使い方で詳しく解説しています。
インストールを確かめる:2つのライブラリで温度を表示
ライブラリが正しくインストールされたかを一番速く確かめるには、それを使う小さなスケッチをコンパイルすることです。下のコードは、DHT11で読んだ温度と湿度を16x2のI2C LCDに表示します。ライブラリマネージャからDHT sensor library(依存ライブラリも)とLiquidCrystal I2Cをインストールし、DHT11のデータピンをArduino Unoの2番ピンに、LCDのSDAとSCLのピンをA4とA5につなぎます。これらのピンがボードのどこにあるかはピン配置ツールで確認できます。
1// Gereken kütüphaneler / Required libraries (Kütüphane Yöneticisi / Library Manager):
2// DHT sensor library (Adafruit) + Adafruit Unified Sensor
3// LiquidCrystal I2C (Frank de Brabander)
4#include <Wire.h> // kart paketiyle gelir / bundled with the board package
5#include <DHT.h> // DHT sensor library
6#include <LiquidCrystal_I2C.h> // LiquidCrystal I2C
7
8#define DHT_PIN 2 // DHT11 veri pini / DHT11 data pin
9#define DHT_TYPE DHT11 // DHT22 için DHT22 yaz / write DHT22 for a DHT22
10
11DHT dht(DHT_PIN, DHT_TYPE);
12LiquidCrystal_I2C lcd(0x27, 16, 2); // adres, sütun, satır / address, columns, rows
13
14void setup() {
15 Serial.begin(9600);
16 dht.begin();
17 lcd.init(); // bu kütüphanede begin() değil init() / init(), not begin(), in this library
18 lcd.backlight(); // arka ışığı aç / backlight on
19 lcd.print(F("Kutuphaneler OK"));
20 delay(1500);
21}
22
23void loop() {
24 float t = dht.readTemperature(); // santigrat / Celsius
25 float h = dht.readHumidity(); // bağıl nem % / relative humidity %
26
27 if (isnan(t) || isnan(h)) { // sensör cevap vermedi / sensor did not respond
28 Serial.println(F("DHT okunamadi / DHT read failed"));
29 delay(2000);
30 return;
31 }
32
33 lcd.clear();
34 lcd.setCursor(0, 0); // sütun 0, satır 0 / column 0, row 0
35 lcd.print(F("Sicaklik: "));
36 lcd.print(t, 1);
37 lcd.print(F(" C"));
38 lcd.setCursor(0, 1); // ikinci satır / second row
39 lcd.print(F("Nem: %"));
40 lcd.print(h, 0);
41
42 Serial.print(t);
43 Serial.print(F(" C "));
44 Serial.print(h);
45 Serial.println(F(" %"));
46 delay(2000); // DHT11 en fazla saniyede bir ölçer / DHT11 measures at most once per second
47}先頭の#includeの行は、どのライブラリのファイルを追加するかをコンパイラに伝えます。Wire.hはボードパッケージに付属しているので別にインストールする必要はなく、DHT.hとLiquidCrystal_I2C.hは今インストールしたライブラリから来ます。「検証」をクリックして出力パネルにSketch uses ... bytesの行が出れば、すべてのライブラリが見つかっています。赤いNo such file or directoryのメッセージが出たら、下のエラーの章に進みましょう。センサーのしくみとDHT22との違いはDHT11温湿度センサーで解説しています。
方法2:.ZIPファイルからライブラリを追加する
ライブラリマネージャにないライブラリもあります。まだインデックスに追加されていない新しいライブラリ、センサーのメーカーが自分のサイトで公開しているドライバ、本や講座や先生からもらった独自のライブラリなどです。これらはふつうGitHubか、ただの.zipファイルで配布されています。Arduino IDEは、アーカイブを展開して正しいフォルダに入れるところまで自分でやってくれます。
- ライブラリのGitHubのページで緑のCodeボタンをクリックし、Download ZIPを選びます。ページにReleasesの欄があれば、そこから安定版のzipをダウンロードするほうが安全です。
- ダウンロードしたファイルは展開せずにそのままにしておきます。zipはIDEが自分で展開し、このメニューはフォルダを受け付けません。
- Arduino IDEで「スケッチ」>「ライブラリをインクルード」>「.ZIP形式のライブラリをインストール...」を開きます。
- 開いたウィンドウで、ダウンロードした.zipファイルを選び、「開く」をクリックします。
- インストールに成功すると、右下にSuccessfully installed library from ... archive(アーカイブからインストールしました)の通知が出ます。同じ名前のライブラリがすでにあると、上書きするかをIDEが聞いてきます。インストール済みの版を新しいものに替えたいなら、了承しましょう。
- 「ファイル」>「スケッチ例」>「カスタムライブラリのスケッチ例」でライブラリの名前を見つけて、追加されたことを確認します。
方法3:ライブラリを手でlibrariesフォルダにコピーする
手でのインストールは、インターネットのない学校のパソコン室や、友だちからUSBメモリでもらったライブラリのフォルダ、IDEが受け付けないzipファイルのときに役立ちます。やることは、ライブラリのフォルダを正しい構成で、正しい場所に置くことだけです。
- Arduino IDEを閉じます。IDEは起動時にライブラリの一覧を調べるので、動いている間にコピーしたフォルダは認識されないことがあります。
- ファイルを展開し、library.propertiesファイルかライブラリの.hファイルが入っているフォルダを見つけます。それがライブラリのルートフォルダです。
- このフォルダをスケッチブックのlibrariesフォルダ(Windowsではふつう「ドキュメント」\Arduino\libraries)にコピーします。librariesフォルダがなければ自分で作ります。名前は小文字でちょうどlibrariesにする必要があります。
- フォルダの名前の-masterや-mainの接尾辞を消します。たとえばIRremote-masterをIRremoteに変えます。ライブラリのフォルダの名前は英字か数字で始まり、基本の英字、数字、アンダースコア、ドット、ハイフンだけで、最大63文字にする必要があります。スペースやアクセント付きの文字、日本語は使わないでください。
- IDEをもう一度開き、「ファイル」>「スケッチ例」のメニューにライブラリが表示されるか確認します。
| フォルダの構成 | 結果 |
|---|---|
| libraries/DHT_sensor_library/DHT.h | 正しい:古い(フラットな)構成、IDEが見つける |
| libraries/DHT_sensor_library/library.properties + src/DHT.h(2つのファイル) | 正しい:現在の構成、IDEが見つける |
| libraries/DHT-master/DHT-sensor-library-master/DHT.h(フォルダが二重) | 間違い:フォルダが1段多く、IDEがライブラリを見つけられない |
| libraries/DHT.h(フォルダなしのファイル) | 間違い:どのライブラリも専用のフォルダに入れる必要がある |
| libraries/My Library/ | 危険:スペースやアクセント付きの文字は名前のルールに反し、ビルドの問題の原因になることがある |
| IDEのインストール先のフォルダ(例:Program Files) | 間違い:Arduino IDE 2はそこでライブラリを探さない。古いIDE 1.8では、IDEの更新やアンインストールで消えることがあった |
ライブラリのバージョンを変える:更新と巻き戻し
ライブラリは時間とともに進化し、大きなバージョンの変更では、関数の名前が変わったり動きが変わったりすることがあります。ネットで見つけた例が数年前のバージョン用に書かれていると、最新のバージョンではコンパイルできなかったり、コンパイルできてもおかしな動きをしたりします。その場合は、コードが書かれたバージョンに戻すか、コードを新しいバージョンに合わせます。ライブラリマネージャなら、数回のクリックでバージョンを切り替えられます。
- ライブラリマネージャでライブラリの名前を検索するか、タイプの絞り込みをInstalledにします。カードにインストール済みのバージョンが表示されます。
- カードの下のバージョンの一覧を開きます。ライブラリの公開済みのすべてのバージョンがOther Versions(ほかのバージョン)の下に並んでいます。
- 使いたいバージョンを選び、「インストール」をクリックします。IDEは古いバージョンを消して選んだものをインストールします。librariesフォルダには、1つのライブラリにつき1つのバージョンしか置けません。
- 起動時、IDEがUpdates are available for some of your libraries.(一部のライブラリに更新があります)という通知を出すことがあります。そこからまとめて更新する前に、動いているプロジェクトがどのバージョンに頼っているかをメモしておきましょう。まとめての更新では、多くのライブラリの大きなバージョンが一度に変わることがあります。
- ライブラリを完全に消すには、カードにマウスを重ねてRemove(削除)をクリックします。IDEが確認を求め、librariesからフォルダを削除します。
| ライブラリ | 古いコード | 新しいコード | 合わないときの症状 |
|---|---|---|---|
| IRremote | 2.x:IRrecv irrecv(11); irrecv.decode(&results); results.value | 3.xと4.x:IrReceiver.begin(11); IrReceiver.decode(); IrReceiver.decodedIRData.command | 古いコードで非推奨(deprecated)の警告、キーのコードが空か間違っている |
| ArduinoJson | 6.x:StaticJsonDocument<200> doc; | 7.x:JsonDocument doc; | 7.xは古いクラスを非推奨の警告付きでコンパイルする。5.xのコード(StaticJsonBuffer)はまったくコンパイルできない |
| LiquidCrystal I2C | GitHub版:lcd.begin(); | ライブラリマネージャ版:lcd.init(); | エラー:no matching function for call to 'LiquidCrystal_I2C::begin()' |
| ESP32のボードパッケージとESP32Servo | ボードパッケージ2.x:ledcSetup()、ledcAttachPin() | ボードパッケージ3.x:ledcAttach()、ESP32Servo 3.x | エラー:'ledcSetup' was not declared in this scope |
コードがどのバージョン用に書かれたかを残す一番の方法は、ファイルの先頭のコメントにライブラリの名前とバージョンを書いておくことです。マクロでバージョンを知らせるライブラリもあり、たとえばArduinoJsonはARDUINOJSON_VERSION_MAJORを定義しています。下のスケッチは、違う大きなバージョンがインストールされているとわかりやすいメッセージでビルドを止め、正しいバージョンなら小さなJSONの文字列を作り、ライブラリのバージョンをシリアルモニタに表示します。
1// ArduinoJson 7.x (Benoit Blanchon) gerekir / requires ArduinoJson 7.x
2#include <ArduinoJson.h>
3
4#if ARDUINOJSON_VERSION_MAJOR < 7
5#error "Bu kod ArduinoJson 7 ister, Kutuphane Yoneticisinden surumu degistir / This sketch needs ArduinoJson 7"
6#endif
7
8void setup() {
9 Serial.begin(115200);
10 while (!Serial) {} // yerel USB'li kartlarda seri portu bekle / wait for native USB serial
11
12 JsonDocument doc; // 7.x: boyut vermek gerekmez / 7.x: no capacity needed
13 doc["sensor"] = "DHT11";
14 doc["sicaklik"] = 23.5;
15 doc["nem"] = 48;
16
17 serializeJson(doc, Serial); // {"sensor":"DHT11","sicaklik":23.5,"nem":48}
18 Serial.println();
19 Serial.print(F("ArduinoJson: "));
20 Serial.println(ARDUINOJSON_VERSION); // ör. / e.g. 7.4.2
21}
22
23void loop() {
24}この方法なら、クラスメイトやネットでコードを共有したとき、違うバージョンをインストールした人には、わかりにくいエラーの代わりに、何をすべきかを伝える1行が表示されます。コマンドラインが好きなら、Arduino CLIで特定のバージョンを直接インストールできます:arduino-cli lib install "DHT sensor [email protected]"。どのライブラリのどのバージョンが実際に使われているかを見るには、「基本設定」でコンパイル時の詳細な出力をオンにします。ビルドの最後に、ライブラリごとにUsing library ... at version ... in folder: ...の行が表示されます。
No such file or directoryエラーとその直し方
ライブラリを追加するときに最もよく見るエラーです。#includeの行で求められたファイルを、コンパイラがどのライブラリのフォルダでも見つけられないと、出力パネルにfatal error: DHT.h: No such file or directoryとcompilation terminated.が表示され、右下にCompilation error: DHT.h: No such file or directoryの通知が出ます。メッセージのファイル名で、どのライブラリが足りないかがわかります。そのファイルがいつも自分の書いた行から来るとは限らないことも覚えておきましょう。インストールしたライブラリが、別のライブラリをインクルードしていることもあります。
| メッセージのファイル | 原因 | 対処法 |
|---|---|---|
| 自分のコードがインクルードするファイル(DHT.h、LiquidCrystal_I2C.h) | ライブラリをインストールしていない | ライブラリマネージャで検索してインストールする |
| Adafruit_Sensor.h(DHTのコードで) | 依存ライブラリがない:インストール時にInstall without dependenciesを選んだ | Adafruit Unified Sensorライブラリをインストールする |
| Adafruit_I2CDevice.h(OLEDやRTCのコードで) | Adafruit BusIOがない | Adafruit BusIOライブラリをインストールする |
| OneWire.h(DS18B20のコードで) | DallasTemperatureがOneWireを自動でインストールしなかった | OneWireライブラリを別にインストールする |
| SoftwareSerial.h(ESP32で) | このライブラリはAVRのボードパッケージに付属し、ESP32のパッケージにはない | ハードウェアのシリアルポート(Serial2)を使うか、EspSoftwareSerialライブラリをインストールする |
| Dht.h, liquidcrystal_i2c.h | 大文字と小文字の間違い。IDEはヘッダーの名前を1文字ずつ照合するので、WindowsとmacOSでも失敗する | #includeの行を、ライブラリの中のファイル名と完全に同じに書く |
| ライブラリはインストールされているように見えるのに、ファイルが見つからない | 手でのコピーでフォルダが1段多い、またはIDEが使うのと違うスケッチブック(OneDrive) | フォルダの構成と、「基本設定」のスケッチブックの保存場所を確認する |
Multiple libraries were foundの警告の意味は?
このメッセージは、コードの#includeの行を満たせるライブラリが2つ以上あるときに表示されます。たとえば、前のプロジェクトで古いServoライブラリを「ドキュメント」フォルダにインストールしていると、IDEの組み込みのServoライブラリと合わせて候補が2つになり、出力にMultiple libraries were found for "Servo.h"と、続いてUsed: C:\Users\<user>\Documents\Arduino\libraries\ServoとNot used: C:\Users\<user>\AppData\Local\Arduino15\libraries\Servoが表示されます。これはエラーではなく情報で、ビルドは続きます。問題になるのは、Used(使用)の行のライブラリが使いたいものではない場合だけです。IDEはおおよそ次の順番で選びます。
| 順番 | IDEが確認すること | 例 |
|---|---|---|
| 1 | アーキテクチャの互換性 | ESP32では、library.propertiesにesp32か*と書かれたライブラリが、avrとだけ書かれたものより優先される |
| 2 | 名前の一致 | Servo.hには、Servo-masterやMyServoのフォルダより、ちょうどServoという名前のフォルダが勝つ |
| 3 | ボードごとの最適化 | ボードのアーキテクチャをはっきり書いたライブラリ(例:architectures=esp32)が、*とだけ書いたものより優先される |
| 4 | 場所 | スケッチブックのlibrariesフォルダが、ボードパッケージのライブラリより先、ボードパッケージのライブラリがIDEの組み込みのライブラリより先 |
| 5 | 最後の手段 | ほかがすべて同じなら、インクルードしたファイル名に最も近い名前のライブラリを選ぶ |
- Usedの行を読む:使われているフォルダは期待どおりのライブラリですか?そうなら何もする必要はなく、メッセージは無視してかまいません。
- 余分なコピーを消す:間違ったライブラリが選ばれているなら、ライブラリマネージャで見つけてRemoveをクリックするか、IDEを閉じた状態でスケッチブックのlibrariesフォルダからそのフォルダを削除します。
- 古いIDEの名残に注意:Arduino IDE 1.8のころに手でコピーした古いライブラリは「ドキュメント」フォルダに残っていて、場所の優先順位のため、IDEの最新の組み込みのライブラリより優先されてしまいます。
- 同じライブラリのコピーを2つ置かない:librariesフォルダにIRremoteとIRremote-masterのように2つのコピーがあると、ライブラリマネージャはそのライブラリを更新できず、重複を手で消すよう求めます。
- 消す前にバックアップする:フォルダを削除する代わりに、まずデスクトップに一時的に移しましょう。すべて動けば、あとで消せばよいのです。
ライブラリのスケッチ例を開き、コードにライブラリを追加する
ライブラリを一番速く学ぶ方法は、そのスケッチ例です。例はインストールしたバージョンに付属しているので、ネットのコードと違い、いつもインストール済みのバージョンに合っています。「ファイル」>「スケッチ例」のメニューは選んだボードに合わせて作られ、次のセクションがあります。
- 組み込みのスケッチ例:01.Basicsや02.Digitalなど、IDEの基本の例です。Blinkもここにあります。
- ボードの名前のセクション(例:Arduino Unoのスケッチ例):IDEと選んだボードのパッケージに付属するライブラリの例です。Unoを選んでいればServo、EEPROM、SoftwareSerialが、ESP32を選んでいればWiFi、WebServer、Preferencesがここにあります。
- カスタムライブラリのスケッチ例:自分でインストールしたライブラリの例です。たとえばDHT sensor library > DHTtesterです。
インストールしたライブラリの例は、ライブラリマネージャのカードの横にある3点のメニューからも開けます。例は新しいウィンドウで開きます。変えて保存しようとすると、IDEは新しい名前と場所を聞いてきます。例のファイルはライブラリのフォルダに読み取り専用で置かれているからです。自分のスケッチにライブラリを追加するには、「スケッチ」>「ライブラリをインクルード」のメニューでライブラリの名前をクリックするだけです。IDEが必要な#includeの行をコードの先頭に書いてくれます。複数のヘッダーファイルを含むライブラリもあり、このメニューで何行も追加されることがありますが、使わない行は消してかまいません。
ESP32でのライブラリの互換性

ESP32もArduino IDEでプログラムするので、ほとんどのライブラリ、特にI2C、SPI、単線で通信するセンサーやディスプレイのライブラリは、そのままESP32で動きます。問題を起こすのは、Arduino UnoのATmega328Pプロセッサのタイマーやレジスタに直接触れるライブラリです。ライブラリのlibrary.propertiesファイルにESP32のアーキテクチャが見当たらないと、IDEはビルドの最初にWARNING: library LiquidCrystal I2C claims to run on avr architecture(s) and may be incompatible with your current board which runs on esp32 architecture(s)(今のボードと互換性がない可能性がある)という警告を表示します。これは警告にすぎません。LiquidCrystal I2CはWireライブラリしか使わないので、ESP32でも問題なく動きます。一方、ServoライブラリはThis library only supports boards with an AVR, SAM, SAMD, NRF52で始まる#errorのメッセージで、わざとビルドを止めます。また、ESP32のボードパッケージに付属するWiFi、WebServer、HTTPClient、Preferences、BluetoothSerialのライブラリを、ライブラリマネージャからインストールしないでください。同じ名前のほかのライブラリは混乱のもとになるだけです。
| Unoで使うもの | ESP32で使うもの | 理由 |
|---|---|---|
| Servo | ESP32Servo(ライブラリマネージャ) | ServoライブラリはESP32に対応せず、#errorで止まる |
| SoftwareSerial | Serial1、Serial2(ハードウェアUART)またはEspSoftwareSerial | SoftwareSerialはAVRのパッケージのもの。ESP32にはすでに3つのハードウェアUARTがある |
| EEPROM | Preferences(ボードパッケージに付属) | ESP32ではEEPROMはフラッシュで模擬される。Preferencesのほうがキーと値のデータを安全かつ簡単に保存できる |
| TimerOne、MsTimer2 | Ticker(ボードパッケージに付属) | AVRのタイマーのレジスタに触れるライブラリはESP32ではコンパイルできない |
同じスケッチをUno、ESP32、Picoで使いたいなら、ボードパッケージが定義するアーキテクチャのマクロで、ボードごとに正しいライブラリを選べます。ESP32のパッケージはARDUINO_ARCH_ESP32を、Picoのarduino-picoのパッケージはARDUINO_ARCH_RP2040を、UnoやNanoなどのAVRのボードはARDUINO_ARCH_AVRを定義します。下のサーボのスケッチは3つのボードすべてでコンパイルできます。ESP32では、ESP32Servoライブラリをインストールするだけです。
1// Aynı kod Uno, ESP32 ve Pico'da / Same sketch on Uno, ESP32 and Pico
2#if defined(ARDUINO_ARCH_ESP32)
3 #include <ESP32Servo.h> // Kütüphane Yöneticisi: ESP32Servo / Library Manager: ESP32Servo
4 const int SERVO_PIN = 18; // güvenli bir GPIO / a safe GPIO
5#elif defined(ARDUINO_ARCH_RP2040)
6 #include <Servo.h> // arduino-pico paketiyle gelir / bundled with the arduino-pico core
7 const int SERVO_PIN = 15; // GP15
8#else
9 #include <Servo.h> // IDE ile gelir (Uno, Nano, Mega) / bundled with the IDE
10 const int SERVO_PIN = 9;
11#endif
12
13Servo servo;
14
15void setup() {
16#if defined(ARDUINO_ARCH_ESP32)
17 servo.setPeriodHertz(50); // yalnız ESP32: 50 Hz servo sinyali / ESP32 only: 50 Hz servo signal
18#endif
19 servo.attach(SERVO_PIN, 500, 2400); // darbe aralığı mikrosaniye / pulse range in microseconds
20}
21
22void loop() {
23 servo.write(0); delay(1000); // 0 derece / 0 degrees
24 servo.write(90); delay(1000); // orta konum / center
25 servo.write(180); delay(1000); // 180 derece / 180 degrees
26}ESP32では、ライブラリのバージョンがボードパッケージのバージョンに合っていることも大切です。ESP32のボードパッケージの3.xのシリーズではPWM(LEDC)の関数が変わり、ledcSetup()とledcAttachPin()が削除されてledcAttach()に置き換えられました。そのため、古い関数を使うライブラリの版や例は、3.xではエラー'ledcSetup' was not declared in this scope(宣言されていない)で失敗します。現在のESP32Servoの版は3.xのボードパッケージ用に書かれています。直すには、ライブラリの現在の版に移るか、古いプロジェクトをそのままビルドする必要があるなら、ボードマネージャでesp32のパッケージを2.xの最後の版である2.0.17に下げます。ボードのピンと最初のWi-FiのプロジェクトはESP32とは?に、サーボの配線と電源はサーボモーターとは?にあります。
Raspberry Pi Picoでのライブラリ:Arduino IDEとMicroPython
PicoをArduino IDE(Earle F. PhilhowerのRaspberry Pi Pico/RP2040/RP2350のボードパッケージ)でプログラムするなら、ライブラリはUnoと同じ方法でインストールし、同じlibrariesフォルダに入ります。このパッケージのアーキテクチャ名はrp2040で、Pico 2のRP2350チップも同じ名前を使います。Wire、SPI、Servo、EEPROM、PIOを使ったSoftwareSerialはボードパッケージに入っていて、Pico WではWiFiライブラリもすぐに使えます。Adafruitのセンサーやディスプレイのライブラリのほとんどは、Picoでも問題なく動きます。AVRのレジスタに触れるライブラリは、ここでも動きません。PicoではEEPROMがフラッシュで模擬されるので、EEPROM.begin()で始め、EEPROM.commit()で変更を保存します。
MicroPythonでは、ライブラリはPicoのファイルシステムにある.py(またはコンパイル済みの.mpy)ファイルで、ふつう/libフォルダに置きます。machine、time、dht、onewire、ds18x20、neopixel、framebufなどのモジュールはMicroPythonに付属しています。全体の一覧を見るには、ThonnyのShellにhelp("modules")と入力しましょう。一覧にないドライバは、4つの方法で追加できます。
| 方法 | いつ使う? | やり方 |
|---|---|---|
| Thonnyのパッケージマネージャ | PicoをUSBでつないでいるときの、最も簡単な方法 | 「ツール」>「パッケージを管理」で検索します。たとえばssd1306ならmicropython-ssd1306を選んでインストールします。ファイルはPicoの/libフォルダに入ります |
| mpremote | コマンドラインを使うなら | パソコンでmpremote mip install ssd1306を実行すると、micropython-libからライブラリをダウンロードしてPicoにコピーします |
| mip(Pico Wのみ) | Pico WがWi-Fiにつながっていれば、パソコンは不要 | Pico自体でimport mipとmip.install("ssd1306")を実行します |
| 手でのコピー | ライブラリが1つの.pyファイルなら | Thonnyのファイルのパネルで、Picoの/libフォルダを開き、パソコン側のファイルを右クリックしてPicoにアップロードします |
1# Pico W: kütüphane yoksa karttan kur, sonra dene / Pico W: install the library from the board if missing, then test
2import time
3
4try:
5 import ssd1306 # zaten kurulu mu? / already installed?
6except ImportError:
7 import network, mip
8 wlan = network.WLAN(network.STA_IF)
9 wlan.active(True)
10 wlan.connect("AG_ADI", "SIFRE") # kendi Wi-Fi ağın / your own Wi-Fi network
11 for _ in range(40): # en fazla 20 sn bekle / wait up to 20 s
12 if wlan.isconnected():
13 break
14 time.sleep(0.5)
15 if not wlan.isconnected(): # ağa bağlanamadı / could not join the network
16 raise RuntimeError("Wi-Fi baglantisi yok / no Wi-Fi connection")
17 mip.install("ssd1306") # /lib klasörüne iner / lands in /lib
18 import ssd1306
19
20from machine import Pin, I2C
21
22i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000) # GP4 = SDA, GP5 = SCL
23oled = ssd1306.SSD1306_I2C(128, 64, i2c)
24oled.fill(0) # ekranı temizle / clear the screen
25oled.text("Kutuphane OK", 0, 0)
26oled.show() # ekrana gönder / push to the screenコードの最初の部分はssd1306のモジュールをインポートしようとし、なければPico WをWi-Fiにつなぎ、micropython-libからライブラリをダウンロードしてから、ディスプレイに文字を書きます。Wi-FiのないPicoでは、パソコンからThonnyかmpremoteで同じことをします。OLEDの配線と描画の命令はOLEDディスプレイ(SSD1306)の使い方に、MicroPythonの基本の命令とファイルシステムはMicroPythonの基本にあります。初めてPicoをセットアップするなら、Raspberry Pi Picoとは?から始めましょう。
ライブラリを追加するときのよくある間違い
- ライブラリはインストールしたのにボードパッケージを忘れる:ESP32やPico用のライブラリをインストールしても、IDEにボードは追加されません。まずボードマネージャからボードパッケージを、それからライブラリをインストールしましょう。
- 依存ライブラリを飛ばす:Install without dependenciesは、Adafruit_Sensor.hやAdafruit_I2CDevice.hのようなファイルが足りないというエラーの最も多い原因です。
- 先に展開してから.ZIPのメニューを使う:このメニューはzipファイルしか受け付けません。フォルダならlibrariesフォルダに手でコピーしましょう。
- ライブラリを違う場所に置く:スケッチのフォルダ、デスクトップ、IDEのインストール先のフォルダにコピーしたライブラリは見つかりません。正しい場所はスケッチブックのlibrariesフォルダです。
- 同じライブラリのコピーが複数ある:IRremoteとIRremote-masterのような2つのフォルダがあると、Multiple librariesの警告が出て、違うバージョンが使われます。どちらかを消しましょう。
- 何でもかまわず更新する:大きなバージョンが上がる更新で、動いていたプロジェクトが壊れることがあります。更新の前にライブラリのリリースノートに目を通しましょう。
- 自作のライブラリにアクセント付きの文字やスペース:自分でライブラリを書くなら、フォルダとファイルの名前には基本の英字、数字、アンダースコアだけを使いましょう(日本語も避けます)。
Arduinoライブラリのインストールに慣れれば、新しいセンサーやディスプレイも数分の作業です。ライブラリマネージャで正しい作者のライブラリを見つけ、依存ライブラリと一緒にインストールし、まずライブラリ自体の例を試し、それから自分のコードに進みましょう。BlueGraysアプリには、DHT11での温度と湿度、I2C LCD、サーボモーター、RFIDカードリーダー、赤外線リモコン、WS2812BのLED、OLEDのPongゲームなど、ライブラリを使うプロジェクトが、回路図とステップごとに説明したコード付きで用意されています。
よくある質問
Arduinoのライブラリはどこにインストールされますか?
ライブラリマネージャ、.ZIPファイル、手でインストールしたライブラリは、スケッチブックのlibrariesフォルダに入ります。Windowsではふつう「ドキュメント」\Arduino\libraries、Linuxでは~/Arduino/librariesです。正確な場所は「ファイル」>「基本設定」の「スケッチブックの保存場所」の欄で確認できます。IDEに付属する組み込みのライブラリとボードパッケージのライブラリは、別にArduino15フォルダにあります。
ダウンロードしたZIPのライブラリがArduino IDEでインストールできないのはなぜですか?
最も多い理由は、zipに1つのライブラリのフォルダではなく複数のフォルダが入っているか、ライブラリがサブフォルダに埋もれていることです。このときIDEは「multiple files found in zip file top level」や「library not valid」と報告します。展開して、library.propertiesか.hファイルを含むフォルダを見つけ、そのフォルダを手でlibrariesにコピーしましょう。すでに展開してしまったなら、.ZIPのメニューはそのフォルダを受け付けません。
Arduinoのライブラリをアンインストールするには?
ライブラリマネージャでライブラリを見つけ、カードにマウスを重ねてRemoveをクリックすると、IDEがlibrariesからそのフォルダを削除します。手でインストールしたライブラリは、IDEを閉じた状態でスケッチブックのlibrariesフォルダから削除できます。Arduino15フォルダにあるボードパッケージのライブラリには触れないでください。
Arduinoの「No such file or directory」はどう直しますか?
メッセージの.hファイルがどのライブラリのものかを調べ、そのライブラリをライブラリマネージャからインストールします。自分で書いていないヘッダー(例:Adafruit_Sensor.h)なら、インストールしたライブラリの依存ライブラリが足りません。ライブラリがインストールされているのにエラーが続くなら、#includeの行の大文字と小文字や、手でコピーしたフォルダの構成を確認しましょう。
インターネットなしでArduinoのライブラリをインストールできますか?
はい。インターネットにつながった別のパソコンでライブラリのzipファイルをダウンロードし、USBメモリで持ってきます。zipを「.ZIP形式のライブラリをインストール」で追加するか、展開したフォルダをスケッチブックのlibrariesフォルダにコピーします。ライブラリの依存ライブラリも、同じ方法で1つずつ持ってくるのを忘れないでください。
ArduinoのライブラリはESP32やRaspberry Pi Picoで動きますか?
I2C、SPI、単線で通信するセンサーやディスプレイのライブラリのほとんどは、ESP32でもPicoのArduinoのパッケージでもそのまま動きます。ServoやTimerOneのようにAVRのプロセッサのタイマーに直接アクセスするライブラリは、ESP32ではESP32ServoとTickerに置き換え、Picoのボードパッケージには専用のServoライブラリが入っています。「claims to run on avr architecture(s)」という警告だけでは、ライブラリが動かないことにはなりません。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
DHT11で温度と湿度を測定
部屋の温度は何度で、空気は湿っているでしょうか、それとも乾燥しているでしょうか?DHT11センサーが温度と湿度を測定し、Arduinoが2行のLCDディスプレイに値を表示して、数秒ごとに更新します。センサーに異常があればエラーメッセージが表示されます。自分だけの小さな気象観測装置を作る第一歩です。

I2CでLCDディスプレイを使う
Arduinoにディスプレイを接続し、最初のメッセージを表示します。2行のLCDディスプレイは数本の配線だけで接続できます。まず上の行にあいさつを表示し、次に下の行にもう1つのメッセージを表示します。その後、表示を消去して最初から繰り返します。温度や時刻、スコアを表示するプロジェクトは、すべてこのステップから始まります。

サーボモーターの使い方
小型サーボモーターのアームが、一方の端、中央、もう一方の端の3つの位置へ順番に回り、それぞれの位置で2秒間止まります。Arduinoが保持する角度をモーターに指示すると、モーターはその位置まで動いて止まります。ロボットアームや自動開閉するふたが動く仕組みを学べます。

IRリモコンのコードを読み取り
テレビのリモコンは、ボタンごとに目に見えない光で秘密のコードを送っています。赤外線受信機がその光を受け取り、Arduinoが押したボタンのコードをコンピューターの画面に表示します。コードが分かれば、引き出しに眠っている古いリモコンで自作のプロジェクトを操作できます。

RFIDの値の読み取り
建物のキーフォブや入館カードには、見えない識別番号が保存されています。このプロジェクトでは、その番号を読み取ります。カードをRFIDリーダーに近づけると、Arduinoがカードの番号をコンピューターの画面に表示します。カード式のドアや錠のプロジェクトで、どのカードに解錠を許可するかを決めるための第一歩です。

WS2812B LEDテープの使い方
1つずつ自由に色を変えられるスマートLEDテープを使ってみます。Arduinoが最初の5個のLEDを赤く点灯し、1秒後に残りの5個を青く点灯します。その後すべて消灯し、最初から繰り返します。1本の配線で何十個ものLEDを個別の色にするための第一歩です。このようなテープは、装飾用のライトや部屋の照明にも使われています。

パドルボールゲーム(SSD1306)
ボール1個とパドル2本で遊ぶ、ビデオゲームの原点の1つである卓球ゲームを、小さなOLEDディスプレイで楽しめます。2つのボタンで右のパドルを上下に動かします。左のパドルはコンピューターがボールを追いながら操作し、ボールを打つたびにブザーが短く鳴ります。先に9点を取ると勝ちです。その後、新しいゲームが自動で始まります。

DS1302 RTC時計モジュールのセットアップ
Arduinoの電源を切っても時刻を保持する、小さな時計モジュールを動かします。モジュールには専用の小さな電池があり、一度時刻を設定すると、パソコンの画面に日付と時刻が毎秒表示されます。アラームやタイマー、記録を残すプロジェクトは、いずれもこのステップから始まります。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

