Главная chevron_right Функции chevron_right Связь chevron_right Wire.begin()

Wire.begin()

Wire.begin() запускает библиотеку Wire и подключает устройство к шине I²C: без аргументов — как контроллер, с адресом — как периферия.

Полная статья

Описание

begin() запускает библиотеку Wire и подключает плату к шине I²C. В зависимости от того, передан ли адрес, устройство работает либо как контроллер, либо как периферийное устройство. Вызывать эту функцию нужно один раз — обычно в setup().

Эта функция является частью библиотеки Wire.

Синтаксис

  • Wire.begin()
  • Wire.begin(address)

Параметры

  • address (необязательно): 7-битный адрес, по которому данное устройство будет доступно на шине I²C в роли периферии. Допустимые значения — от 8 до 119 (адреса 0–7 и 120–127 зарезервированы). Если параметр не указан, устройство берёт на себя роль контроллера и может инициировать обмен с другими устройствами на шине. Тип данных: int.

Возвращает

Ничего.

Где применяется

  • Подключение датчиков и модулей по I²C — большинство современных датчиков (температуры, давления, акселерометры, дисплеи) общаются по I²C. Плата Arduino выступает контроллером: вызывается Wire.begin() без аргументов, после чего можно отправлять запросы к любому устройству на шине.
  • Несколько Arduino на одной шине — если нужно организовать обмен между несколькими платами, одна становится контроллером (Wire.begin()), остальные — периферийными устройствами с уникальными адресами (Wire.begin(address)).
  • Обработка запросов от контроллера — периферийное устройство регистрирует свой адрес через Wire.begin(address) и затем использует обработчики onReceive() и onRequest() для реакции на входящие команды.

Практические замечания

  • Вызывайте Wire.begin() строго один раз в setup(). Повторный вызов может привести к непредсказуемому поведению шины.
  • Убедитесь, что линии SDA и SCL подтянуты к питанию через резисторы (обычно 4,7 кОм). Без подтяжки шина работать не будет — это самая частая причина, по которой I2C-устройства не отвечают.
  • Адрес периферии должен быть уникальным на шине. Если два устройства имеют одинаковый адрес, данные будут искажены. Адрес можно уточнить в документации на конкретный модуль или найти с помощью I²C-сканера.
  • На большинстве плат Arduino пины SDA и SCL фиксированы: например, на Uno это A4 и A5. На платах с несколькими аппаратными I²C-интерфейсами (Due, Zero и др.) можно использовать объект Wire1 или Wire2 вместо Wire, если он поддерживается конкретной платой.
  • После Wire.begin() скорость шины по умолчанию — 100 кГц (стандартный режим). Если нужна более высокая скорость, используйте Wire.setClock() сразу после Wire.begin().