Руководства · 18 мин чтения

Как установить библиотеку Arduino: Менеджер библиотек, ZIP и вручную

Как пошагово установить библиотеку Arduino: Менеджер библиотек, установка из .ZIP и вручную, смена версий и исправление ошибки No such file or directory.

Установить библиотеку Arduino — значит добавить в Arduino IDE готовый пакет кода, чтобы использовать в скетче датчик, дисплей или модуль, и сделать это можно тремя способами: через Менеджер библиотек (самый простой и рекомендуемый), добавив в IDE скачанный файл .ZIP или вручную скопировав папку библиотеки в папку libraries в папке скетчей. После установки пишешь #include <LibraryName.h> в начале скетча, и все функции библиотеки готовы к работе. Правильная библиотека ставится за минуту; неправильная библиотека или неправильная версия могут обернуться часами поиска ошибок.

В этом руководстве пошагово разберём все три способа в Arduino IDE 2. Затем ты увидишь, как выбрать правильную среди десятков библиотек с похожими названиями, откатиться на старую версию, открыть примеры библиотеки и исправить два самых частых сообщения: ошибку No such file or directory (нет такого файла или каталога) и предупреждение Multiple libraries were found (найдено несколько библиотек). В последних разделах — какие библиотеки работают на ESP32 и Raspberry Pi Pico, какие нужно заменить и как добавлять библиотеки в MicroPython. Если IDE ещё не установлена, начни со статьи Как установить Arduino IDE.

Что такое библиотека Arduino и зачем она нужна?

Библиотека — это набор файлов кода, выполняющих одну конкретную задачу и упакованных так, чтобы другие могли их переиспользовать: как минимум один заголовочный файл (.h), обычно один или несколько файлов исходного кода (.cpp) и почти всегда несколько примеров скетчей. Например, датчик DHT11 передаёт показание по одному проводу 40-битным пакетом с точностью до микросекунды. Вместо того чтобы писать такой тайминг вручную, устанавливаешь библиотеку DHT и пишешь просто dht.readTemperature(); сложную часть берёт на себя библиотека. Не путай библиотеку с пакетом платы: пакет из Менеджера плат учит IDE новому семейству процессоров вроде ESP32 или Pico, а библиотека облегчает работу с конкретным устройством или задачей. Библиотеки Arduino берутся из трёх разных мест:

Тип библиотекиОткуда берётся?Где хранится?Примеры
Встроенные библиотекиIDE устанавливает их сама при первом запускеПапка libraries внутри Arduino15Servo, Stepper, LiquidCrystal, SD, Ethernet, Keyboard, Mouse
Библиотеки пакета платыПриходят вместе с пакетом, установленным из Менеджера платСобственная папка libraries пакета в Arduino15/packagesWire, SPI, EEPROM, SoftwareSerial для Uno; WiFi, WebServer, HTTPClient, Preferences для ESP32
Библиотеки, установленные тобойМенеджер библиотек, .ZIP или ручное копированиеПапка libraries в папке скетчейDHT sensor library, LiquidCrystal I2C, Adafruit SSD1306, ESP32Servo

Библиотеки, которые идут с пакетом платы, например Wire, SPI или библиотеку WiFi для ESP32, устанавливать не нужно: достаточно написать строку #include. Библиотеки, которые ставишь самостоятельно, попадают в папку libraries внутри папки скетчей. Вот расположения по умолчанию для каждой операционной системы:

Операционная системаУстановленные тобой библиотекиArduino15 (встроенные библиотеки и пакеты плат)
WindowsC:\Users\<пользователь>\Documents\Arduino\librariesC:\Users\<пользователь>\AppData\Local\Arduino15
macOS/Users/<пользователь>/Documents/Arduino/libraries/Users/<пользователь>/Library/Arduino15
Linux/home/<пользователь>/Arduino/libraries/home/<пользователь>/.arduino15
Настоящее расположение папки скетчей видно в поле Размещение папки скетчей (Sketchbook location) в меню Файл › Настройки (File › Preferences); папка libraries всегда внутри неё. Если в Windows папка «Документы» синхронизируется с OneDrive, путь может быть C:\Users\<пользователь>\OneDrive\Documents\Arduino. Папки AppData (Windows), Library (macOS) и .arduino15 (Linux) по умолчанию скрыты; включи показ скрытых элементов в проводнике или нажми Cmd + Shift + . в Finder на macOS.

