Wire
Библиотека Wire обеспечивает работу с шиной I2C на Arduino — подключайте датчики, дисплеи и модули всего по двум проводам, используя read() и write().
Полная статья
Описание
Библиотека Wire предназначена для работы с шиной I2C — последовательным протоколом, который поддерживается на всех платах Arduino. По двум линиям SDA и SCL к плате подключают датчики, дисплеи, модули памяти и другие компоненты. Подробнее о принципах работы протокола читайте в руководстве Arduino и I2C.
Библиотека наследует интерфейс Stream, благодаря чему совместима с другими библиотеками ввода-вывода. В связи с этим устаревшие функции send() и receive() были заменены на read() и write() — используйте именно их в новом коде.
Чтобы подключить библиотеку к скетчу, добавьте в самое начало файла:
#include <Wire.h>
Пины I2C по умолчанию
Расположение контактов I2C зависит от модели платы. В таблице ниже указаны контакты по умолчанию, а также дополнительные порты I2C, доступные на некоторых платах.
| Плата | I2C по умолчанию | I2C0 | I2C1 | I2C2 | Примечания |
|---|---|---|---|---|---|
| UNO R3, UNO R3 SMD, UNO Mini LE | A4(SDA), A5(SCL) | I2C также доступен на выводах SDA/SCL (цифровой разъем). | |||
| UNO R4 Minima, UNO R4 WiFi, Nano R4 | A4(SDA), A5(SCL) | Qwiic:D27(SDA), D26(SCL) | A4(SDA), A5(SCL) | Используйте Wire.begin() для I2C1 и Wire1.begin() для I2C0 (Qwiic). I2C1 также доступен на выводах SDA/SCL на платах UNO. | |
| UNO WiFi Rev2, Zero | 20(SDA), 21(SCL) | ||||
| Leonardo, Micro, Yún Rev2 | D2(SDA), D3(SCL) | ||||
| Nano boards | A4(SDA), A5(SCL) | ||||
| MKR boards | D11(SDA), D12(SCL) | ||||
| GIGA R1 WiFi | 20(SDA), 21(SCL) | D102(SDA1), D101(SCL1) | D9(SDA2), D8(SCL2) | Используйте Wire1.begin() для I2C1 и Wire2.begin() для I2C2. | |
| Due | 20(SDA), 21(SCL) | D70(SDA1), D71(SCL1) | Используйте Wire1.begin() для I2C1. | ||
| Mega 2560 Rev3 | D20(SDA), D21(SCL) |
Функции
Инициализация
Передатчик контроллера
Приёмник контроллера
Периферийные обратные вызовы
Конфигурация тайм-аута
Практические замечания
- Адресация I2C. Библиотека Wire работает исключительно с 7-битными адресами. Если в документации на компонент или в стороннем примере используется 8-битный адрес, сдвиньте его на один бит вправо — это и будет нужный 7-битный адрес (диапазон 0–127). Адреса 0–7 зарезервированы протоколом, поэтому первый доступный для устройств адрес — 8.
- Подтягивающие резисторы. Линии SDA и SCL требуют подтягивающих резисторов к питанию. На некоторых платах, например Mega 2560, они уже встроены на контактах 20 и 21. Если шина работает нестабильно или устройства не обнаруживаются — в первую очередь проверьте наличие подтяжки.
- Размер буфера. Библиотека Wire выделяет под передачу буфер размером 32 байта. Если за один раз нужно отправить или принять больше — данные, выходящие за этот предел, будут молча отброшены. Разбивайте большие пакеты на части.
- Тайм-ауты. В актуальных версиях библиотеки Wire есть поддержка тайм-аутов, которые предотвращают зависание скетча при проблемах на шине (например, если устройство не отвечает). По умолчанию тайм-ауты отключены, поэтому рекомендуется явно их включать в любом проекте с библиотекой Wire. Подробнее — в описании функции setWireTimeout().
- Типичные ошибки. Если устройство не отвечает, проверьте: правильно ли указан 7-битный адрес, есть ли подтягивающие резисторы, не перепутаны ли SDA и SCL, и не превышает ли размер пакета 32 байта.