База знаний · Библиотеки
Adafruit_Sensor.h и Adafruit BusIO: библиотека стоит, а файл не найден
Сборка просит Adafruit_Sensor.h, Adafruit_I2CDevice.h или Adafruit_GFX.h, которых в скетче нет: какие библиотеки за ними стоят и как их поставить.
Поставили библиотеку для DHT22 или BME280, нажали «Собрать» — и сборка падает на файле Adafruit_Sensor.h, которого в вашем скетче нет. Или на Adafruit_I2CDevice.h, о котором вы вообще впервые слышите. Это не поломка и не кривая установка. Библиотеке датчика нужна ещё одна библиотека, и её автор написал об этом в описании, а не в коде. Ниже — какие три библиотеки Adafruit чаще всего «не находятся», кто их просит и как это чинится в Arduino IDE и в Trema IDE.
Как выглядит ошибка
Самый частый случай — датчик DHT11 или DHT22. В скетче одна строка #include <DHT.h>, библиотека «DHT sensor library» установлена, а сборка пишет:
In file included from C:\Users\Andrey\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.cpp:15:0:
C:\Users\Andrey\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.h:36:10: fatal error: Adafruit_Sensor.h: No such file or directory
#include <Adafruit_Sensor.h>
^~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1Читать это надо так. Главная строка — со словами fatal error: в ней имя файла, которого не нашлось. Строка выше, In file included from, говорит, кто этот файл попросил — здесь это DHT_U.cpp из папки самой библиотеки. А exit status 1 в конце — просто итог. В Arduino IDE 2 под чёрным окном будет ещё строка «Ошибка компиляции: Adafruit_Sensor.h: No such file or directory» — она повторяет имя файла, и обычно её хватает.
Вы не подключали никакой DHT_U — и это нормально. Среда компилирует все файлы библиотеки, а не только те, которые нужны вашему скетчу. DHT_U.cpp — вариант той же библиотеки под общий формат датчиков Adafruit, и ему нужен Adafruit_Sensor.h, даже если вы этим форматом не пользуетесь.
У метеодатчика BME280 файл другой, а картина та же: его просит заголовок библиотеки, который вы подключили первой строкой скетча, и до вашего кода дело не доходит.
In file included from C:\Users\Andrey\Documents\Arduino\sketch_oct22a\sketch_oct22a.ino:1:0:
C:\Users\Andrey\Documents\Arduino\libraries\Adafruit_BME280_Library/Adafruit_BME280.h:26:10: fatal error: Adafruit_I2CDevice.h: No such file or directory
#include <Adafruit_I2CDevice.h>
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1Третий частый случай — экраны. Библиотека Adafruit SSD1306 для OLED без графического ядра падает на Adafruit_GFX.h: No such file or directory — на 42-й строке своего заголовка.
Три библиотеки, которых нет в вашем #include
Adafruit пишет библиотеки для сотен датчиков и экранов, и общие куски давно вынесла в отдельные библиотеки. В вашем скетче их имён нет: их подключает сама библиотека датчика. Поэтому и ошибка приходит из её файла, а не из вашего.
Adafruit Unified Sensor — фактически один заголовок Adafruit_Sensor.h. В нём описан общий формат показаний: что бы ни мерил датчик — температуру, влажность, давление или ускорение, — результат приходит в одной и той же структуре. Поэтому скетч для DHT22 почти без правок работает с BME280. Файл небольшой, но без него не собирается большинство библиотек датчиков Adafruit и «DHT sensor library» заодно.
Adafruit BusIO — работа с шинами I²C и SPI. Раньше каждая библиотека Adafruit общалась с шиной по-своему, и на каждой новой плате что-нибудь отваливалось. В 2019 году этот код собрали в одну библиотеку, и с тех пор на ней стоят все новые библиотеки Adafruit — от датчиков до драйверов моторов. Ловушка в названии: файлов Adafruit_BusIO.h не существует. Библиотека даёт Adafruit_I2CDevice.h, Adafruit_SPIDevice.h и Adafruit_BusIO_Register.h, и по имени файла в ошибке о ней не догадаться.
Adafruit GFX Library — графика для экранов: линии, прямоугольники, шрифты, print(). Библиотека конкретного экрана (SSD1306, ST7735, ILI9341) умеет только слать байты в свой контроллер, рисовать — задача GFX. Сама GFX, в свою очередь, требует BusIO: поэтому после установки GFX сборка может попросить ещё и Adafruit_I2CDevice.h.
Кто кого тянет
Таблица по описаниям самих библиотек — файлу library.properties, строка depends. Версии — те, что сейчас в каталоге libraries.trema.ru и в менеджере Arduino IDE. Пометка «для примеров» значит, что библиотека нужна только демонстрационным скетчам из папки examples, вашему коду — нет.
| Библиотека | Тянет за собой |
|---|---|
| DHT sensor library 1.4.7 | Adafruit Unified Sensor |
| Adafruit BME280 Library 2.3.0 | Adafruit Unified Sensor, Adafruit BusIO |
| Adafruit BMP280 Library 3.0.0 | Adafruit Unified Sensor, Adafruit BusIO |
| Adafruit MPU6050 2.2.9 | Adafruit BusIO, Adafruit Unified Sensor, а ещё Adafruit GFX и SSD1306 — они нужны только примерам с экраном |
| Adafruit SSD1306 2.5.17 | Adafruit GFX Library, а той — Adafruit BusIO |
| Adafruit ST7735 and ST7789 Library 1.11.0 | Adafruit GFX Library; seesaw и SD — для примеров |
| Adafruit ILI9341 1.6.3 | Adafruit GFX Library; STMPE610, TouchScreen, TSC2007 — для примеров с тачскрином |
| Adafruit PWM Servo Driver Library 3.0.3 | Adafruit BusIO |
| Adafruit MLX90614 Library 2.1.7 | Adafruit BusIO |
| Adafruit INA219 1.2.3 | Adafruit BusIO; NeoPixel, GFX и SSD1306 — для примеров |
| Adafruit Motor Shield V2 Library 1.1.4 | В описании — ILI9341, GFX, SSD1306, AccelStepper и Servo для примеров, а единственной по-настоящему нужной BusIO там нет |
| Adafruit NeoPixel 1.15.5 | Ничего: редкий случай самостоятельной библиотеки Adafruit |
Авторы часто вписывают в зависимости всё, что нужно их примерам, — отсюда экран SSD1306 у гироскопа MPU6050. Это не ошибка, просто после установки в списке появятся библиотеки, которые вашему скетчу не понадобятся; удалять их не нужно. Бывает и наоборот — описание неполное, как у Motor Shield V2: о ней ниже.
Arduino IDE 2: окно «Установить все»
В Arduino IDE 2 всё решается в момент установки. Откройте «Скетч → Подключить библиотеку → Управление библиотеками...» (или нажмите значок с книгами на левой панели), найдите библиотеку датчика и нажмите «Установка». Если в её описании есть зависимости, которых у вас нет, выскочит окно. Перевод в нём корявый, но узнаваемый:

Нажимайте «Установить все». Вторая кнопка — как раз тот путь, после которого люди приходят сюда с ошибкой: библиотека встаёт, а её помощницы нет. Если уже нажали — ничего страшного, в том же окне «Управление библиотеками» найдите недостающие по словам «Unified Sensor», «BusIO» или «GFX» и поставьте по одной. Перезапускать среду не нужно, просто соберите заново.
Цепочку среда разворачивает до конца: для SSD1306 окно перечислит и GFX, и BusIO. Но появляется оно только при установке из менеджера и только если автор вписал зависимость в описание — Motor Shield V2 без BusIO так и останется.
Arduino IDE 1.8.19
Такое же окно есть и в старой ветке — с версии 1.8.10, вышедшей в сентябре 2019 года. Выглядит оно так: «The library Adafruit BME280 Library:2.3.0 needs some other library dependencies currently not installed», ниже список, вопрос «Would you like to install also all the missing dependencies?» и три кнопки — «Install all», «Install 'Adafruit BME280 Library' only» и «Cancel». В русской версии 1.8.19 окно остаётся на английском: до него переводчики не дошли. Нужна первая кнопка. Если у вас совсем старая 1.8.5 или 1.6.x — там зависимости не ставились вовсе, и три библиотеки выше придётся поставить руками.
Trema IDE: окно до сборки
В Trema IDE библиотеку не ставят заранее. Нажали «Проверить» — и ещё до компилятора программа смотрит строки #include. Если библиотеки для Adafruit_BME280.h на компьютере нет, а в каталоге она есть, открывается окно «Перед сборкой: не хватает библиотеки» — с той самой строкой из вашего кода и найденным вариантом. Кнопка «Поставить и собрать» ставит библиотеку вместе с тем, что ей нужно по каталогу, и запускает сборку. У BME280 первой приедет Adafruit BusIO, следом сама библиотека; собирается всё с одного захода. Проверил на Trema IDE 1.10.9: от нажатия до «Готово» прошло десять секунд, скетч занял те же 12 494 байта.

Если Adafruit BusIO или Unified Sensor уже лежат в папке Arduino IDE на этом же компьютере, окна не будет: программа молча скопирует их к себе и соберёт. А с Motor Shield V2 Trema попадает в ту же ловушку, что и остальные среды: о BusIO описание молчит, окно до сборки о ней не узнает. Сборка упадёт на Adafruit_I2CDevice.h, и откроется второе окно — «Программе не хватает библиотеки» — уже с Adafruit BusIO: программа знает, в какой библиотеке лежит этот файл, хотя в её названии его нет. Та же подсказка есть на карточке ошибки в консоли: «Не хватает библиотеки: Adafruit_I2CDevice.h» и кнопка «Поставить библиотеку и собрать заново».
Если интернета нет, окно не поможет — каталог libraries.trema.ru недоступен. Тогда действуйте как с ZIP-архивом ниже; в школьном классе библиотеки обычно уже лежат в пакете класса.
Если ставили из ZIP
Архив с GitHub приносит только саму библиотеку: ни один менеджер не читает зависимости из ZIP. Поэтому к архиву датчика скачайте ещё и архивы помощниц — зелёная кнопка «Code» справа вверху, в ней «Download ZIP»; скачается файл с окончанием -master:
- github.com/adafruit/Adafruit_Sensor — это и есть Adafruit Unified Sensor, репозиторий называется короче библиотеки;
- github.com/adafruit/Adafruit_BusIO;
- github.com/adafruit/Adafruit-GFX-Library — только для экранов.
Дальше либо «Скетч → Подключить библиотеку → Добавить .ZIP библиотеку...», либо распакуйте каждый архив в папку Документы\Arduino\libraries. Проверьте одно: файл Adafruit_Sensor.h должен лежать прямо в папке библиотеки, а не в папке внутри папки. Архивы GitHub распаковываются в Adafruit_Sensor-master, и если распаковать его в одноимённую папку, получится Adafruit_Sensor-master\Adafruit_Sensor-master\Adafruit_Sensor.h — среда такую библиотеку не увидит, и ошибка останется той же самой, слово в слово. В Trema IDE архив добавляется в разделе «Библиотеки», зависимости из него тоже не читаются — подробности в статье про ZIP и свои источники.
Поставили — а ошибка та же
- Перечитайте имя файла. У BME280 после установки одной Unified Sensor ошибка не изменится вовсе — она с самого начала была про
Adafruit_I2CDevice.h, то есть про BusIO. А DHT после Unified Sensor соберётся: ему больше ничего не нужно. - Папка в папке. Если внутри папки библиотеки нет файлов .h, а есть ещё одна папка — поднимите её содержимое на уровень выше (случай с ZIP выше).
- Библиотека лежит не там. Arduino IDE ищет библиотеки в папке libraries внутри папки скетчей — её путь показан в «Файл → Параметры...» (в 1.8 — «Настройки»). Архив, распакованный на рабочий стол или в папку с самим скетчем, средой не считается библиотекой.
- Другая плата — та же ошибка. На ESP32, ESP8266, STM32 или Raspberry Pi Pico всё ровно так же: эти три библиотеки не зависят от платы, и ставятся они одинаково.
- Файл есть, но называется иначе. Имя в
#includeпишите буква в букву, как в библиотеке:adafruit_sensor.hсо строчной буквы на Windows иногда прощается, а на Linux и школьных компьютерах с ALT — никогда.
Проверочный скетч: DHT22 в общем формате
Когда Adafruit Unified Sensor уже стоит, им можно и пользоваться — не только терпеть. Вот DHT22 через тот самый общий формат: датчик рассказывает о себе, а показания приходят «событиями». На Uno скетч занимает 7 294 байта; для DHT11 замените DHT22 на DHT11 в строке DHT_Unified dht(2, DHT22);.
#include <Adafruit_Sensor.h> // та самая зависимость: общий формат показаний
#include <DHT.h>
#include <DHT_U.h> // DHT в этом формате — паспорт датчика и события
DHT_Unified dht(2, DHT22); // датчик на выводе 2; для DHT11 — DHT11
void setup() {
Serial.begin(9600);
dht.begin();
// Паспорт датчика описан в Adafruit_Sensor.h: имя, пределы, шаг измерения.
sensor_t sensor;
dht.temperature().getSensor(&sensor);
Serial.print("Датчик: ");
Serial.println(sensor.name);
Serial.print("Температура от ");
Serial.print(sensor.min_value);
Serial.print(" до ");
Serial.print(sensor.max_value);
Serial.print(" C, шаг ");
Serial.println(sensor.resolution);
}
void loop() {
// Событие — тоже тип из Adafruit_Sensor.h: одна структура на все датчики.
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println("Датчик не отвечает: проверьте провода и резистор 10 кОм");
} else {
Serial.print("Температура: ");
Serial.print(event.temperature);
Serial.println(" C");
}
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity)) {
Serial.print("Влажность: ");
Serial.print(event.relative_humidity);
Serial.println(" %");
}
delay(2000); // DHT22 нельзя опрашивать чаще раза в две секунды
}
Структуры sensor_t и sensors_event_t — из Adafruit_Sensor.h. В мониторе порта сначала появится паспорт датчика: «Датчик: DHT22» и «Температура от -40.00 до 125.00 C, шаг 0.10» — так о себе сообщает библиотека, хотя по даташиту датчик рассчитан до 80 °C. Потом каждые две секунды — температура и влажность. Если вместо них «Датчик не отвечает» — проверьте резистор 10 кОм между линией данных и питанием: он нужен голому датчику, у модуля уже распаян.
А так выглядит BME280 — датчик, из-за которого ошибку про BusIO видят чаще всего. Шину I²C за вас ведёт BusIO, а Unified Sensor библиотека подключает сама: в этом скетче её формат даже не нужен, но без неё ничего не соберётся. В скетче ни одной из них не видно. На Uno — 12 494 байта.
#include <Wire.h>
#include <Adafruit_BME280.h> // за ней стоят Adafruit BusIO и Adafruit Unified Sensor
Adafruit_BME280 bme; // подключение по I2C: SDA — A4, SCL — A5 на Uno
void setup() {
Serial.begin(9600);
// Адрес зависит от модуля: 0x76 у большинства синих плат, 0x77 у Adafruit.
if (!bme.begin(0x76) && !bme.begin(0x77)) {
Serial.println("BME280 не найден: проверьте провода и адрес");
while (true) {
}
}
Serial.println("BME280 найден");
}
void loop() {
Serial.print("Температура: ");
Serial.print(bme.readTemperature());
Serial.println(" C");
Serial.print("Влажность: ");
Serial.print(bme.readHumidity());
Serial.println(" %");
// Датчик отдаёт паскали, людям привычнее миллиметры ртутного столба.
Serial.print("Давление: ");
Serial.print(bme.readPressure() / 133.322);
Serial.println(" мм рт. ст.");
Serial.println();
delay(3000);
}
Адрес датчика проверяйте первым делом: синие модули с AliExpress почти всегда сидят на 0x76, оригинальные платы Adafruit — на 0x77, скетч пробует оба. Про саму шину — в статье про I²C.
Что запомнить
- Файл в ошибке просит не ваш скетч, а библиотека: смотрите строку
In file included from. Adafruit_Sensor.h— библиотека Adafruit Unified Sensor,Adafruit_I2CDevice.h— Adafruit BusIO,Adafruit_GFX.h— Adafruit GFX Library.- В Arduino IDE 2 нажимайте «Установить все», в 1.8.19 — «Install all»; в Trema IDE зависимости приедут вместе с библиотекой из каталога.
- Из ZIP зависимости не приходят — три архива выше скачайте отдельно.
- Лишние библиотеки после установки — не мусор, а зависимости; как они устроены, рассказано в статье «Зависимости: библиотеки, которым нужны библиотеки».
Частые вопросы
Где скачать Adafruit_Sensor.h?
Отдельно файл не качают: он входит в библиотеку Adafruit Unified Sensor. В Arduino IDE откройте «Управление библиотеками» и найдите её по словам «Unified Sensor»; в Trema IDE она приедет сама вместе с библиотекой датчика. Архив — github.com/adafruit/Adafruit_Sensor.
Что такое Adafruit BusIO и зачем он нужен?
Библиотека, через которую все новые библиотеки Adafruit общаются с шинами I²C и SPI. Своего файла Adafruit_BusIO.h у неё нет: в ошибках она показывается как Adafruit_I2CDevice.h, Adafruit_SPIDevice.h или Adafruit_BusIO_Register.h. Без неё не собираются BME280, BMP280, MPU6050, PWM Servo Driver, Adafruit GFX и все экраны на нём.
Почему библиотека DHT требует Adafruit_Sensor.h, если я его не подключал?
Среда компилирует все файлы библиотеки, а не только нужные вашему скетчу. В «DHT sensor library» есть файл DHT_U.cpp — вариант под общий формат датчиков Adafruit, и ему нужен Adafruit_Sensor.h. Поэтому ошибка приходит из DHT_U.h, хотя в скетче только DHT.h.
Поставил Adafruit Unified Sensor, а ошибка осталась. Что не так?
Перечитайте имя файла в строке fatal error: у BME280 и BMP280 сборка с самого начала просит Adafruit_I2CDevice.h — это другая библиотека, Adafruit BusIO, и одна Unified Sensor тут не поможет. Если файл тот, что вы ставили, проверьте папку: .h должен лежать прямо в папке библиотеки, а не в папке внутри папки — так бывает после распаковки ZIP с GitHub.
Что выбрать в окне Arduino IDE: «Установить все» или «Установка без зависимостей»?
«Установить все». Вторая кнопка ставит одну библиотеку без помощниц, и сборка падает на Adafruit_Sensor.h или Adafruit_I2CDevice.h. Если уже нажали её, доставьте недостающие через «Управление библиотеками» по одной: Unified Sensor, BusIO, GFX.
Можно ли удалить Adafruit BusIO и Adafruit Unified Sensor, если я ими не пользуюсь?
Нет, пока стоит хоть одна библиотека, которая их просит: DHT, BME280, любой экран на Adafruit GFX. Без них такие библиотеки перестанут собираться. А места они не занимают: архив Unified Sensor — около 15 КБ.
На ESP32 и ESP8266 нужны те же библиотеки?
Да. Adafruit Unified Sensor, BusIO и GFX не зависят от платы, ошибки на ESP32, ESP8266, STM32 и Raspberry Pi Pico выглядят так же, и ставятся библиотеки так же.
Как Trema IDE узнаёт, что библиотеке нужна другая?
Из каталога libraries.trema.ru и из описания самой библиотеки — строки depends в её файле library.properties. Окно «Перед сборкой: не хватает библиотеки» ставит библиотеку вместе с тем, что ей нужно, и собирает один раз. Если автор зависимость не вписал, как у Motor Shield V2, сборка упадёт на Adafruit_I2CDevice.h, и откроется второе окно уже с Adafruit BusIO.
Читайте также
Обновлено: 22 октября 2026
