База знаний · Библиотеки

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 пишет библиотеки для сотен датчиков и экранов, и общие куски давно вынесла в отдельные библиотеки. В вашем скетче их имён нет: их подключает сама библиотека датчика. Поэтому и ошибка приходит из её файла, а не из вашего.

fatal error: Adafruit_Sensor.h: No such file or directoryБиблиотекаAdafruit Unified Sensor — в менеджере ищите по словам«Unified Sensor»Что внутриОдин файл Adafruit_Sensor.h: общий формат показаний длявсех датчиков — температура, влажность, давление,ускорение в одной структуре sensors_event_tКто проситDHT sensor library, Adafruit BME280, BMP280, BMP085,MPU6050, ADXL345, TSL2561, AM2320, BNO055, LSM6DSОткуда ошибкаИз файла библиотеки датчика: у DHT это DHT_U.h, у BME280 —Adafruit_BME280.hПоставьте Adafruit Unified Sensor и соберите заново
Имя файла в ошибке — ключ к библиотеке. Только у Adafruit_GFX.h оно совпадает с названием библиотеки, остальные два приходится знать.

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.7Adafruit Unified Sensor
Adafruit BME280 Library 2.3.0Adafruit Unified Sensor, Adafruit BusIO
Adafruit BMP280 Library 3.0.0Adafruit Unified Sensor, Adafruit BusIO
Adafruit MPU6050 2.2.9Adafruit BusIO, Adafruit Unified Sensor, а ещё Adafruit GFX и SSD1306 — они нужны только примерам с экраном
Adafruit SSD1306 2.5.17Adafruit GFX Library, а той — Adafruit BusIO
Adafruit ST7735 and ST7789 Library 1.11.0Adafruit GFX Library; seesaw и SD — для примеров
Adafruit ILI9341 1.6.3Adafruit GFX Library; STMPE610, TouchScreen, TSC2007 — для примеров с тачскрином
Adafruit PWM Servo Driver Library 3.0.3Adafruit BusIO
Adafruit MLX90614 Library 2.1.7Adafruit BusIO
Adafruit INA219 1.2.3Adafruit 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 всё решается в момент установки. Откройте «Скетч → Подключить библиотеку → Управление библиотеками...» (или нажмите значок с книгами на левой панели), найдите библиотеку датчика и нажмите «Установка». Если в её описании есть зависимости, которых у вас нет, выскочит окно. Перевод в нём корявый, но узнаваемый:

Окно Arduino IDE 2 «Установите зависимости библиотек»: библиотеке Adafruit BME280 Library 2.3.0 нужны Adafruit BusIO и Adafruit Unified Sensor, кнопки «Установка без зависимостей» и «Установить все»
Arduino IDE 2.3.6: при установке Adafruit BME280 Library среда перечисляет обе недостающие библиотеки и ждёт ответа.

Нажимайте «Установить все». Вторая кнопка — как раз тот путь, после которого люди приходят сюда с ошибкой: библиотека встаёт, а её помощницы нет. Если уже нажали — ничего страшного, в том же окне «Управление библиотеками» найдите недостающие по словам «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 байта.

Окно Trema IDE «Перед сборкой: не хватает библиотеки» со строкой #include <Adafruit_BME280.h>, найденной библиотекой Adafruit BME280 Library 2.3.0 и кнопками «Собрать без неё» и «Поставить и собрать»
Trema IDE 1.10.9: окно появляется до сборки, по строке #include. Зависимости приедут вместе с библиотекой, отдельно их не спрашивают.

Если Adafruit BusIO или Unified Sensor уже лежат в папке Arduino IDE на этом же компьютере, окна не будет: программа молча скопирует их к себе и соберёт. А с Motor Shield V2 Trema попадает в ту же ловушку, что и остальные среды: о BusIO описание молчит, окно до сборки о ней не узнает. Сборка упадёт на Adafruit_I2CDevice.h, и откроется второе окно — «Программе не хватает библиотеки» — уже с Adafruit BusIO: программа знает, в какой библиотеке лежит этот файл, хотя в её названии его нет. Та же подсказка есть на карточке ошибки в консоли: «Не хватает библиотеки: Adafruit_I2CDevice.h» и кнопка «Поставить библиотеку и собрать заново».

DHT sensor library 1.4.7 — датчики DHT11 и DHT22Чего не хватитAdafruit_Sensor.h — его просит файл DHT_U.h, который вашскетч не подключал: библиотека собирается целикомЧто доставитьAdafruit Unified SensorArduino IDE 2При установке предложит окно «Установить все»: в описаниибиблиотеки зависимость указанаTrema IDEОкно до сборки «Не хватает библиотеки» предложит «DHTsensor library»; «Поставить и собрать» ставит её вместе сAdafruit Unified Sensor, сборка однаОдна зависимость, и обе среды о ней знают
Тексты ошибок сняты со сборки под Arduino Uno. Версии — те, что лежат в каталоге libraries.trema.ru и в менеджере Arduino IDE в октябре 2026 года.

Если интернета нет, окно не поможет — каталог 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