8-900-374-94-44
[email protected]
Slide Image
Меню

Wire библиотека arduino: Arduino библиотека Wire

Как использовать связь I2C на Arduino? Arduino I2C Tutorial

В этом руководстве мы увидим, как настроить и использовать связь I2C на Arduino. В этом руководстве по Arduino I2C объясняются выводы I2C в Arduino, настройка главного и подчиненного устройств и, наконец, простая демонстрация, в которой две платы Arduino UNO обмениваются данными через I2C.

Схема

Что такое I2C?

I2C или I 2 C — это сокращение от Inter-Integrated Circuit, протокола синхронной последовательной связи, разработанного Phillips для связи между быстрым микроконтроллером и относительно медленными периферийными устройствами (такими как память или датчики) с использованием всего двух проводов. Следовательно, его иногда также называют TWI (двухпроводной интерфейс).

Используя I2C, вы можете передавать данные со скоростью 100 кбит/с (тактовая частота 100 кГц — стандартный режим), 400 кбит/с (тактовая частота 400 кГц — быстрый режим), 1 Мбит/с (тактовая частота 1 МГц — быстрый режим Plus) и 3,4 Мбит/с (тактовая частота 3,4 МГц — режим высокой скорости).

Это может показаться немного, но этого достаточно для сопряжения датчиков, памяти и дисплеев на небольших расстояниях.

Шина I2C

Шина I2C состоит из двух проводов, называемых последовательными данными (SDA) и последовательными часами (SCL). Данные передаются по линии SDA, а линия SCL используется для синхронизации устройств с тактовым сигналом.

Обе эти линии шины являются драйверами с открытым стоком, и поэтому вы должны использовать подтягивающие резисторы, чтобы поддерживать их ВЫСОКИЙ уровень.

Существует два типа устройств, которые подключаются к шине I2C: Master и Slave. Мастера шины отвечают за отправку и получение данных на ведомые устройства и с них. Тактовый сигнал также подается мастером.

Сеть I2C поддерживает несколько мастеров и несколько ведомых (но обычно мы видим одного ведущего и несколько ведомых). Каждое ведомое устройство, подключенное к шине I2C, имеет уникальный 7-битный адрес.

Используя этот адрес, ведущее устройство выбирает конкретное ведомое устройство для передачи данных (отправки или получения), и выбранное ведомое устройство отвечает в соответствии с запросом.

Я сделал подробное руководство по основам I 2 C Связь. Для получения дополнительной информации посетите « Основы связи I2C ».

I2C в Arduino

Arduino поддерживает связь I2C. Если вы посмотрите на распиновку Arduino UNO из руководства « ARDUINO UNO PINOUT », вы увидите, что контакты аналогового входа A4 и A5 имеют альтернативную функцию I2C.

Контакт A4 действует как SDA, а контакт A5 действует как SCL. В R3 оригинальной Arduino UNO есть еще два контакта рядом с выводом 13 цифрового ввода-вывода (рядом с разъемом USB), предназначенными для SDA и SCL.

Если вы используете любую другую плату, вам будет полезна следующая таблица, так как в ней описаны выводы I2C на всех популярных платах Arduino.

Доска Контакты SDA и SCL
Ардуино УНО А4 и А5
Ардуино Нано А4 и А5
Ардуино Мега 2560 20 и 21
Ардуино Микро 2 и 3
Ардуино Леонардо 2 и 3

Микроконтроллер ATmega328P, используемый в Arduino UNO и Nano, поддерживает скорость передачи данных I2C до 400 кГц.

Как использовать интерфейс Arduino I2C?

Чтобы продемонстрировать работу I2C в Arduino, давайте создадим небольшую схему. В этой демонстрации я соединил две платы Arduino UNO для связи по шине I2C. Чтобы сделать все интереснее и на самом деле увидеть связь, я добавил пару светодиодов и потенциометров (по одному набору для каждой платы UNO).

Потенциометры подключены к соответствующим контактам аналогового входа (A0), а светодиоды подключены к контакту цифрового ввода-вывода с ШИМ (контакт 9). Одна плата UNO настроена как ведущая шина I2C, а другая UNO настроена как ведомое устройство.

Когда я настраиваю потенциометр, подключенный к Master Arduino UNO, он захватывает аналоговое показание с POT, преобразует его в цифровое значение (в диапазоне 0–1023), сопоставляет его с правильным значением ШИМ (в диапазон от 0 до 255) и передает это значение на ведомое устройство Arduino по шине I2C.

Подчиненное устройство Arduino, получив значение ШИМ, регулирует яркость своего светодиода. Кроме того, ведомая плата Arduino отправляет значение собственного потенциометра, преобразованное в число ШИМ, в ведущую плату Arduino (по запросу ведущей).

Мастер Arduino затем считывает значение ШИМ с ведомого устройства Arduino и регулирует яркость своего светодиода в соответствии с этим значением. Эта связь продолжается и беспрепятственно повторяется по шине I2C.