Способ 1: установка библиотеки через Менеджер библиотек

Менеджер библиотек позволяет искать тысячи библиотек в официальном индексе Arduino и устанавливать их одним щелчком. Библиотеки в этом индексе упакованы по фиксированной спецификации, поэтому структура папок никогда не бывает сломанной, нужные им другие библиотеки (зависимости) предлагаются автоматически, а IDE сообщает о выходе новой версии. Так что если нужная библиотека есть в списке, всегда используй этот способ. Для примера установим библиотеку Adafruit для датчиков DHT11 и DHT22:

  1. Открой Arduino IDE 2 и щёлкни по значку с книгами на левой боковой панели. Ту же панель можно открыть через Скетч › Подключить библиотеку › Управлять библиотеками (Sketch › Include Library › Manage Libraries) или сочетанием Ctrl+Shift+I (Cmd+Shift+I на macOS).
  2. Введи в поле поиска DHT sensor library. Через несколько секунд все библиотеки с этими словами в названии или описании появятся списком карточек.
  3. На каждой карточке сверху название и автор библиотеки, ниже краткое описание и ссылка More info («Подробнее»). Ты увидишь несколько библиотек DHT с похожими названиями; выбери карточку DHT sensor library, автор которой — Adafruit.
  4. Список версий внизу карточки показывает самую новую версию. Если нет особой причины, оставь последнюю версию и нажми Установить (Install).
  5. IDE откроет окно Install library dependencies (установка зависимостей библиотеки) и сообщит, что библиотеке нужна ещё одна библиотека — Adafruit Unified Sensor. Нажми Установить все (Install All).
  6. В панели вывода побегут строки загрузки, а справа внизу появится уведомление вроде Successfully installed library DHT sensor library:1.4.7 (библиотека установлена). Теперь на карточке видна установленная версия.

Выбор в окне зависимостей важен. Install without dependencies (установить без зависимостей) ставит только основную библиотеку; тогда при компиляции получишь Adafruit_Sensor.h: No such file or directory, потому что один из файлов библиотеки DHT подключает этот заголовок. Иногда цепочка зависимостей состоит из нескольких звеньев: библиотеке OLED Adafruit SSD1306 нужна Adafruit GFX Library, а ей, в свою очередь, — Adafruit BusIO. Если нажать Установить все, IDE за один раз установит всю цепочку; если только ты не пропускаешь зависимость сознательно, всегда выбирай этот вариант.

Модуль I2C OLED-дисплея 0,96 дюйма
OLED-дисплей 0,96 дюйма: при установке библиотеки Adafruit SSD1306 вместе с ней как зависимости ставятся Adafruit GFX Library и Adafruit BusIO; если одной не хватает, код не скомпилируется.

Когда список становится длинным, жизнь упрощают два фильтра над полем поиска:

