Как установить библиотеку 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 внутри Arduino15 | Servo, Stepper, LiquidCrystal, SD, Ethernet, Keyboard, Mouse |
| Библиотеки пакета платы | Приходят вместе с пакетом, установленным из Менеджера плат | Собственная папка libraries пакета в Arduino15/packages | Wire, 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 (встроенные библиотеки и пакеты плат) |
|---|---|---|
| Windows | C:\Users\<пользователь>\Documents\Arduino\libraries | C:\Users\<пользователь>\AppData\Local\Arduino15 |
| macOS | /Users/<пользователь>/Documents/Arduino/libraries | /Users/<пользователь>/Library/Arduino15 |
| Linux | /home/<пользователь>/Arduino/libraries | /home/<пользователь>/.arduino15 |
Способ 1: установка библиотеки через Менеджер библиотек
Менеджер библиотек позволяет искать тысячи библиотек в официальном индексе Arduino и устанавливать их одним щелчком. Библиотеки в этом индексе упакованы по фиксированной спецификации, поэтому структура папок никогда не бывает сломанной, нужные им другие библиотеки (зависимости) предлагаются автоматически, а IDE сообщает о выходе новой версии. Так что если нужная библиотека есть в списке, всегда используй этот способ. Для примера установим библиотеку Adafruit для датчиков DHT11 и DHT22:
- Открой Arduino IDE 2 и щёлкни по значку с книгами на левой боковой панели. Ту же панель можно открыть через Скетч › Подключить библиотеку › Управлять библиотеками (Sketch › Include Library › Manage Libraries) или сочетанием Ctrl+Shift+I (Cmd+Shift+I на macOS).
- Введи в поле поиска DHT sensor library. Через несколько секунд все библиотеки с этими словами в названии или описании появятся списком карточек.
- На каждой карточке сверху название и автор библиотеки, ниже краткое описание и ссылка More info («Подробнее»). Ты увидишь несколько библиотек DHT с похожими названиями; выбери карточку DHT sensor library, автор которой — Adafruit.
- Список версий внизу карточки показывает самую новую версию. Если нет особой причины, оставь последнюю версию и нажми Установить (Install).
- IDE откроет окно Install library dependencies (установка зависимостей библиотеки) и сообщит, что библиотеке нужна ещё одна библиотека — Adafruit Unified Sensor. Нажми Установить все (Install All).
- В панели вывода побегут строки загрузки, а справа внизу появится уведомление вроде 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 за один раз установит всю цепочку; если только ты не пропускаешь зависимость сознательно, всегда выбирай этот вариант.

