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().