ФильтрВариантыДля чего
Тип (Type)Все (All), Обновляемые (Updatable), Установленные (Installed), Arduino, Партнёрские (Partner), Рекомендуемые (Recommended), От сообщества (Contributed), Устаревшие (Retired)Installed показывает, какие библиотеки установлены и в какой версии, Updatable — те, у которых вышла новая версия. Arduino перечисляет официальные библиотеки, Contributed — библиотеки сообщества, а Retired — те, что больше не развиваются.
Тема (Topic)Дисплеи (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: на странице библиотеки проверь дату последнего обновления, открытые проблемы (issues) и поддерживаемые платы. Библиотека, не обновлявшаяся годами, может создать проблемы на ESP32 или Pico.
  • Посмотри историю версий: длинный список версий показывает, что библиотека регулярно развивается. Держись подальше от библиотек с единственной версией и пустым описанием.
  • Сначала попробуй собственный пример библиотеки: после установки скомпилируй один из её примеров. Если пример компилируется, а твой код нет, скорее всего, твой код написан для другой библиотеки.
ДетальЧто искать в Менеджере библиотекРекомендуемая библиотека (автор) и зависимостиСтрока #include
DHT11 / DHT22DHT sensor libraryDHT sensor library (Adafruit) + Adafruit Unified Sensor#include <DHT.h>
I2C LCD 16x2LiquidCrystal I2CLiquidCrystal I2C (Frank de Brabander)#include <LiquidCrystal_I2C.h>
OLED SSD1306Adafruit SSD1306Adafruit SSD1306 + Adafruit GFX Library + Adafruit BusIO#include <Adafruit_SSD1306.h>
DS18B20DallasTemperatureDallasTemperature (Miles Burton) + OneWire#include <DallasTemperature.h>
RFID RC522MFRC522MFRC522 (GithubCommunity)#include <MFRC522.h>
ИК-приёмник и пультIRremoteIRremote (shirriff, z3t0, ArminJo)#include <IRremote.hpp>
WS2812B NeoPixelAdafruit NeoPixelAdafruit NeoPixel (Adafruit)#include <Adafruit_NeoPixel.h>
RTC DS1307 / DS3231RTClibRTClib (Adafruit) + Adafruit BusIO#include <RTClib.h>
Сервопривод (на ESP32)ESP32ServoESP32Servo (Kevin Harrington, John K. Bennett)#include <ESP32Servo.h>
LCD-дисплей 16x2 с I2C-переходником
LCD 16x2 с I2C-переходником: для этого дисплея есть несколько библиотек с почти одинаковыми названиями, и каждая запускает его своей функцией.

Самый известный пример такой путаницы — 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.

Проверяем установку: термометр на двух библиотеках

Самый быстрый способ проверить, что библиотеки установлены правильно, — скомпилировать небольшой скетч, который их использует. Код ниже показывает температуру и влажность с DHT11 на I2C LCD 16x2. Установи из Менеджера библиотек DHT sensor library (с зависимостью) и LiquidCrystal I2C; подключи вывод данных DHT11 к пину 2 Arduino Uno, а пины 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 — из только что установленных библиотек. Если нажать Проверить (Verify) и увидеть в панели вывода строку Sketch uses ... bytes (скетч использует … байт), все библиотеки найдены. Если видишь красное сообщение No such file or directory, переходи к разделу об ошибках ниже. Как работает датчик и чем он отличается от DHT22, разобрано в статье Датчик температуры и влажности DHT11.

Способ 2: добавляем библиотеку из файла .ZIP

Некоторых библиотек нет в Менеджере библиотек: это может быть новая библиотека, ещё не добавленная в индекс, драйвер, который производитель датчика выкладывает на своём сайте, или особая библиотека из книги, курса или от учителя. Обычно их распространяют через GitHub или простым файлом .zip. Arduino IDE может сама распаковать архив и положить его в нужную папку:

  1. На странице библиотеки на GitHub нажми зелёную кнопку Code и выбери Download ZIP. Если на странице есть раздел Releases, надёжнее скачать оттуда zip стабильного выпуска.
  2. Оставь скачанный файл как есть, не распаковывая. IDE сама извлекает zip; папки это меню не принимает.
  3. В Arduino IDE открой Скетч › Подключить библиотеку › Добавить .ZIP библиотеку... (Sketch › Include Library › Add .ZIP Library...).
  4. В открывшемся окне выбери скачанный файл .zip и нажми Открыть (Open).
  5. Если установка прошла успешно, справа внизу появится уведомление Successfully installed library from ... archive (библиотека установлена из архива). Если библиотека с таким именем уже есть, IDE спросит, перезаписать ли её; подтверди, если хочешь заменить установленную версию новой.
  6. Проверь, что библиотека появилась: найди её имя в Файл › Примеры › Примеры из пользовательских библиотек (File › Examples › Examples from Custom Libraries).
Иногда IDE отказывается принимать zip-файл. Ошибка archive is not valid: multiple files found in zip file top level означает, что на верхнем уровне архива несколько файлов или папок вместо одной папки библиотеки; обычно это комплект проекта, где несколько библиотек, код и документы. Ошибка library not valid означает, что в корне папки или в её подпапке src нет заголовочного файла, то есть настоящая библиотека застряла на уровень глубже. В обоих случаях распакуй архив, найди внутри папку библиотеки и скопируй её вручную следующим способом.

Способ 3: копируем библиотеку в папку libraries вручную

Ручная установка пригодится в школьном кабинете без интернета, для папки с библиотекой, которую друг принёс на флешке, или для zip-файла, который IDE отвергает. Нужно лишь положить папку библиотеки в правильное место и с правильной структурой:

  1. Закрой Arduino IDE. Список библиотек она сканирует при запуске, поэтому может не увидеть папки, скопированные во время работы.
  2. Распакуй файл и найди папку, в которой есть файл library.properties или файл .h библиотеки. Это корневая папка библиотеки.
  3. Скопируй эту папку в папку libraries в папке скетчей (в Windows обычно Documents\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 (подпапка src)Правильно: современная структура, IDE её находит
libraries/DHT-master/DHT-sensor-library-master/DHT.h (лишняя папка)Неправильно: лишний уровень папок, IDE не находит библиотеку
libraries/DHT.h (файл без папки)Неправильно: каждая библиотека должна лежать в своей папке
libraries/My Library/ (с пробелом)Рискованно: пробелы и символы с диакритикой нарушают правила имён и могут вызвать проблемы при сборке
Папка установки IDE (например, Program Files)Неправильно: Arduino IDE 2 никогда не ищет там библиотеки; в старой IDE 1.8 они могли удалиться при обновлении или удалении IDE
Если библиотека нужна только в одном проекте и должна путешествовать вместе с ним, когда делишься проектом, создай внутри папки скетча папку src и положи файлы библиотеки туда (например, src/MyLib/MyLib.h). Тогда библиотека подключается не угловыми скобками, а кавычками с путём: #include "src/MyLib/MyLib.h". IDE компилирует папку src вместе со скетчем, так что ничего не нужно устанавливать в папку libraries.

Смена версии библиотеки: обновление и откат

Библиотеки со временем развиваются, и при крупной смене версии некоторые функции могут переименоваться или работать иначе. Если найденный в интернете пример написан под версию многолетней давности, он может не скомпилироваться с последней версией или скомпилироваться и работать неправильно. В таком случае либо возвращаешься к версии, для которой написан код, либо адаптируешь код к новой версии. Менеджер библиотек переключает версии в несколько щелчков:

  1. Найди библиотеку по имени в Менеджере библиотек или поставь фильтр Тип (Type) в Installed. На карточке видна установленная версия.
  2. Открой список версий внизу карточки. Все опубликованные версии библиотеки перечислены в разделе Other Versions (другие версии).
  3. Выбери нужную версию и нажми Установить. IDE удалит старую версию и установит выбранную; в папке libraries у библиотеки может быть только одна версия.
  4. При запуске IDE иногда показывает уведомление Updates are available for some of your libraries. (для некоторых библиотек есть обновления). Прежде чем обновлять всё оттуда разом, запиши, на какие версии опираются твои работающие проекты: массовое обновление может сразу сменить старшую версию у многих библиотек.
  5. Чтобы удалить библиотеку полностью, наведи курсор на её карточку и нажми Remove («Удалить»); IDE попросит подтверждение и удалит папку из libraries.
БиблиотекаСтарый кодНовый кодПризнак несовпадения
IRremoteВерсия 2.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 компилирует старые классы с предупреждениями deprecated; код для 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 и выводит версию библиотеки в монитор порта:

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}

При таком подходе, когда делишься кодом с одноклассниками или в интернете, тот, у кого стоит неправильная версия, вместо непонятных ошибок увидит одну строку с подсказкой, что делать. Если нравится командная строка, конкретную версию можно установить прямо командой 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 ищет имена заголовков буква в букву, так что это не работает и в Windows, и в macOSПиши строку #include точно так, как называется файл в библиотеке
Библиотека вроде бы установлена, но файл не находитсяЛишний уровень папок после ручного копирования или другая папка скетчей, чем та, что использует IDE (OneDrive)Проверь структуру папок и размещение папки скетчей в настройках
Прокрути панель вывода вверх, чтобы увидеть сообщение об ошибке целиком; настоящая причина обычно в первой красной строке. Путь к файлу в этой строке показывает, какой файл запросил недостающий заголовок: если путь заканчивается на DHT_U.h, а в сообщении Adafruit_Sensor.h, недостающий файл нужен библиотеке DHT, а не твоему коду. Об опечатках, пропущенных точках с запятой и других ошибках компилятора вроде was not declared in this scope читай в статье Ошибки компиляции Arduino.

Что означает предупреждение Multiple libraries were found?

Это сообщение появляется, когда строку #include в коде может удовлетворить больше одной библиотеки. Например, если в папке «Документы» лежит старая библиотека Servo из прошлого проекта, вместе со встроенной в IDE библиотекой Servo получается два кандидата, и в выводе появляется Multiple libraries were found for "Servo.h", а затем Used: C:\Users\<пользователь>\Documents\Arduino\libraries\Servo и Not used: C:\Users\<пользователь>\AppData\Local\Arduino15\libraries\Servo. Это не ошибка, а информация; сборка продолжается. Проблема только тогда, когда в строке Used (используется) не та библиотека, которая нужна. IDE выбирает примерно в таком порядке:

ПорядокЧто проверяет IDEПример
1Совместимость архитектурыНа ESP32 библиотека, у которой в library.properties указано esp32 или *, предпочтительнее той, где указано только avr
2Совпадение имениДля Servo.h папка с именем ровно Servo побеждает папки Servo-master или MyServo
3Оптимизация под конкретную платуБиблиотека, явно указывающая архитектуру платы (например, architectures=esp32), важнее той, где указано только *
4РасположениеПапка libraries в папке скетчей идёт раньше библиотек пакета платы, а те — раньше встроенных библиотек IDE
5Последнее средствоЕсли всё остальное равно, выбирается библиотека, чьё имя ближе всего к имени подключаемого файла
  • Прочитай строку Used: используется та папка, которую ты ожидаешь? Если да, ничего делать не нужно; сообщение можно игнорировать.
  • Убери лишнюю копию: если выбрана не та библиотека, найди её в Менеджере библиотек и нажми Remove или удали её папку из папки libraries в папке скетчей, закрыв IDE.
  • Осторожно с остатками старой IDE: старые библиотеки, скопированные вручную во времена Arduino IDE 1.8, лежат в папке «Документы» и благодаря приоритету расположения перекрывают актуальные встроенные библиотеки IDE.
  • Не держи две копии одной библиотеки: если в папке libraries две копии вроде IRremote и IRremote-master, Менеджер библиотек не может обновить эту библиотеку и просит удалить дубликаты вручную.
  • Сделай резервную копию перед удалением: вместо удаления папки сначала временно перенеси её на рабочий стол; если всё работает, удалишь потом.
Не трогай вручную подпапку packages в Arduino15 и встроенные библиотеки. Библиотеки вроде Wire, SPI или WiFi там — часть пакета платы; если их удалить, для этой платы ничего не будет компилироваться, и пакет придётся переустанавливать из Менеджера плат. Мешающая копия почти всегда находится в папке libraries твоей собственной папки скетчей.

Открываем примеры библиотеки и добавляем библиотеку в код

Быстрее всего изучать библиотеку по её примерам скетчей. Примеры приходят вместе с установленной версией, поэтому, в отличие от кода из интернета, всегда ей соответствуют. Меню Файл › Примеры строится для выбранной платы и состоит из таких разделов:

  • Встроенные примеры: базовые примеры IDE, например 01.Basics и 02.Digital, где живёт Blink.
  • Раздел с названием платы (например, Examples for Arduino Uno): примеры библиотек, которые идут с IDE и с пакетом выбранной платы. Если выбрана Uno, здесь будут Servo, EEPROM и SoftwareSerial; если ESP32 — WiFi, WebServer и Preferences.
  • Примеры из пользовательских библиотек (Examples from Custom Libraries): примеры из библиотек, установленных тобой, например DHT sensor library › DHTtester.

До примеров установленной библиотеки можно добраться и через меню с тремя точками рядом с её карточкой в Менеджере библиотек. Пример открывается в новом окне; если изменить его и сохранить, IDE попросит новое имя и место, потому что файлы примеров в папке библиотеки хранятся только для чтения. Чтобы добавить библиотеку в собственный скетч, просто щёлкни по её имени в меню Скетч › Подключить библиотеку: IDE впишет нужные строки #include в начало кода. Некоторые библиотеки содержат несколько заголовочных файлов, поэтому это меню может добавить несколько строк; неиспользуемые можно удалить.

Если примеры библиотеки не появляются в меню, сначала проверь выбор платы: список примеров строится для выбранной платы, и примеры библиотек, которые не поддерживают архитектуру твоей платы, могут не отображаться. Если библиотека скопирована вручную, перезапусти IDE. Если структура папок неправильная (лишний уровень), библиотека и её примеры вообще невидимы.

Совместимость библиотек на ESP32

Отладочная плата ESP32
ESP32: большинство библиотек Arduino работают, но библиотеки, напрямую обращающиеся к таймерам и регистрам Uno, заменяются аналогами для ESP32.

Поскольку ESP32 тоже программируется в Arduino IDE, большинство библиотек, особенно для датчиков и дисплеев, работающих по I2C, SPI или одному проводу, работают на ESP32 без изменений. Проблемы создают библиотеки, напрямую трогающие таймеры и регистры процессора ATmega328P на Arduino Uno. Если IDE не видит архитектуру ESP32 в файле library.properties библиотеки, в начале сборки она выводит предупреждение: 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) (библиотека заявляет поддержку только avr и может быть несовместима с текущей платой на esp32). Это только предупреждение: LiquidCrystal I2C использует лишь библиотеку Wire, так что на ESP32 она отлично работает. А вот библиотека Servo сознательно останавливает сборку сообщением #error, которое начинается с This library only supports boards with an AVR, SAM, SAMD, NRF52. И не устанавливай из Менеджера библиотек библиотеки WiFi, WebServer, HTTPClient, Preferences и BluetoothSerial, которые идут с пакетом платы ESP32: другие библиотеки с такими же именами только создают путаницу.

