Библиотеки Arduino: где брать и как ставить
Библиотека — это чужой код, который берёт на себя разговор с конкретной железкой. Вместо того чтобы вручную разбирать импульсы датчика, вы пишете dht.readTemperature() и получаете число. Почти к любому модулю такая библиотека уже написана.
Устанавливать их можно тремя способами, и выбор зависит от того, откуда библиотека взялась.
Способ первый: через менеджер библиотек
Основной и самый безопасный. Среда сама скачает нужную версию, положит куда надо и предложит поставить зависимости.
- 1
Откройте менеджер
В версии 1.8 это «Скетч → Подключить библиотеку → Управлять библиотеками». В версии 2.x — иконка книжек на левой панели.
- 2
Найдите по названию
Вводите название модуля или библиотеки: «DHT», «MFRC522», «LiquidCrystal I2C». В списке смотрите на автора — у популярных железок бывает по пять разных библиотек от разных людей.
- 3
Нажмите «Установить»
Если библиотека тянет за собой другие, среда спросит — соглашайтесь. После установки она сразу появится в примерах: «Файл → Примеры».
Способ второй: ZIP-архив
Так ставят библиотеки, которых нет в менеджере: скачанные с GitHub или приложенные продавцом модуля. На странице проекта на GitHub нажмите зелёную кнопку «Code» и выберите «Download ZIP». Затем в среде: «Скетч → Подключить библиотеку → Добавить .ZIP библиотеку».
Важно: архив нужен целиком, распаковывать его заранее не надо. Среда сама разберётся со структурой папок.
Способ третий: положить папку руками
Запасной вариант, когда архив собран неправильно и среда его не принимает. Библиотеки лежат в папке Документы/Arduino/libraries. Распакуйте туда папку с библиотекой так, чтобы файлы .h и .cpp оказались прямо внутри неё, а не ещё в одной вложенной папке. После этого среду надо перезапустить — она сканирует папку только при старте.
Что такое Arduino.h
Этот файл ищут отдельно и часто. Разберём, потому что путаница здесь типична.
Arduino.h — не библиотека, которую надо где-то скачивать. Это заголовочный файл самой платформы, где объявлены все базовые команды: digitalWrite, delay, analogRead. Он уже установлен вместе со средой.
В обычном скетче его подключать не нужно — среда делает это за вас автоматически. Строка #include <Arduino.h> нужна только в двух случаях: если вы пишете собственную библиотеку в отдельных файлах или если работаете не в Arduino IDE, а в PlatformIO — там автоматики нет.
Если компилятор жалуется именно на Arduino.h, дело почти всегда не в файле, а в том, что не выбрана плата: «Инструменты → Плата». Без выбранной платы среда не знает, где искать платформу.
Ошибка «no such file or directory»
Самое частое сообщение при работе с чужими скетчами. Компилятор нашёл строку #include, но файла у вас нет. Причины по убыванию частоты:
Библиотека просто не установлена
Скопировали скетч из интернета, а библиотеку поставить забыли. Посмотрите на имя в кавычках или угловых скобках и найдите его в менеджере.
Установлена, но среда не перезапущена
Если папку клали руками, среда её ещё не видит. Перезапуск решает.
Лишняя вложенная папка
Распаковали архив, и получилось libraries/DHT-master/DHT-master/DHT.h вместо libraries/DHT/DHT.h. Среда ищет файлы на один уровень вглубь и дальше не смотрит.
Библиотека для другой платы
Некоторые библиотеки написаны только под ESP32 или только под AVR. Компилятор найдёт файл, но упадёт дальше — на командах, которых нет у вашего процессора.
Две библиотеки с одинаковым именем
Отдельная беда, которая проявляется странно: скетч перестаёт компилироваться после установки новой библиотеки, хотя раньше работал. Так бывает, когда две библиотеки объявляют файл с одним и тем же именем — например, обе кладут LiquidCrystal_I2C.h. Среда выберет одну, и не факт, что нужную.
Лечится удалением лишней из папки libraries. Понять, какую именно взял компилятор, можно, включив подробный вывод при компиляции в настройках — он напечатает полный путь к каждому файлу.