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

Зависимости: библиотеки, которым нужны библиотеки

Почему «поставил одну — установились три» — это правильно, и как Trema IDE делает это сама.

Ставили библиотеку датчика, а в списке установленных появились три? Это не сбой, а зависимости: библиотеки, как и люди, опираются на работу друг друга. Trema IDE разруливает эти связи сама — но полезно понимать, что происходит.

Почему библиотекам нужны библиотеки

Пример из жизни: библиотека датчика давления общается с ним по шине I²C. Вместо того чтобы писать работу с шиной заново, автор подключает стандартную библиотеку Wire — и его библиотека теперь «зависит» от неё. Это правильная инженерия: меньше дублирования, меньше ошибок. Но для пользователя старых сред это означало квест: поставил одно — сборка требует другое.

Как это работает в Trema IDE

Каталог libraries.trema.ru знает связи между библиотеками. Ставите библиотеку — программа проверяет её зависимости и доставляет недостающие автоматически, тем же защищённым способом с зеркала. Вы просто получаете работающий комплект: никакого квеста.

Trema IDE сама предлагает установить недостающие библиотеки вместе с зависимостями
Недостающее — включая зависимости — программа предлагает и ставит сама.

Классика жанра: Wire.h

Самый частый «скрытый» участник — библиотека Wire (шина I²C): её требуют многие библиотеки датчиков. Если чужой скетч ругается на Wire.h, а вы «ничего такого не ставили» — теперь вы знаете, откуда это: одна из ваших библиотек ожидает Wire. Trema IDE такие случаи закрывает автоматически, но при ручной установке из ZIP зависимость может остаться на вашей совести — просто доставьте её из каталога.

Так выглядит работа с датчиком на шине I2C. Первая строка — та самая зависимость: без Wire.h код не соберётся, даже если сам датчик подключён идеально:

#include <Wire.h>  // без этой строки библиотека датчика не соберётся

const byte SENSOR = 0x76;  // типовой адрес датчика на шине I2C

void setup() {
  Wire.begin();
  Serial.begin(9600);

  // Спрашиваем у датчика его номер модели — это первый признак,
  // что связь есть и провода подключены правильно.
  Wire.beginTransmission(SENSOR);
  Wire.write(0xD0);
  Wire.endTransmission();

  Wire.requestFrom(SENSOR, (byte)1);
  if (Wire.available()) {
    Serial.print("Датчик ответил, код модели: 0x");
    Serial.println(Wire.read(), HEX);
  } else {
    Serial.println("Датчик молчит — проверьте адрес и провода");
  }
}

void loop() {
}

Что запомнить

  • Несколько библиотек после одной установки — норма, а не мусор: не удаляйте «лишние», они кому-то нужны.
  • При удалении библиотеки подумайте, не пользуется ли ей другая (см. «Удаление и восстановление»).
  • Ошибки про отсутствующие файлы «.h» — почти всегда про библиотеки: разбор в статье «Библиотека не найдена».

Обновлено: 19 июля 2026