Что используешь на UnoЧто использовать на ESP32Почему?
ServoESP32Servo (Менеджер библиотек)Библиотека Servo не поддерживает ESP32 и останавливается с #error
SoftwareSerialSerial1, Serial2 (аппаратный UART) или EspSoftwareSerialSoftwareSerial относится к пакету AVR; у ESP32 и так три аппаратных UART
EEPROMPreferences (идёт с пакетом платы)На ESP32 EEPROM эмулируется во флеш-памяти; Preferences надёжнее и проще хранит данные «ключ-значение»
TimerOne, MsTimer2Ticker (идёт с пакетом платы)Библиотеки, обращающиеся к регистрам таймеров AVR, на ESP32 не компилируются

Если хочешь использовать один скетч на Uno, ESP32 и Pico, нужную библиотеку для каждой платы можно выбрать макросами архитектуры, которые определяют пакеты плат. Пакет ESP32 определяет ARDUINO_ARCH_ESP32, пакет arduino-pico для Pico — ARDUINO_ARCH_RP2040, а платы AVR вроде Uno и Nano — ARDUINO_ARCH_AVR. Скетч с сервоприводом ниже компилируется на всех трёх платах; для 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 важно ещё, чтобы версия библиотеки соответствовала версии пакета платы. В серии 3.x пакета платы ESP32 изменились функции PWM (LEDC): ledcSetup() и ledcAttachPin() удалены и заменены на ledcAttach(). Поэтому версии библиотек и примеры со старыми функциями на 3.x падают с ошибкой 'ledcSetup' was not declared in this scope. Актуальные версии ESP32Servo написаны под пакет платы 3.x. Решение — либо перейти на актуальную версию библиотеки, либо, если нужно собрать старый проект без изменений, откатить пакет esp32 в Менеджере плат до 2.0.17, последнего выпуска 2.x. Пины платы и первый проект с Wi-Fi — в статье Что такое ESP32?, а подключение и питание сервопривода — в статье Что такое сервопривод?