Это простая схема для понимания коммуникации Arduino I2C. Вы можете изменить схему, чтобы создать сложную шинную сеть I2C с различными ведомыми устройствами, такими как ЖК-дисплей I2C, микросхема EEPROM, датчик атмосферного давления BMP180 и т. д. (метеостанция с регистрацией данных).

Необходимые компоненты

  • Arduino UNO x 2
  • Потенциометр 10 кОм x 2
  • Светодиод 5 мм x 2
  • Резистор 330 Ом x 2
  • Макет
  • Соединительные провода
  • Блок питания макетной платы (дополнительно)

Принципиальная схема

На следующем изображении показана принципиальная схема для демонстрации Arduino I2C между двумя платами Arduino UNO.

Код

Чтобы запрограммировать периферийное устройство I2C в Arduino, вам необходимо разобраться в библиотеке Wire. Это основная библиотека, которая позволяет вам взаимодействовать с устройствами I2C или TWI через шину I2C (линии SDA и SCL).

Wire Library

Он поставляется с Arduino IDE, и вам не нужно ничего загружать дополнительно. Все, что вам нужно сделать, это включить библиотеку Wire для работы с I2C в Arduino.

#include

Библиотека Wire предоставляет вам 10 функций для разработки приложений, связанных с I2C. Это:

  • Wire.begin()
  • Wire.requestFrom()
  • Wire.beginTransmission()
  • Wire.endTransmission()
  • Wire.write()
  • Провод.доступен()
  • Wire. read()
  • Wire.SetClock()
  • Wire.onReceive()
  • Wire.onRequest()

Теперь давайте подробно рассмотрим некоторые важные функции Wire Library.

Функции библиотеки проводов

Wire.begin()

Используйте эту функцию для запуска связи I2C. Если вы передадите 7-битный адрес устройства в качестве аргумента этой функции, то устройство присоединится к шине I2C как ведомое, иначе оно присоединится как ведущее.

  • Wire.begin() — Мастер
  • Wire.begin(адрес) – Ведомый

Wire.beginTransmission(address)

Используйте эту функцию, чтобы начать передачу данных на ведомое устройство с указанным адресом.

Wire.write()

Как только вы начнете передачу с помощью вышеуказанной функции, вы можете начать отправку фактических данных с помощью функции Wire. write().

Вы также можете использовать эту функцию для записи данных от ведомого устройства к ведущему, когда ведущее устройство использует функцию Wire.RequestFrom().

  • Wire.write(value) — Отправить однобайтовое значение
  • Wire.write(string) — Отправить серию байтов в виде строки
  • Wire.write(data, length) — Отправить массив данных указанной длины

Wire.endTransmission()

Чтобы завершить передачу данных I2C, используйте функцию Wire.endTransmission().

Wire.read()

Используйте эту функцию для чтения байта данных, которые были переданы от ведущего к ведомому или от ведомого к ведущему, когда мастер вызывает функцию Wire.requestFrom().

Wire.requestFrom()

Ведущее устройство I2C использует эту функцию для запроса байтов данных от ведомого устройства. Используйте функцию Wire.read() для получения данных.

  • Wire.requestFrom(адрес, количество) – Запрос количества байтов данных, указанных количеством, от ведомого устройства с адресом, указанным в поле адреса.

Wire.onReceive()

Это функция-обработчик, используемая для определения функции, которая вызывается, когда ведомое устройство получает данные от ведущего устройства.

Wire.onRequest()

Это функция-обработчик, используемая для определения функции, которая вызывается, когда мастер запрашивает данные у ведомого.

Master Code

Используя вышеупомянутые функции, я написал простой код для Master Arduino, чтобы отправить значение PWM, а также запросить байт данных от Slave.

Код ведомого устройства

В коде ведомого устройства Arduino я определил адрес ведомого устройства как 0x14. Это может быть любое значение меньше 128. Важно отметить, что в ArduinoI2C Wire Library I используется 7-битный адрес I2C без бита чтения/записи.

Итак, если у вас есть 8-битный адрес (который включает в себя бит R/W), сдвиньте адрес вправо на 1 и затем используйте его в Wire Library. Библиотека автоматически изменит адрес в зависимости от операции чтения или записи.

Кроме того, убедитесь, что адрес ведомого устройства уникален и никакие два ведомых устройства не должны иметь одинаковый адрес.

Возвращаясь к коду, я объявил две функции «DataReceive» и «DataRequest», которые будут вызываться при получении данных ведомым устройством или при запросе данных от ведомого устройства. Данные, полученные Ведомым в функции DataReceive, содержат значение ШИМ, отправленное Ведущим.

Данные, которые должны быть переданы через функцию DataRequest, представляют собой значение ШИМ от ведомого к ведущему.

Заключение