Когда список становится длинным, жизнь упрощают два фильтра над полем поиска:
| Фильтр | Варианты | Для чего |
|---|---|---|
| Тип (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 / DHT22 | DHT sensor library | DHT sensor library (Adafruit) + Adafruit Unified Sensor | #include <DHT.h> |
| I2C LCD 16x2 | LiquidCrystal I2C | LiquidCrystal I2C (Frank de Brabander) | #include <LiquidCrystal_I2C.h> |
| OLED SSD1306 | Adafruit SSD1306 | Adafruit SSD1306 + Adafruit GFX Library + Adafruit BusIO | #include <Adafruit_SSD1306.h> |
| DS18B20 | DallasTemperature | DallasTemperature (Miles Burton) + OneWire | #include <DallasTemperature.h> |
| RFID RC522 | 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> |
| RTC DS1307 / DS3231 | 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.
Проверяем установку: термометр на двух библиотеках
Самый быстрый способ проверить, что библиотеки установлены правильно, — скомпилировать небольшой скетч, который их использует. Код ниже показывает температуру и влажность с DHT11 на I2C LCD 16x2. Установи из Менеджера библиотек DHT sensor library (с зависимостью) и LiquidCrystal I2C; подключи вывод данных DHT11 к пину 2 Arduino Uno, а пины 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 — из только что установленных библиотек. Если нажать Проверить (Verify) и увидеть в панели вывода строку Sketch uses ... bytes (скетч использует … байт), все библиотеки найдены. Если видишь красное сообщение No such file or directory, переходи к разделу об ошибках ниже. Как работает датчик и чем он отличается от DHT22, разобрано в статье Датчик температуры и влажности DHT11.
Способ 2: добавляем библиотеку из файла .ZIP
Некоторых библиотек нет в Менеджере библиотек: это может быть новая библиотека, ещё не добавленная в индекс, драйвер, который производитель датчика выкладывает на своём сайте, или особая библиотека из книги, курса или от учителя. Обычно их распространяют через GitHub или простым файлом .zip. Arduino IDE может сама распаковать архив и положить его в нужную папку:
- На странице библиотеки на GitHub нажми зелёную кнопку Code и выбери Download ZIP. Если на странице есть раздел Releases, надёжнее скачать оттуда zip стабильного выпуска.
- Оставь скачанный файл как есть, не распаковывая. IDE сама извлекает zip; папки это меню не принимает.
- В Arduino IDE открой Скетч › Подключить библиотеку › Добавить .ZIP библиотеку... (Sketch › Include Library › Add .ZIP Library...).
- В открывшемся окне выбери скачанный файл .zip и нажми Открыть (Open).
- Если установка прошла успешно, справа внизу появится уведомление Successfully installed library from ... archive (библиотека установлена из архива). Если библиотека с таким именем уже есть, IDE спросит, перезаписать ли её; подтверди, если хочешь заменить установленную версию новой.
- Проверь, что библиотека появилась: найди её имя в Файл › Примеры › Примеры из пользовательских библиотек (File › Examples › Examples from Custom Libraries).
Способ 3: копируем библиотеку в папку libraries вручную
Ручная установка пригодится в школьном кабинете без интернета, для папки с библиотекой, которую друг принёс на флешке, или для zip-файла, который IDE отвергает. Нужно лишь положить папку библиотеки в правильное место и с правильной структурой:
- Закрой Arduino IDE. Список библиотек она сканирует при запуске, поэтому может не увидеть папки, скопированные во время работы.
- Распакуй файл и найди папку, в которой есть файл library.properties или файл .h библиотеки. Это корневая папка библиотеки.
- Скопируй эту папку в папку libraries в папке скетчей (в Windows обычно Documents\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 (подпапка 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 |
Смена версии библиотеки: обновление и откат
Библиотеки со временем развиваются, и при крупной смене версии некоторые функции могут переименоваться или работать иначе. Если найденный в интернете пример написан под версию многолетней давности, он может не скомпилироваться с последней версией или скомпилироваться и работать неправильно. В таком случае либо возвращаешься к версии, для которой написан код, либо адаптируешь код к новой версии. Менеджер библиотек переключает версии в несколько щелчков:
- Найди библиотеку по имени в Менеджере библиотек или поставь фильтр Тип (Type) в Installed. На карточке видна установленная версия.
- Открой список версий внизу карточки. Все опубликованные версии библиотеки перечислены в разделе Other Versions (другие версии).
- Выбери нужную версию и нажми Установить. IDE удалит старую версию и установит выбранную; в папке libraries у библиотеки может быть только одна версия.
- При запуске 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 компилирует старые классы с предупреждениями 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 и выводит версию библиотеки в монитор порта:
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) | Проверь структуру папок и размещение папки скетчей в настройках |
Что означает предупреждение 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, Менеджер библиотек не может обновить эту библиотеку и просит удалить дубликаты вручную.
- Сделай резервную копию перед удалением: вместо удаления папки сначала временно перенеси её на рабочий стол; если всё работает, удалишь потом.
Открываем примеры библиотеки и добавляем библиотеку в код
Быстрее всего изучать библиотеку по её примерам скетчей. Примеры приходят вместе с установленной версией, поэтому, в отличие от кода из интернета, всегда ей соответствуют. Меню Файл › Примеры строится для выбранной платы и состоит из таких разделов:
- Встроенные примеры: базовые примеры 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 в начало кода. Некоторые библиотеки содержат несколько заголовочных файлов, поэтому это меню может добавить несколько строк; неиспользуемые можно удалить.
Совместимость библиотек на 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 | Почему? |
|---|---|---|
| Servo | ESP32Servo (Менеджер библиотек) | Библиотека Servo не поддерживает ESP32 и останавливается с #error |
| SoftwareSerial | Serial1, Serial2 (аппаратный UART) или EspSoftwareSerial | SoftwareSerial относится к пакету AVR; у ESP32 и так три аппаратных UART |
| EEPROM | Preferences (идёт с пакетом платы) | На ESP32 EEPROM эмулируется во флеш-памяти; Preferences надёжнее и проще хранит данные «ключ-значение» |
| TimerOne, MsTimer2 | Ticker (идёт с пакетом платы) | Библиотеки, обращающиеся к регистрам таймеров AVR, на ESP32 не компилируются |
Если хочешь использовать один скетч на Uno, ESP32 и Pico, нужную библиотеку для каждой платы можно выбрать макросами архитектуры, которые определяют пакеты плат. Пакет ESP32 определяет ARDUINO_ARCH_ESP32, пакет arduino-pico для Pico — ARDUINO_ARCH_RP2040, а платы AVR вроде Uno и Nano — ARDUINO_ARCH_AVR. Скетч с сервоприводом ниже компилируется на всех трёх платах; для 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 важно ещё, чтобы версия библиотеки соответствовала версии пакета платы. В серии 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 |
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 и к использованию не той версии; удали одну из них.
- Обновлять всё не глядя: обновление со сменой старшей версии может сломать работающий проект; перед обновлением загляни в примечания к выпуску библиотеки.
- Символы с диакритикой или пробелы в собственной библиотеке: если пишешь свою библиотеку, используй в именах папок и файлов только базовые латинские буквы, цифры и подчёркивания.
Когда установка библиотек 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
Насколько тепло в твоей комнате и влажный ли воздух или сухой? Датчик DHT11 измеряет температуру и влажность, а Arduino выводит значения на двухстрочный LCD-экран и обновляет их каждые пару секунд. Ес

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

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

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

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

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

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

Настройка модуля часов DS1302 RTC
Ты запускаешь маленький модуль часов, который никогда не забывает время, даже когда Arduino выключена. У модуля своя крошечная батарейка, и после установки часов дата и время каждую секунду выводятся
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