Библиотеки на Raspberry Pi Pico: Arduino IDE и MicroPython

Если программировать Pico в Arduino IDE (пакет плат Raspberry Pi Pico/RP2040/RP2350 от Earle F. Philhower), библиотеки устанавливаются так же, как для Uno, и попадают в ту же папку libraries. Имя архитектуры этого пакета — rp2040; чип RP2350 на Pico 2 использует то же имя. Wire, SPI, Servo, EEPROM и SoftwareSerial на основе PIO входят в пакет платы, а на Pico W готова и библиотека WiFi. Большинство библиотек Adafruit для датчиков и дисплеев на Pico отлично работают; библиотеки, трогающие регистры AVR, не работают и здесь. На Pico EEPROM эмулируется во флеш-памяти, поэтому её запускают через EEPROM.begin(), а изменения сохраняют через EEPROM.commit().

В MicroPython библиотека — это файл .py (или скомпилированный .mpy) в файловой системе Pico, обычно в папке /lib. Модули вроде machine, time, dht, onewire, ds18x20, neopixel и framebuf идут вместе с MicroPython; чтобы увидеть полный список, введи help("modules") в оболочке (Shell) Thonny. Драйвер, которого нет в списке, можно добавить четырьмя способами:

СпособКогда?Как?
Менеджер пакетов ThonnyСамый простой способ, когда Pico подключена по USBИщи в Инструменты › Управлять пакетами (Tools › Manage packages); для ssd1306, например, выбери micropython-ssd1306 и установи. Файл попадёт в папку /lib на Pico
Утилита mpremoteЕсли пользуешься командной строкойНа компьютере команда mpremote mip install ssd1306 скачивает библиотеку из micropython-lib и копирует её на Pico
mip (только Pico W)Pico W подключена к Wi-Fi, компьютер не нуженВыполни import mip и mip.install("ssd1306") прямо на Pico
Ручное копированиеЕсли библиотека — один файл .pyВ панели файлов (Files) Thonny открой папку /lib на Pico, щёлкни правой кнопкой по файлу на компьютере и загрузи его на 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 и затем выводит текст на дисплей. На Pico без Wi-Fi то же самое делается с компьютера через 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 приводят к предупреждению Multiple libraries и к использованию не той версии; удали одну из них.
  • Обновлять всё не глядя: обновление со сменой старшей версии может сломать работающий проект; перед обновлением загляни в примечания к выпуску библиотеки.
  • Символы с диакритикой или пробелы в собственной библиотеке: если пишешь свою библиотеку, используй в именах папок и файлов только базовые латинские буквы, цифры и подчёркивания.
