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 на месте и шина не осталась в состоянии ошибки.