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

Wire.beginTransmission()

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

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

Описание

beginTransmission() открывает сеанс передачи данных к периферийному I²C-устройству с заданным адресом. Сама по себе функция ничего не отправляет в шину — она лишь подготавливает буфер. Затем нужные байты добавляются в очередь через write(), а фактическая отправка происходит при вызове endTransmission().

Типичная последовательность работы с I²C: вызов beginTransmission() → один или несколько вызовов write() → вызов endTransmission(). Пропуск любого из этих шагов приведёт к тому, что данные либо не попадут на шину, либо устройство не получит корректного пакета.

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

Синтаксис

Wire.beginTransmission(address)

Параметры

  • address: 7-битный адрес периферийного устройства на шине I²C. Адрес обычно указан в документации на микросхему или датчик. Допустимый тип данных: int.

Возвращает

Ничего.

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

  • Чтение и запись данных в датчики с интерфейсом I²C: акселерометры, гироскопы, датчики температуры и давления.
  • Управление дисплеями и расширителями портов по шине I²C.
  • Запись конфигурационных регистров в микросхемах реального времени (RTC).
  • Обмен данными между несколькими платами Arduino, когда одна выступает контроллером, а остальные — периферийными устройствами.

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

  • Адрес устройства — 7-битный, то есть лежит в диапазоне от 0x08 до 0x77. Восьмой бит (бит направления) добавляется автоматически библиотекой Wire — указывать его вручную не нужно.
  • Если у вас несколько устройств на одной шине, каждый сеанс передачи открывается и закрывается отдельно: beginTransmission()write()endTransmission() для каждого адреса.
  • Не забывайте вызывать endTransmission() после записи байтов — без этого данные останутся в буфере и не будут отправлены.
  • Если устройство не отзывается на указанный адрес, endTransmission() вернёт ненулевой код ошибки. Проверяйте это значение при отладке.
  • Убедитесь, что линии SDA и SCL подтянуты к питанию через резисторы (обычно 4,7 кОм для 5 В или 2,2 кОм для 3,3 В) — без подтяжки шина I²C работать не будет.