Начиная проект, пиши в комментарии в начале кода название, автора и версию каждой используемой библиотеки, например // DHT sensor library (Adafruit) 1.4.7. Когда через несколько месяцев снова откроешь проект или поделишься им с другом, сразу будет видно, какую версию какой библиотеки ставить. Если код компилируется, но не загружается в плату, дело не в библиотеке; загляни в статью Ошибки загрузки в Arduino.

Когда установка библиотек Arduino освоена, каждый новый датчик и дисплей — дело нескольких минут: найди библиотеку правильного автора в Менеджере библиотек, установи её с зависимостями, сначала попробуй собственный пример библиотеки, а потом переходи к своему коду. В приложении BlueGrays есть проекты с библиотеками: температура и влажность с DHT11, I2C LCD, сервопривод, считыватель RFID-карт, ИК-пульт, светодиоды WS2812B и игра Pong на OLED — со схемами и пошагово объяснённым кодом.

Частые вопросы

Куда устанавливаются библиотеки Arduino?

Библиотеки, установленные через Менеджер библиотек, из файла .ZIP или вручную, попадают в папку libraries в папке скетчей; в Windows это обычно Documents\Arduino\libraries, в Linux — ~/Arduino/libraries. Точное расположение видно в поле «Размещение папки скетчей» (Sketchbook location) в меню «Файл › Настройки». Встроенные библиотеки, идущие с IDE, и библиотеки пакетов плат хранятся отдельно в папке Arduino15.

