Оглавление
Wire - отправка и чтение данных по I2C. Наследует класс Stream.
Урок по использованию Wire
Система #
begin #
void begin()void begin(uint8_t address)
Запустить шину. Если указать адрес
address - работать как Slave-устройство, без адреса - как Master-устройство для опроса других устройств. Настройка пинов и подтяжек зависит от ядра, в классических Arduino пины переключаются в INPUT_PULLUP. Для надёжной работы I2C обычно нужны внешние подтягивающие резисторы. Типовая частота по умолчанию - 100 кГц.end #
void end()
Завершить работу
setClock #
void setClock(uint32_t hz)
Установить частоту шины в Гц. Базовая
100000, быстрая 400000. Некоторые устройства поддерживают более низкую и более высокую частоту.onReceive #
void onReceive(void (*)(int data))
Подключить функцию, которая будет вызываться при поступлении данных от master устройства
onRequest #
void onRequest(void (*)(void))
Подключить функцию, которая будет вызываться при запросе данных от master устройства
setWireTimeout #
void setWireTimeout(uint32_t timeout = 25000, bool reset_with_timeout = false)
Установить таймаут
timeout операций в Master-режиме, в микросекундах. reset_with_timeout - перезапустить аппаратный модуль Wire при таймауте. В AVR-реализации вызов также сбрасывает флаг предыдущего таймаута.
Функция поддерживается не во всех Arduino-ядрах
getWireTimeoutFlag #
bool getWireTimeoutFlag()
Прочитать флаг таймаута
clearWireTimeoutFlag #
void clearWireTimeoutFlag()
Сбросить флаг таймаута
Чтение #
read, peek, available #
Наследуется из Stream
requestFrom #
uint8_t requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop = true)
Запросить
quantity байт с устройства по адресу address для дальнейшего чтения. sendStop:
true- отправить сигнал стоп и освободить линиюfalse- отправить сигнал на перезапуск и не отключаться
Вернёт количество принятых байт. Оно может быть меньше quantity, а максимальный размер ограничен буфером конкретной реализации Wire.
Отправка #
write #
size_t write(uint8_t)size_t write(const uint8_t *buffer, size_t size)
Отправить данные
beginTransmission #
void beginTransmission(uint8_t address)
Начать передачу данных устройству с адресом
address. Дальше нужно отправлять данные через write (пишутся в буфер).endTransmission #
uint8_t endTransmission(uint8_t sendStop = true)
Передать данные из буфера устройству, с которым была начата передача в
beginTransmission(). sendStop:
true- отправить сигнал стоп и освободить линиюfalse- отправить сигнал на перезапуск и не отключаться
Вернёт:
0- успешная отправка1- данные не поместились в буфер2- полученNACKпри отправке адреса3- полученNACKпри отправке данных4- другие ошибки5- таймаут в ядрах, где поддерживается такой код
Обработчики onReceive() и onRequest() на многих платформах вызываются из прерывания, поэтому должны быть короткими и не использовать блокирующий код
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)
- Поддержать автора за работу над уроками