Блог
Библиотеки ESP32: установка, использование, починка
Установить библиотеку — лёгкая половина; тяжёлая — несовпадение версий, ломающее следующую компиляцию. Где живут библиотеки, как выбрать рабочую и что делать, если пример не собирается.
Как установить библиотеку ESP32 в Arduino?
Library Manager (Sketch → Include Library → Manage Libraries), поиск, установка — большинство библиотек ESP32 там. Ручной путь: скачайте ZIP, Sketch → Include Library → Add .ZIP Library. Одна загвоздка: Library Manager перечисляет всё под все платы, так что фильтруйте по тегам ESP32 или проверяйте, что в репозитории написано arduino-esp32. FAQ по Arduino IDE разбирает структуру папок.
Как использовать библиотеку анимированных GIF на ESP32?
AnimatedGIF от Ларри Бэнка — стандарт де-факто: в паре с TFT_eSPI он проигрывает GIF на распространённых SPI-экранах. GIF раскладывается в сырые кадры, так что RAM важна: кадр 320×240 занимает около 150 КБ, поэтому на чипах с 2 МБ флеша анимация еле дышит, а на платах с PSRAM поёт. На моём ILI9341 240×320 выходило около 15 кадров в секунду — плавно для зацикленной анимации. На странице примеров есть рабочая сборка.
Есть ли библиотека Hardware Serial в ESP32?
Да — HardwareSerial встроена в ядро, установка не нужна. Serial, Serial1 и Serial2 существуют на классическом ESP32; на C3 и S3 наличие Serial1 и Serial2 зависит от числа UART в чипе. «Harware serial» — это опечатка в поиске; встроенная библиотека в любом случае одна и та же.
Почему библиотека компилируется на одной плате, но не на другой?
Конфиг, специфичный для платы: пины в #define, наличие PSRAM, размер флеша. Многие библиотеки ESP32 предполагают WROOM-32 с 4 МБ флеша и жёстко прописывают пины, которые платы S3 разводят иначе. Прочитайте README библиотеки до таблицы плат; если в ней перечислены платы, ваша должна быть в списке.
Библиотека установлена, но не находится?
Перезапустите IDE, затем проверьте папку скетчбука: File → Preferences показывает её, а пользовательские библиотеки живут в <sketchbook>/libraries. Два частых провала: ZIP распаковался во вложенную папку (Arduino хочет .h на один уровень вглубь) или IDE закэшировала битую копию — удалите и поставьте заново. В базе знаний есть пошаговый разбор со скриншотами.
Обновление ядра сломало библиотеку — что делать?
Переход arduino-esp32 с 2.x на 3.x переименовал API; библиотеки, завязанные на старые имена, падают с непонятными ошибками. Починки по порядку: обновите библиотеку, прочитайте её changelog или зафиксируйте ядро в Boards Manager на версии, которую называет библиотека.
Встроенные и сторонние библиотеки — в чём разница?
Встроенные — это то, что поставляет ядро: WiFi.h, HardwareSerial, SPI, Wire. Сторонние — внешние репозитории: датчики, дисплеи, сервисы. Встроенные обновляются вместе с ядром; сторонние живут по своему графику — именно поэтому так важна фиксация версий.
Две библиотеки определяют одну функцию — конфликт?
Да, и линковщик либо молча выбирает одну, либо падает с ошибкой. C++ вам не помешает; результат — монетка, какая будет вызвана. Найдите дубликат по сообщению об ошибке, затем удалите одну библиотеку или используйте её namespace, если он есть. Я однажды наступил на это с двумя DHT-библиотеками; починилось удалением той, которой не пользовался.
Как понять, какая библиотека нужна скетчу?
Прочитайте строки #include и поищите каждое имя в Library Manager — Adafruit BMP280, U8g2, что угодно. README или шапка примера обычно называют предпочтительный форк автора, что важно для переименованных библиотек. Библиотека, у которой issues реально закрываются, — та, что работает.
Можно ли написать свою библиотеку для ESP32?
Да — папка с .h, .cpp и library.properties внутри <sketchbook>/libraries и есть библиотека. Экспортируйте используемый API, держите детали железа в конфиге заголовка — и библиотека ESP32 это просто Arduino-библиотека с #ifdef-ами под ESP32-заголовки.
Проекты по этой теме запускаются прямо в бесплатном симуляторе sensbench: схема уже собрана, прошивка включена — без аккаунта и установки.