Почему скачанная ZIP-библиотека не устанавливается в Arduino IDE?

Самая частая причина — в zip несколько папок вместо одной папки библиотеки или библиотека спрятана в подпапке; тогда IDE сообщает «multiple files found in zip file top level» или «library not valid». Распакуй его, найди папку, в которой есть library.properties или файл .h, и скопируй эту папку в libraries вручную. Если архив уже распакован, меню .ZIP папку не примет.

Как удалить библиотеку Arduino?

Найди библиотеку в Менеджере библиотек, наведи курсор на её карточку и нажми Remove; IDE удалит её папку из libraries. Библиотеку, установленную вручную, можно удалить из папки libraries в папке скетчей, закрыв IDE. Библиотеки пакетов плат в папке Arduino15 не трогай.

Как исправить «No such file or directory» в Arduino?

Выясни, к какой библиотеке относится файл .h из сообщения, и установи эту библиотеку из Менеджера библиотек. Если это заголовок, которого нет в твоём коде (например, Adafruit_Sensor.h), не хватает зависимости установленной библиотеки. Если ошибка остаётся, хотя библиотека установлена, проверь регистр букв в строке #include и структуру папки, скопированной вручную.

Можно ли установить библиотеку Arduino без интернета?

Да. Скачай zip-файл библиотеки на другом компьютере с интернетом и перенеси его на флешке. Добавь zip через «Добавить .ZIP библиотеку» (Add .ZIP Library) или скопируй распакованную папку в папку libraries в папке скетчей; не забудь так же, по одной, принести и зависимости библиотеки.

