Библиотеки Arduino: где брать и как ставить
Библиотека — это чужой код, который берёт на себя разговор с конкретной железкой. Вместо того чтобы вручную разбирать импульсы датчика, вы пишете dht.readTemperature() и получаете число. Почти к любому модулю такая библиотека уже написана.
Устанавливать их можно тремя способами, и выбор зависит от того, откуда библиотека взялась.
Справочник: методы и примеры по каждой библиотеке
Страница на библиотеку — таблица методов с параметрами, готовый пример и то, на чём обычно спотыкаются. Держите открытой рядом со скетчем, чтобы не лазить в исходники.
- ServoУправляет сервоприводами: задаёт угол, библиотека сама формирует нужные импульсы.
- WireШина I2C: два провода, десятки устройств с разными адресами. Сканер адресов, чтение регистров, связь двух плат.
- LiquidCrystalСимвольные дисплеи 1602 и 2004 на контроллере HD44780, подключённые напрямую шестью проводами.
- LiquidCrystal I2CТе же дисплеи 1602 и 2004, но через переходник I2C на PCF8574: два провода вместо шести.
- FastLEDАдресные ленты WS2812B, WS2811, APA102 и десятки других: цвета, палитры, эффекты, ограничение мощности.
- Adafruit NeoPixelПростая библиотека для лент WS2812B и SK6812: задать цвет пикселя, показать. Меньше возможностей, чем у FastLED, зато меньше памяти.
- DHT sensor libraryДатчики температуры и влажности DHT11 и DHT22: два числа за один вызов, без разбора однопроводного протокола.
- OneWire и DallasTemperatureТермометры DS18B20: несколько датчиков на одном проводе, у каждого свой адрес.
- SPIБыстрая четырёхпроводная шина для карт памяти, дисплеев, радиомодулей и RFID. Обычно работает внутри других библиотек.
- EEPROMПамять, которая переживает выключение питания: настройки, счётчики, калибровки. На UNO — 1024 байта.
- SoftwareSerialВторой последовательный порт на любых выводах: для GPS, Bluetooth и GSM-модулей, пока аппаратный занят компьютером.
- StepperСамая простая библиотека шаговых моторов: задать скорость, шагнуть на N шагов. Блокирует скетч на время движения.
- KeypadМатричные клавиатуры 3×4 и 4×4: сканирует строки и столбцы, гасит дребезг, отдаёт нажатый символ.
- IRremoteПриём и отправка команд ИК-пультов: NEC, Sony, Samsung и десятки других протоколов.
- MFRC522Считыватель RC522: читает UID карт и брелоков Mifare, пишет в блоки памяти карты.
- RF24Радиомодули nRF24L01+: связь двух и более плат на 2,4 ГГц пакетами до 32 байт.
- RTClibЧасы реального времени DS3231 и DS1307: точное время после выключения, будильники, дата и день недели.
- Adafruit SSD1306Драйвер OLED-дисплеев 0,96″ и 0,91″ на контроллере SSD1306: подключение, буфер экрана, яркость, прокрутка. Текст и фигуры рисует Adafruit GFX.
- Adafruit GFXГрафика для дисплеев Adafruit и совместимых: текст, линии, фигуры, картинки, шрифты. Работает поверх драйвера экрана — SSD1306, SH1106, ST7735, ILI9341.
- TM1637DisplayЧетырёхразрядный семисегментный индикатор с двоеточием на TM1637: числа, яркость, свои символы. Два провода.
- LedControlМатрицы 8×8 и семисегментные индикаторы на MAX7219: до восьми модулей в цепочке на трёх проводах.
- Adafruit BMP280Датчик давления и температуры BMP280 по I2C или SPI: давление в паскалях, высота над уровнем моря.
Способ первый: через менеджер библиотек
Основной и самый безопасный. Среда сама скачает нужную версию, положит куда надо и предложит поставить зависимости.
- 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 — там автоматики нет. Как устроена своя библиотека — файлы .h и .cpp, папка, пример в меню — в отдельном уроке.
Если компилятор жалуется именно на 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. Понять, какую именно взял компилятор, можно, включив подробный вывод при компиляции в настройках — он напечатает полный путь к каждому файлу.