- Урок 1. Двусторонняя связь между двумя Arduino с использованием I2C.
- Контакты Arduino I2C.
- Соединяем две arduino по шине i2c
- Давайте разберемся с самой удобной коммуникацией физически заложенной в контроллеры Arduino
- Теперь хотелось бы потестировать на сколько действительно хороша шина I2C, и на сколько сложно по ней обмениваться данными между несколькими контроллерами Arduino
- Схема подключения
- Программа контроллера — мастера.
- Программа второго контроллера
- Программа третьего Arduino Nano
- Выводы
- Урок 26.3 Соединяем две arduino по шине I2C
- Преимущества:
- Недостатки:
- Нам понадобится:
- Видео:
- Схема подключения:
- Код программы:
- Алгоритм работы:
- Настройка параметров шины I2C:
- Функции библиотеки iarduino_I2C_connect:
- Соединяем две arduino по шине i2c
- Видео по предыдущей статье.
- Программа мастера выглядит следующим образом
- Программа контроллера — слейва. Arduino i2c несколько устройств
- Выводы
- Преобразователь уровней 5В на 3В двунаправленный 4-канальный
- Шестерня для зубчатого ремня на 60 зубов под ось 5 мм
- Arduino UNO R3 + USB кабель
- Твердотельное реле 240В 2А
- Драйвер шагового двигателя L298N
- 💥 Видео
Видео:Урок 26.3 Соединяем две arduino по шине I2C #iarduinoСкачать
Урок 1. Двусторонняя связь между двумя Arduino с использованием I2C.
При разработке проектов на Arduino часто возникает потребность в увеличении возможности, а пинов не достаточно. Также бывает необходимость объединить несколько работающих узлов для обмена данными, т.е. реализовать двухстороннюю связь между двумя Arduino. Для реализации двусторонней связи между двумя Arduino отлично подойдёт шина I2C.
Интерфейс I 2 C (или по-другому IIC) — это достаточно широко распространённый сетевой последовательный интерфейс, придуманный фирмой Philips и завоевавший популярность относительно высокой скоростью передачи данных, дешевизной и простотой реализации.
Шина I2C синхронная, состоит из двух линий: данных (SDA) и тактов (SCL). При проектировании есть 2 типа устройств: ведущий (master) и ведомый (slave). Инициатором обмена всегда выступает ведущий, обмен между двумя ведомыми невозможен. Всего на одной двухпроводной шине может быть до 127 устройств.
Такты на линии SCL генерирует ведущий (master). Линией SDA могут управлять как мастер, так и ведомый (slave), в зависимости от направления передачи. Единицей обмена информации является пакет, обрамленный уникальными условиями на шине, именуемыми стартовым и стоповым условиями. Мастер в начале каждого пакета передает один байт, где указывает адрес ведомого и направление передачи последующих данных. Данные передаются 8-битными словами. После каждого слова передается один бит подтверждения приема приемной стороной.
Ведущее устройство инициирует связь с ведомым устройством. Для начала разговора требуется адрес ведомого устройства. Подчиненное устройство реагирует на ведущее устройство, когда к нему обращается ведущее устройство.
I 2 C используется во многих приложениях, таких как чтение RTC (часы реального времени), доступ к внешней памяти EEPROM. Он также используется в сенсорных модулях, таких как гироскоп, магнитометр и т. д.
Контакты Arduino I2C.
Выводы I2C расположены следующим образом на плате Arduino Uno.
Для других моделей плат соответствие выводов такое:
Видео:Урок 26.1 Соединяем две arduino по шине UARTСкачать
Соединяем две arduino по шине i2c
Видео:Как соединить две ардуино по I2C.Скачать
Давайте разберемся с самой удобной коммуникацией физически заложенной в контроллеры Arduino
I2C это последовательная асимметричная шина для связи между интегральными схемами внутри электронных приборов. Тоесть данный протокол связи был разработан для внутренней связи внутри коробки устройства или внутри щита. Перед ним не ставилось задание передавать данные на большие расстояния, поэтому ходит множество мифов о максимальной дальности связи — у кого-то плохо работает уже при 50см, у кого-то при 2м.
На шине I2C может сидеть до 128 устройств. Адреса от 0 до 127.
В контроллерах Arduino заложена физическая коммуникация I2C, которая позволяет по двум информационным проводам подключать к ним как различные датчики, расширители дискретных входов-выходов, цифро-аналоговые и аналого-цифровые преобразователи, так и другие контроллеры.
О скорости передачи на сайте производителя не пишут. Но по общей документации на протокол она должна составлять как минимум 100 кбит/с
Видео:Подключение нескольких устройств по шине i2cСкачать
Теперь хотелось бы потестировать на сколько действительно хороша шина I2C, и на сколько сложно по ней обмениваться данными между несколькими контроллерами Arduino
Я возьму три контроллера Arduino Nano, объединю их шиной I2C, и разберусь, как по ней обмениваться данными. Первый контроллер будет выполнять роль ведущего, а остальные два — роль ведомого.
Для отображения данных буду использовать LCD-индикатор 1602 с модулем I2C, который будет подключен на ту же коммуникационную шину.
Читайте также: В каких странах производятся шины мишлен
Ведущий контроллер будет последовательно опрашивать второго и третьего контроллера. Принятые данные первый контроллер должен выводить на индикатор. Опрос ведомых Arduino Nano будет проводиться с частотой 1 раз/сек.
Видео:Как подключить несколько I²C с одинаковыми адресами. Железки АмперкиСкачать
Схема подключения
Четыре провода от каждого из 4-х устройств нужно соединить параллельно. Вывод А4 платы Arduino Nano — это шина SDA протокола I2C, а А5 — это SCL.
Я буду использовать монтажные шилды под контроллеры Nano для удобства соединений.
Питание будет подаваться просто на один из контроллеров через mini USB вход.
У LCD адрес в сети I2C по умолчанию 27. У второго контроллера установим адрес 2 и у третьего 3. У ведущего первого контроллера адрес не нужен.
Видео:Подключение нескольких устройств, датчиков по I2C (АйТуСи) шинеСкачать
Программа контроллера — мастера.
Первый контроллер изменяет свою переменную типа integer и выводит ее значение на индикатор. Так же он поочереди опрашивает слейв со 2-м и 3-м адресом. Запрашивает у них два байта информации, преобразовывает их в переменную integer. В результате в первом контроллере крутятся три переменные с трёх Nano и он может вывести их на индикатор.
Видео:Arduino I2C связь между контроллерамиСкачать
Программа второго контроллера
Видео:Общение между Ардуино и Ардуино [ простая передача данных ] [ проекты Ардуино ] #ДомаВместеСкачать
Программа третьего Arduino Nano
Отличаются последние две программы просто адресом в функции Wire.begin(3); и частотой изменения переменной.
Эти программы постоянно изменяют переменную integer и ожидают запроса от мастера. При запросе эта переменная раскладывается на два байта и отправляется как ответ на запрос ведущему контроллеру.
Таким образом работу связи по I2C можно контролировать по изменяющимся значениям трех переменных на жидкокристаллическом индикаторе.
Видео:Урок 24. Узнаём адреса устройств на шине I2CСкачать
Выводы
Прекрасно все работает — цифры на дисплее меняются. Я попробовал удлиннять шлейф проводов между вторым и третьим контроллерами Arduino. Проверил работу шины связи при длине 3 м — без притензий. Длиннее не пробовал, но многие мне утверждали, что I2C не работает дальше 0,5 . 2 м и меня воодушевила длина 3 м.
Для себя я уже вижу, где применю такую связь именно между тремя Nano.
Я здесь ещё не попробовал передачу данных от мастера слейву. Если попробуете — отпишитесь.
Недостатков здесь на небольших расстояниях ощутимо меньше чем превосходств.
Видео:Урок 9. Адреса модулей на шине I2C. Arduino (что такое I2C, адресация, как изменить адрес модуля)Скачать
Урок 26.3 Соединяем две arduino по шине I2C
При создании некоторых проектов, требуется разделить выполняемые задачи между несколькими arduino.
В этом уроке мы научимся соединять две arduino по аппаратной шине I2C.
Преимущества:
- Реализуется возможность подключения до 126 устройств.
(не рекомендуется присваивать устройствам адреса 0x00 и 0x7F) - Не требуются дополнительные модули.
- Все устройства одинаково подключаются к шине.
- Каждое ведомое устройство имеет свой уникальный адрес на шине.
Недостатки:
Нам понадобится:
Для реализации проекта нам необходимо установить библиотеки:
- Библиотека LiquidCrystal_I2C_V112 (для подключения дисплеев LCD1602 по шине I2C).
- Библиотека iarduino_I2C_connect (для удобства соединения нескольких arduino по шине I2C).
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE, а о том, как работать с LCD дисплеями, на странице Wiki — Работа с символьными ЖК дисплеями.
Видео:
Схема подключения:
На шине i2С находятся 4 устройства: 3 arduino и 1 LCD дисплей. Все устройства шины I2C соединены через Trema I2C Hub. Для подключения Arduino используются аппаратные выводы шины I2C.
- Arduino master — к цифровому выводу D2 подключена trema кнопка.
- Arduino slave 0x01 — к цифровому выводу D2 подключена trema кнопка.
- Arduino slave 0x02 — к цифровому выводу D13 подключён trema светодиод, к аналоговому выводу A0 подключён Trema потенциометр.
- LCD I2C дисплей — является устройством slave 0x27.
Читайте также: Шины кама евро 217 r14
На шине I2C не используются дополнительные подтягивающие резисторы (для линий SDA и SCL), так как они интегрированы в LDC I2C дисплее.
Код программы:
Arduino master:
Arduino slave 0x01:
Arduino slave 0x02:
Алгоритм работы:
- Arduino master проверяет состояние собственной кнопки.
- Arduino master опрашивает две Arduino Slave.
- Arduino Slave 0x01 возвращает состояние кнопки.
- Arduino Slave 0x02 возвращает значение падения напряжения плеча потенциометра.
- Arduino Slave 0x02 включает или выключает светодиод, в соответствии с полученными данными.
Настройка параметров шины I2C:
Максимальная, аппаратно реализуемая частота передачи данных, может достигать 1/16 от тактовой частоты.
Библиотека Wire позволяет устанавливать скорость передачи данных через функцию setClock(), которую требуется вызвать до функции begin().
Библиотека Wire позволяет аппаратно подключить Arduino к шине I2C с указанием роли Arduino на шине: ведущий или ведомый.
- Wire.setClock(400000); // скорость передачи данных 400 кБит/с.
- Wire.begin(); // подключение к шине I2C в роли ведущего.
- Wire.begin(адрес); // подключение к шине I2C в роли ведомого, с указанием адреса.
Функции библиотеки iarduino_I2C_connect:
В библиотеке iarduino_I2C_connect реализованы 4 функции: 2 для ведущего и 2 для ведомого.
На ведомом устройстве достаточно вызвать функцию begin() с указанием массива, данные которого требуется сделать доступными для мастера. Далее можно работать с этим массивом, «забыв» про шину I2C. Мастер обращаясь к ведомому сможет получать и изменять данные элементов указанного массива (обращаясь к номеру элемента массива как к номеру регистра).
Если требуется запретить мастеру менять значения некоторых ячеек массива, то достаточно вызвать «необязательную» функцию writeMask() с указанием маскировочного массива, каждый элемент которого является флагом, разрешающим запись в соответствующий элемент массива доступного по шине I2C.
На ведущем устройстве доступны функции readByte() и writeByte(). Указывая в качестве параметров функций, адрес ведомого устройства и номер регистра, можно побайтно читать и записывать данные.
Функции для ведомого:
- Назначение: указание массива, элементы которого будут доступны для чтения/записи по шине I2C.
- Синтаксис: begin(массив); // тип данных массива — byte.
- Возвращаемые значения: Нет.
- Примечание: Вызывается 1 раз в коде функции Setup().
- Назначение: указание маскировочного массива, каждый элемент которого является флагом разрешения записи по шине I2C.
- Синтаксис: writeMask(маскировочный_массив); // тип данных массива — bool.
- Возвращаемые значения: Нет.
- Примечание: Вызывается 1 раз в коде функции Setup().
- Пример:
#include
#include
iarduino_I2C_connect ccc;
byte aaa[5]; // объявляем 5 элементов массива, к которому разрешим доступ.
bool bbb[5] = ; // объявляем 5 элементов маскировочного массива.
Wire.begin(0x33); // подключаемся к шине I2C в роли ведомого с адресом 0x33.
ccc.begin(aaa); // разрешаем доступ к массиву aaa по шине I2C.
ccc.wtiteMask(bbb); // маскируем разрешение на запись в массив aaa.- В соответствии со значениями массива bbb, мастер сможет записывать данные в ячейки 1,2,3 массива aaa, а попытка записи в 0 и 4 элементы будет проигнорирована.
- Если массив aaa имеет больше элементов чем массив bbb, то попытка мастера записать данные в «лишние» элементы будет проигнорирована.
- Если не объявлять маскировочный массив (не вызывать функцию writeMask() вообще), то все элементы массива aaa будут доступны для записи мастером.
Функции для ведущего:
- Назначение: Чтение одного байта данных из устройства на шине I2C.
- Синтаксис: readByte(адрес_устройства, адрес_регистра);
- Возвращаемые значения: uint8_t байт — данные считанные из указанного адреса, указанного устройства.
- Примечание: Если производится чтение по шине I2C из массива объявленного функцией begin(), то адрес регистра соответствует номеру элемента массива.
Видео:I2C соединение 2-ух ардуиноСкачать
Соединяем две arduino по шине i2c
В предыдущей статье рассматривался пример сбора данных одним контроллером Arduino NANO c двух других таких же контроллеров по шине I2C и отправка их по этой же шине в жидкокристаллический индикатор. Теперь хотелось бы разобраться с двухсторонним почти равнозначным обменом между контроллерами по I2C. Я возьму на этот раз два контроллера Nano. Один будет выступать в роли мастера, другой — слейва. Мастер периодически сначала будет отправлять значение одной переменной integer подчиненному Arduino Nano, после чего делать запрос на значение такой же переменной от него. А слейв при поступлении данных от мастера будет их считывать, а при поступлении запроса будет отправлять один integer.
Видео:Соединяем две arduino через порт UARTСкачать
Видео по предыдущей статье.
Видео:Секреты подключения нескольких LCD экранов к Arduino по I2CСкачать
Программа мастера выглядит следующим образом
Преобразование данных выполнено по мотивам предыдущей статьи.
Адрес слейва будет иметь значение 01.
Отправлять будем целое число 223.
Видео:Урок 26.2 Соединяем две arduino по стандарту RS485Скачать
Программа контроллера — слейва. Arduino i2c несколько устройств
Слейв Arduino Nano принимает данные от главного контроллера. В нашем случае принимает цифру 223 и выводит её в монитор порта. А при запросе данных от мастера этот Нано отправляет целое число 22. Все запросы от главного обрабатываются при помощи отдельных функций.
При правильном подключении мастер в монитор порта будет выводить полученные цифры 22, а слейв 223.
Видео:Подключение двух I2C дисплея на ArduinoСкачать
Выводы
Оказалось, что в интернете по этой тематике опубликованы или откровенно не работающие примеры программ или работающие только с байтами. Пришлось сделать по своему и в результате получилось прекрасное решение.
Мне в следующем проекте будет необходимо подключить 10 Arduino Nano к главному контроллеру. При чем 8 из них должны будут обмениваться с главным двухсторонними данными. Для этого идеально подойдет коммуникация I2C. Так что я в цикле контроллера-мастера буду последовательно, возможно в цикле FOR опрашивать слейвов и посылать им управляющие данные. Будет весело!
Преобразователь уровней 5В на 3В двунаправленный 4-канальный
Преобразователь логических уровней с 5 В на 3,3В и обратно.Позволяет преобразовать 4 линии коммуника..
Шестерня для зубчатого ремня на 60 зубов под ось 5 мм
Используется для передачи и редукции крутящего момента от двигателя до осиКоличество зубьев 60 шт.Ди..
Arduino UNO R3 + USB кабель
Плата контроллера, полюбившаяся всем почитателям этой марки Arduino на базе микропроцессора ATmega3..
Твердотельное реле 240В 2А
Реле без механических переключающихся контактов на основе симистораТакие реле из-за их быстродействи..
Драйвер шагового двигателя L298N
Модуль драйвера L298N для управления работой одного двухполюсного шагового двигателя или двумя ..
- Свежие записи
- Нужно ли менять пружины при замене амортизаторов
- Скрипят амортизаторы на машине что делать
- Из чего состоит стойка амортизатора передняя
- Чем стянуть пружину амортизатора без стяжек
- Для чего нужны амортизаторы в автомобиле
- Правообладателям
- Политика конфиденциальности
Автоподбор © 2023
Информация, опубликованная на сайте, носит исключительно ознакомительный характер💥 Видео
Видеоуроки по Arduino. I2C и processing (7-я серия, ч1)Скачать
Подключаем текстовый LCD 16x2 к arduino по I2CСкачать
Введение в шину I2CСкачать
Урок 26.4 Соединяем две arduino по радиоканалу через nRF24L01+Скачать