Работают ли библиотеки Arduino на ESP32 и Raspberry Pi Pico?

Большинство библиотек для датчиков и дисплеев, работающих по I2C, SPI или одному проводу, без изменений работают на ESP32 и в Arduino-пакете для Pico. Библиотеки вроде Servo и TimerOne, напрямую обращающиеся к таймерам процессора AVR, на ESP32 заменяются на ESP32Servo и Ticker, а в пакет платы Pico входит своя библиотека Servo. Одно лишь предупреждение «claims to run on avr architecture(s)» не означает, что библиотека не заработает.

Все проекты
Температура и влажность с DHT11
#55Средний

Температура и влажность с DHT11

Насколько тепло в твоей комнате и влажный ли воздух или сухой? Датчик DHT11 измеряет температуру и влажность, а Arduino выводит значения на двухстрочный LCD-экран и обновляет их каждые пару секунд. Ес

4.7(47)
73
LCD-экран с I2C
#32Новичок
Premium

LCD-экран с I2C

Дай своему Arduino собственный экран и заставь его написать первое сообщение. Двухстрочный LCD-экран подключается всего несколькими проводами; в верхней строке появляется приветствие, затем второе соо

4.8(53)
70
Работа с сервоприводом
#35Новичок
Premium

Работа с сервоприводом

Рычаг маленького сервопривода по очереди поворачивается в три положения: до упора в начало, ровно на середину и до упора в конец, задерживаясь на каждой остановке на две секунды. Arduino сообщает мото

4.7(48)
67
Чтение кодов ИК-пульта
#16Новичок
Premium

Чтение кодов ИК-пульта

Каждая кнопка на пульте от телевизора отправляет секретный код светом, которого ты не видишь. ИК-приёмник ловит этот свет, а Arduino выводит на экран компьютера код каждой нажатой кнопки. Узнав эти ко

4.5(39)
55
Чтение значения RFID
#53Новичок
Premium

Чтение значения RFID

В брелоке от подъезда или карте доступа спрятан секретный идентификационный номер, и этот проект его читает. Поднеси карту к считывателю RFID, и Arduino выведет номер карты на экран компьютера. Первый

4.7(47)
61
Работа со светодиодной лентой WS2812B
#69Средний
Premium

Работа со светодиодной лентой WS2812B

Познакомься с умной светодиодной лентой, где каждому огоньку можно задать свой цвет. Arduino сначала зажигает первые пять светодиодов красным, через секунду остальные пять — синим, затем выключает все

4.8(54)
70
Игра в пинг-понг — SSD1306
#86Средний
Premium

Игра в пинг-понг — SSD1306

Мяч, две ракетки и ты: на маленьком OLED-экране ты играешь в настольный теннис — одну из самых первых видеоигр. Две кнопки двигают твою ракетку справа вверх и вниз, а левой ракеткой управляет компьюте

4.5(47)
65
Настройка модуля часов DS1302 RTC
#45Новичок

Настройка модуля часов DS1302 RTC

Ты запускаешь маленький модуль часов, который никогда не забывает время, даже когда Arduino выключена. У модуля своя крошечная батарейка, и после установки часов дата и время каждую секунду выводятся

4.5(23)
31