В этом руководстве демонстрируется простая двусторонняя связь между двумя платами Arduino с использованием связи I2C. Вы узнали о периферийном устройстве Arduino I2C, нескольких важных основах связи I2C, библиотеке проводов, а также о том, как настроить и использовать связь Arduino I2c.

Библиотеки \ Проводка

Следующие библиотеки включены в программное обеспечение Wiring. Есть Основные библиотеки , которые зависят от платформы, и Кросс-платформенные библиотеки , которые не зависят от платформы. Чтобы добавить его в проект, выберите его имя в опции «Импортировать библиотеку…» в меню «Эскиз». Эти библиотеки с открытым исходным кодом; код распространяется с Wiring.

 

EEPROM

Плата ввода/вывода Basic Wiring, внутренняя библиотека управления EEPROM/

EEPROMVar

Библиотека управления переменными EEPROM.

Энкодер

Базовая библиотека управления кодировщиком.

Firmata

Ханса-Кристофа Штайнера и поддерживается Паулем Стоффрегеном. Общий протокол, предназначенный для связи с Wiring из программного обеспечения на хост-компьютере.

LiquidCrystal

Базовая библиотека управления жидкокристаллическим дисплеем (ЖКД) (параллельная связь, 8 бит).

Matrix

Базовая библиотека управления светодиодной матрицей с использованием контроллеров MAX LED Matrix.

НовыйSoftSerial.

Микал Харт. Поддерживает связь между проводкой и внешним оборудованием через программные последовательные порты.

Сервопривод

Майкл Марголис. Библиотека управления серводвигателями.

SoftwareSerial

Поддерживает связь между Wiring и внешним оборудованием через программные последовательные порты.

Проводной

Двухпроводной интерфейс для отправки и получения данных по сети устройств или датчиков.

СПИ

Шина последовательного периферийного интерфейса или шина SPI для отправки и получения данных в режиме ведущий/ведомый.

 

Кнопка

Библиотека аппаратных абстракций для кнопок. Это обеспечивает простой способ обработки кнопок.

Ограничение

Простой способ создания переменных с ограничениями.

FluentPrint

Библиотека, обеспечивающая свободный API для печати.

FSM

Обеспечивает простой способ создания конечных автоматов.

HashMap

Реализация структуры данных Hash Map для платформы Wiring.

Клавиатура

Эта библиотека предоставляет простой интерфейс для использования матричных клавиатур.

LED

Это библиотека аппаратных абстракций для светодиодов. Обеспечьте простой способ обработки светодиодов в коде.

MenuBackend и MenuItem

Обеспечивают простой способ создания меню.

Messenger

Томаса Уэлле Фредерикса. Messenger — это «инструментарий», облегчающий анализ сообщений ASCII. Также на французском языке. Главный сайт.

NMEA

от Maarten Lamers. Библиотека для удобного декодирования данных GPS на оборудовании Wiring и Arduino. Главный сайт.

OSC

Базовая библиотека OSC (Open Sound Control).

Пароль

Библиотека для простой обработки паролей.

Потенциометр

Это библиотека аппаратных абстракций для потенциометров. Предоставьте простой способ изготовления/использования потенциометров.

Планировщик

Обеспечивает простой способ планирования вызовов функций в будущем.

SmoothInterpolate

Упростите плавную интерполяцию от x до y с шагом z (между каждым значением).

Супервизор

Контролирует набор правил, которые автоматически запускают обработчик при нарушении правила.

Sprite

Базовая библиотека обработки спрайтов изображений для использования в анимации со светодиодной матрицей.

Шаговый двигатель

Базовая библиотека управления шаговым двигателем.

TimedAction

Обеспечивает простой способ запуска функций с заданным интервалом.

 

Wiring/Processing

Эта библиотека позволяет управлять платой Wiring I/O из Processing без написания кода в Wiring IDE. Он использует протокол Firmata.

Wiring/OpenFrameworks

Эта библиотека позволяет управлять платой Wiring I/O из Openframeworks без написания кода в Wiring IDE. Он использует протокол Firmata.

WiringLib для обработки

Кристоф Вартманн и Этьен Рибейро Библиотека находится на ранней стадии, но уже полезна для небольших приложений в Processing. Соединяйте датчики и двигатели без необходимости программирования в Wiring, непосредственно в Processing или JAVA!.

 

Дополнительные библиотеки, если они стандартные (стиль библиотек проводки), необходимо загрузить отдельно и поместить в папку «библиотеки» вашего альбома для рисования проводки или следовать инструкциям на соответствующем сайте. Чтобы найти местонахождение альбома для рисования проводки на вашем компьютере, откройте окно «Настройки» в приложении «Связь» и найдите элемент «Местоположение альбома для эскизов» вверху. Скопируйте папку предоставленной библиотеки в папку «libraries» в этом месте. Вам нужно будет создать папку «libraries», если это ваша первая добавленная библиотека . Перейдите по ссылкам ниже для получения дополнительной информации о каждой библиотеке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *