ガイド · 読了まで28分

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(組み込みのライブラリとボードパッケージ)
WindowsC:\Users\<user>\Documents\Arduino\librariesC:\Users\<user>\AppData\Local\Arduino15
macOS/Users/<user>/Documents/Arduino/libraries/Users/<user>/Library/Arduino15
Linux/home/<user>/Arduino/libraries(ホームフォルダの中)/home/<user>/.arduino15
スケッチブックの本当の場所は、「ファイル」>「基本設定」の「スケッチブックの保存場所」の欄で確認できます。librariesフォルダはいつもその中にあります。Windowsで「ドキュメント」フォルダがOneDriveと同期されていると、パスはC:\Users\<user>\OneDrive\Documents\Arduinoになることがあります。AppData(Windows)、Library(macOS)、.arduino15(Linux)のフォルダは初期設定で隠されています。ファイルエクスプローラーで隠しファイルを表示するか、macOSのFinderではCmd + Shift + .を押しましょう。

方法1:ライブラリマネージャでライブラリをインストールする

ライブラリマネージャを使うと、Arduinoの公式のライブラリインデックスにある何千ものライブラリを検索し、1回のクリックでインストールできます。このインデックスのライブラリは決まった仕様に沿ってまとめられているので、フォルダの構成が崩れることはなく、必要なほかのライブラリ(依存ライブラリ)も自動で提案され、新しいバージョンが出るとIDEが知らせてくれます。そのため、必要なライブラリがリストにあるなら、いつもこの方法を使いましょう。例として、DHT11とDHT22のセンサー用のAdafruitのライブラリをインストールしてみます。

  1. Arduino IDE 2を開き、左のサイドバーの本のアイコンをクリックします。「スケッチ」>「ライブラリをインクルード」>「ライブラリを管理」や、Ctrl+Shift+Iのショートカット(macOSではCmd+Shift+I)でも同じパネルが開きます。
  2. 検索欄にDHT sensor libraryと入力します。数秒で、名前や説明にその言葉を含むライブラリがすべてカードの一覧で表示されます。
  3. 各カードには、上にライブラリの名前と作者、その下に短い説明とMore info(詳細)のリンクがあります。似た名前のDHTのライブラリがいくつか表示されるので、作者がAdafruitのDHT sensor libraryのカードを選びます。
  4. カードの下のバージョンの一覧には最新のバージョンが表示されています。特別な理由がなければ最新のままにして、「インストール」をクリックします。
  5. IDEがInstall library dependencies(依存ライブラリのインストール)という題のウィンドウを開き、このライブラリにはAdafruit Unified Sensorという別のライブラリが必要だと伝えます。「全てをインストール」をクリックします。
  6. 出力パネルにダウンロードの行が流れ、右下に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は連鎖全体を一度にインストールします。わざと依存ライブラリを省くのでなければ、いつもこの選択肢を使いましょう。

0.96インチのI2C OLEDディスプレイモジュール
0.96インチのOLEDディスプレイ:Adafruit SSD1306ライブラリをインストールすると、Adafruit GFX LibraryとAdafruit BusIOが依存ライブラリとして一緒に入ります。1つでも欠けるとコードはコンパイルできません。

一覧が多すぎるときは、検索欄の上の2つの絞り込みが便利です。

絞り込み選択肢用途
タイプAll, Updatable, Installed, Arduino, Partner, Recommended, Contributed, RetiredInstalled(インストール済み)はどのライブラリがどのバージョンでインストールされているかを、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 / DHT22DHT sensor libraryDHT sensor library (Adafruit) + Adafruit Unified Sensor#include <DHT.h>
16x2 I2C LCDLiquidCrystal I2CLiquidCrystal I2C (Frank de Brabander)#include <LiquidCrystal_I2C.h>
SSD1306 OLEDAdafruit SSD1306Adafruit SSD1306 + Adafruit GFX Library + Adafruit BusIO#include <Adafruit_SSD1306.h>
DS18B20DallasTemperatureDallasTemperature (Miles Burton) + OneWire#include <DallasTemperature.h>
RC522 RFIDMFRC522MFRC522 (GithubCommunity)#include <MFRC522.h>
赤外線受信モジュールとリモコンIRremoteIRremote (shirriff, z3t0, ArminJo)#include <IRremote.hpp>
WS2812B NeoPixelAdafruit NeoPixelAdafruit NeoPixel (Adafruit)#include <Adafruit_NeoPixel.h>
DS1307 / DS3231 RTCRTClibRTClib (Adafruit) + Adafruit BusIO#include <RTClib.h>
サーボ(ESP32で)ESP32ServoESP32Servo (Kevin Harrington, John K. Bennett)#include <ESP32Servo.h>
I2Cバックパック付きの16x2 LCDディスプレイ
I2Cバックパック付きの16x2 LCD:このディスプレイにはほとんど同じ名前のライブラリがいくつもあり、それぞれ違う関数で表示を始めます。

この混乱の最もよく知られた例が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につなぎます。これらのピンがボードのどこにあるかはピン配置ツールで確認できます。

C++ (Arduino IDE)
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は、アーカイブを展開して正しいフォルダに入れるところまで自分でやってくれます。

  1. ライブラリのGitHubのページで緑のCodeボタンをクリックし、Download ZIPを選びます。ページにReleasesの欄があれば、そこから安定版のzipをダウンロードするほうが安全です。
  2. ダウンロードしたファイルは展開せずにそのままにしておきます。zipはIDEが自分で展開し、このメニューはフォルダを受け付けません。
  3. Arduino IDEで「スケッチ」>「ライブラリをインクルード」>「.ZIP形式のライブラリをインストール...」を開きます。
  4. 開いたウィンドウで、ダウンロードした.zipファイルを選び、「開く」をクリックします。
  5. インストールに成功すると、右下にSuccessfully installed library from ... archive(アーカイブからインストールしました)の通知が出ます。同じ名前のライブラリがすでにあると、上書きするかをIDEが聞いてきます。インストール済みの版を新しいものに替えたいなら、了承しましょう。
  6. 「ファイル」>「スケッチ例」>「カスタムライブラリのスケッチ例」でライブラリの名前を見つけて、追加されたことを確認します。
IDEがzipファイルを受け付けないこともあります。エラーarchive is not valid: multiple files found in zip file top level(zipの最上位に複数のファイルがある)は、アーカイブの最上位に1つのライブラリのフォルダではなく、複数のファイルやフォルダがあるという意味です。たいていは、複数のライブラリ、コード、資料が入ったプロジェクトのまとめです。エラーlibrary not valid(ライブラリが無効)は、フォルダの最上位にもそのsrcサブフォルダにもヘッダーファイルがない、つまり本当のライブラリが1段深いフォルダに埋もれているという意味です。どちらの場合も、アーカイブを展開して中のライブラリのフォルダを見つけ、次の方法で手でコピーしましょう。

方法3:ライブラリを手でlibrariesフォルダにコピーする

手でのインストールは、インターネットのない学校のパソコン室や、友だちからUSBメモリでもらったライブラリのフォルダ、IDEが受け付けないzipファイルのときに役立ちます。やることは、ライブラリのフォルダを正しい構成で、正しい場所に置くことだけです。

  1. Arduino IDEを閉じます。IDEは起動時にライブラリの一覧を調べるので、動いている間にコピーしたフォルダは認識されないことがあります。
  2. ファイルを展開し、library.propertiesファイルかライブラリの.hファイルが入っているフォルダを見つけます。それがライブラリのルートフォルダです。
  3. このフォルダをスケッチブックのlibrariesフォルダ(Windowsではふつう「ドキュメント」\Arduino\libraries)にコピーします。librariesフォルダがなければ自分で作ります。名前は小文字でちょうどlibrariesにする必要があります。
  4. フォルダの名前の-masterや-mainの接尾辞を消します。たとえばIRremote-masterをIRremoteに変えます。ライブラリのフォルダの名前は英字か数字で始まり、基本の英字、数字、アンダースコア、ドット、ハイフンだけで、最大63文字にする必要があります。スペースやアクセント付きの文字、日本語は使わないでください。
  5. 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の更新やアンインストールで消えることがあった
1つのプロジェクトでしか使わないライブラリを、共有するときにプロジェクトと一緒に持ち運びたいなら、スケッチのフォルダの中にsrcというフォルダを作り、そこにライブラリのファイルを入れます(例:src/MyLib/MyLib.h)。この場合、ライブラリは山かっこではなく、ダブルクォートとパスでインクルードします:#include "src/MyLib/MyLib.h"。IDEはsrcフォルダをスケッチと一緒にコンパイルするので、librariesフォルダに何かをインストールする必要はありません。

ライブラリのバージョンを変える:更新と巻き戻し

ライブラリは時間とともに進化し、大きなバージョンの変更では、関数の名前が変わったり動きが変わったりすることがあります。ネットで見つけた例が数年前のバージョン用に書かれていると、最新のバージョンではコンパイルできなかったり、コンパイルできてもおかしな動きをしたりします。その場合は、コードが書かれたバージョンに戻すか、コードを新しいバージョンに合わせます。ライブラリマネージャなら、数回のクリックでバージョンを切り替えられます。

  1. ライブラリマネージャでライブラリの名前を検索するか、タイプの絞り込みをInstalledにします。カードにインストール済みのバージョンが表示されます。
  2. カードの下のバージョンの一覧を開きます。ライブラリの公開済みのすべてのバージョンがOther Versions(ほかのバージョン)の下に並んでいます。
  3. 使いたいバージョンを選び、「インストール」をクリックします。IDEは古いバージョンを消して選んだものをインストールします。librariesフォルダには、1つのライブラリにつき1つのバージョンしか置けません。
  4. 起動時、IDEがUpdates are available for some of your libraries.(一部のライブラリに更新があります)という通知を出すことがあります。そこからまとめて更新する前に、動いているプロジェクトがどのバージョンに頼っているかをメモしておきましょう。まとめての更新では、多くのライブラリの大きなバージョンが一度に変わることがあります。
  5. ライブラリを完全に消すには、カードにマウスを重ねてRemove(削除)をクリックします。IDEが確認を求め、librariesからフォルダを削除します。
ライブラリ古いコード新しいコード合わないときの症状
IRremote2.x:IRrecv irrecv(11); irrecv.decode(&results); results.value3.xと4.x:IrReceiver.begin(11); IrReceiver.decode(); IrReceiver.decodedIRData.command古いコードで非推奨(deprecated)の警告、キーのコードが空か間違っている
ArduinoJson6.x:StaticJsonDocument<200> doc;7.x:JsonDocument doc;7.xは古いクラスを非推奨の警告付きでコンパイルする。5.xのコード(StaticJsonBuffer)はまったくコンパイルできない
LiquidCrystal I2CGitHub版: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の文字列を作り、ライブラリのバージョンをシリアルモニタに表示します。

C++ (Arduino IDE)
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)フォルダの構成と、「基本設定」のスケッチブックの保存場所を確認する
エラーメッセージの全体を見るには、出力パネルを上にスクロールしましょう。本当の原因はたいてい最初の赤い行にあります。その行のファイルのパスで、どのファイルが足りないヘッダーを求めたかがわかります。パスがDHT_U.hで終わり、メッセージがAdafruit_Sensor.hなら、足りないファイルを必要としているのは自分のコードではなくDHTライブラリです。打ち間違い、セミコロンの付け忘れ、was not declared in this scope(宣言されていない)などのほかのコンパイラのエラーについてはArduinoのコンパイルエラーをご覧ください。

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つのコピーがあると、ライブラリマネージャはそのライブラリを更新できず、重複を手で消すよう求めます。
  • 消す前にバックアップする:フォルダを削除する代わりに、まずデスクトップに一時的に移しましょう。すべて動けば、あとで消せばよいのです。
Arduino15のpackagesサブフォルダや組み込みのライブラリには、手で触れないでください。そこにあるWire、SPI、WiFiなどのライブラリはボードパッケージの一部で、消すとそのボード用には何もコンパイルできなくなり、ボードマネージャからパッケージを入れ直す必要があります。問題を起こしているコピーは、ほぼ必ず自分のスケッチブックのlibrariesフォルダにあります。

ライブラリのスケッチ例を開き、コードにライブラリを追加する

ライブラリを一番速く学ぶ方法は、そのスケッチ例です。例はインストールしたバージョンに付属しているので、ネットのコードと違い、いつもインストール済みのバージョンに合っています。「ファイル」>「スケッチ例」のメニューは選んだボードに合わせて作られ、次のセクションがあります。

  • 組み込みのスケッチ例: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の行をコードの先頭に書いてくれます。複数のヘッダーファイルを含むライブラリもあり、このメニューで何行も追加されることがありますが、使わない行は消してかまいません。

ライブラリの例がメニューに表示されないときは、まずボードの選択を確認しましょう。スケッチ例の一覧は選んだボードに合わせて作られ、そのボードのアーキテクチャに対応していないライブラリの例は表示されないことがあります。ライブラリを手でコピーしたなら、IDEを再起動します。フォルダの構成が間違っている(フォルダが1段多い)と、ライブラリもその例もまったく見えません。

ESP32でのライブラリの互換性

ESP32開発ボード
ESP32:ほとんどのArduinoのライブラリは動きますが、Unoのタイマーやレジスタに直接アクセスするライブラリは、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で使うもの理由
ServoESP32Servo(ライブラリマネージャ)ServoライブラリはESP32に対応せず、#errorで止まる
SoftwareSerialSerial1、Serial2(ハードウェアUART)またはEspSoftwareSerialSoftwareSerialはAVRのパッケージのもの。ESP32にはすでに3つのハードウェアUARTがある
EEPROMPreferences(ボードパッケージに付属)ESP32ではEEPROMはフラッシュで模擬される。Preferencesのほうがキーと値のデータを安全かつ簡単に保存できる
TimerOne、MsTimer2Ticker(ボードパッケージに付属)AVRのタイマーのレジスタに触れるライブラリはESP32ではコンパイルできない

同じスケッチをUno、ESP32、Picoで使いたいなら、ボードパッケージが定義するアーキテクチャのマクロで、ボードごとに正しいライブラリを選べます。ESP32のパッケージはARDUINO_ARCH_ESP32を、Picoのarduino-picoのパッケージはARDUINO_ARCH_RP2040を、UnoやNanoなどのAVRのボードはARDUINO_ARCH_AVRを定義します。下のサーボのスケッチは3つのボードすべてでコンパイルできます。ESP32では、ESP32Servoライブラリをインストールするだけです。

C++ (Arduino IDE)
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にアップロードします
MicroPython
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の警告が出て、違うバージョンが使われます。どちらかを消しましょう。
  • 何でもかまわず更新する:大きなバージョンが上がる更新で、動いていたプロジェクトが壊れることがあります。更新の前にライブラリのリリースノートに目を通しましょう。
  • 自作のライブラリにアクセント付きの文字やスペース:自分でライブラリを書くなら、フォルダとファイルの名前には基本の英字、数字、アンダースコアだけを使いましょう(日本語も避けます)。
プロジェクトを始めるときは、使うすべてのライブラリの名前、作者、バージョンをコードの先頭のコメントに書いておきましょう。たとえば// DHT sensor library (Adafruit) 1.4.7です。何か月もあとでプロジェクトを開き直したときも、友だちと共有したときも、どのライブラリのどのバージョンをインストールすべきかがひと目でわかります。コードはコンパイルできるのにボードに書き込めないなら、問題はライブラリではありません。Arduinoの書き込みエラーをご覧ください。

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で温度と湿度を測定
#55中級

DHT11で温度と湿度を測定

部屋の温度は何度で、空気は湿っているでしょうか、それとも乾燥しているでしょうか?DHT11センサーが温度と湿度を測定し、Arduinoが2行のLCDディスプレイに値を表示して、数秒ごとに更新します。センサーに異常があればエラーメッセージが表示されます。自分だけの小さな気象観測装置を作る第一歩です。

4.7(47)
73
I2CでLCDディスプレイを使う
#32初級
プレミアム

I2CでLCDディスプレイを使う

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

4.8(53)
70
サーボモーターの使い方
#35初級
プレミアム

サーボモーターの使い方

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

4.7(48)
67
IRリモコンのコードを読み取り
#16初級
プレミアム

IRリモコンのコードを読み取り

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

4.5(39)
55
RFIDの値の読み取り
#53初級
プレミアム

RFIDの値の読み取り

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

4.7(47)
61
WS2812B LEDテープの使い方
#69中級
プレミアム

WS2812B LEDテープの使い方

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

4.8(54)
70
パドルボールゲーム(SSD1306)
#86中級
プレミアム

パドルボールゲーム(SSD1306)

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

4.5(47)
65
DS1302 RTC時計モジュールのセットアップ
#45初級

DS1302 RTC時計モジュールのセットアップ

Arduinoの電源を切っても時刻を保持する、小さな時計モジュールを動かします。モジュールには専用の小さな電池があり、一度時刻を設定すると、パソコンの画面に日付と時刻が毎秒表示されます。アラームやタイマー、記録を残すプロジェクトは、いずれもこのステップから始まります。

4.5(23)
31