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

Wire.end()

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

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

Описание

end() деактивирует шину I²C: освобождает выводы SDA и SCL и отключает аппаратный периферийный блок. По сути это операция, обратная Wire.begin(). Если после вызова end() вам снова понадобится шина I²C, достаточно вызвать Wire.begin() — всё заработает как раньше.

Функция входит в состав библиотеки Wire.

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

  • Экономия энергии: отключение шины I²C перед переводом платы в режим сна позволяет снизить потребление тока.
  • Освобождение выводов: если SDA и SCL нужны для другой задачи (например, для программного I²C или другого протокола), Wire.end() корректно отпускает их.
  • Переинициализация с другими параметрами: можно завершить сессию, изменить адрес или скорость и снова запустить шину через Wire.begin().
  • Многозадачные скетчи: в проектах с несколькими устройствами иногда удобно явно завершать работу Wire между сессиями.

Синтаксис

Wire.end()

Параметры

Нет.

Возвращает

Ничего.

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

  • После end() шина I2C недоступна. Любые вызовы Wire.beginTransmission(), Wire.requestFrom() и других функций Wire до повторного Wire.begin() приведут к непредсказуемому поведению.
  • Перед вызовом end() убедитесь, что все текущие передачи завершены: незавершённая транзакция может оставить шину в заблокированном состоянии.
  • Функция может быть недоступна на всех платформах — это не часть оригинального API библиотеки Wire. Если вы пишете переносимый код, проверяйте наличие функции через макрос WIRE_HAS_END: он определён только там, где Wire.end() реально поддерживается.
#ifdef WIRE_HAS_END
  Wire.end();
#endif
  • На некоторых платах после Wire.end() выводы SDA и SCL переходят в режим входа без подтяжки. Если внешние подтягивающие резисторы не установлены, линии могут «плавать» — учитывайте это при проектировании схемы.
  • Если после повторного Wire.begin() устройства на шине не отвечают, проверьте, что подтягивающие резисторы на SDA и SCL на месте и шина не осталась в состоянии ошибки.