Arduino i2c сколько можно подключить устройств
В предыдущей статье рассматривался пример сбора данных одним контроллером Arduino NANO c двух других таких же контроллеров по шине I2C и отправка их по этой же шине в жидкокристаллический индикатор. Теперь хотелось бы разобраться с двухсторонним почти равнозначным обменом между контроллерами по I2C. Я возьму на этот раз два контроллера Nano. Один будет выступать в роли мастера, другой — слейва. Мастер периодически сначала будет отправлять значение одной переменной integer подчиненному Arduino Nano, после чего делать запрос на значение такой же переменной от него. А слейв при поступлении данных от мастера будет их считывать, а при поступлении запроса будет отправлять один integer.
Видео по предыдущей статье.
Программа мастера выглядит следующим образом
Преобразование данных выполнено по мотивам предыдущей статьи.
Адрес слейва будет иметь значение 01.
Отправлять будем целое число 223.
Программа контроллера — слейва. Arduino i2c несколько устройств
Слейв Arduino Nano принимает данные от главного контроллера. В нашем случае принимает цифру 223 и выводит её в монитор порта. А при запросе данных от мастера этот Нано отправляет целое число 22. Все запросы от главного обрабатываются при помощи отдельных функций.
При правильном подключении мастер в монитор порта будет выводить полученные цифры 22, а слейв 223.
Выводы
Оказалось, что в интернете по этой тематике опубликованы или откровенно не работающие примеры программ или работающие только с байтами. Пришлось сделать по своему и в результате получилось прекрасное решение.
Мне в следующем проекте будет необходимо подключить 10 Arduino Nano к главному контроллеру. При чем 8 из них должны будут обмениваться с главным двухсторонними данными. Для этого идеально подойдет коммуникация I2C. Так что я в цикле контроллера-мастера буду последовательно, возможно в цикле FOR опрашивать слейвов и посылать им управляющие данные. Будет весело!
RFID модуль PN532 NFC
NFC модуль на базе микросхемы NXP PN532, контроллера для бесконтактной связи на частоте 13,56 МГц на..
Набор электролитических конденсаторов 0,22. 470мкФ
Набор полярных конденсаторов 12 номиналов по 10 штук каждого.50 В — 0,22 мкФ50 В — 0,47 мкФ50 В — 1 ..
Разъемный коннектор под винт на плату 2 контакта
Двойной разъемный винтовой коннектор без поворота для монтажа на печатную плату.Используется для быс..
Уроки Arduino структура программы для начинающих
Здравствуйте друзья! Вы большие молодцы, что заинтересовались уроками Arduino! Структура програ..
Выбор шагового двигателя
Вам уже приходилось делать выбор между разными шаговыми двигателями для реализации своих амбициозных..
Arduino.ru
Сколько дисплеев 1602 16×2 HD44780 I2C можно подключить и контролировать с помощью ардуино мега
- Войдите на сайт для отправки комментариев
Здравствуйте, правильно ли я понимаю что ардуино мега может контролировать 27 itc дисплеев так как имеет 54 digital пина ?
возможно есть какойто более рациональный вариант управлять контентом на множествах маленьких дисплеев, не обязательно ардуино, посоветуйте если есть идеи ?
- Войдите на сайт для отправки комментариев
Так вам подключить, управлять или контент выводить?
- Войдите на сайт для отправки комментариев
Более рационально описывать задачу перед тем как задавать вопросы.
- Войдите на сайт для отправки комментариев
здравствуйте, хочу выводить данные с компьютера, а именно цену на товар в магазине, тоесть пару слов и цифры, и что бы эта картинка висела а по надобности обновлять, https://www.alibaba.com/product-detail/Free-shipping-1602-16×2-HD44780-For_1600132345945.html — ссылка на дисплей
- Войдите на сайт для отправки комментариев
И зачем тут 27 дисплеев? Не собрался ли ты их разносить далеко друг от друга?
- Войдите на сайт для отправки комментариев
да именно, друг от друга будут на разном расстоянии, как обычные ценники в магазине
- Войдите на сайт для отправки комментариев
Для классического ардуинщика крайне сложная в реализации и сопровождении идея.
А так можно экспериментировать, да.
- Войдите на сайт для отправки комментариев
Спасибо !, может вы видете альтернативу ардуино ?
- Войдите на сайт для отправки комментариев
Не альтернатива, а единственное решение — доверить задачу профессионалу, а не пытаться слепить что-то из обучающего конструктора, не имея никаких знаний в области.
- Войдите на сайт для отправки комментариев
Насколько я помню — такие системы уже давненько испытывались. Что-то там на электронной бумаге было и с радиоканалом.
- Войдите на сайт для отправки комментариев
- Войдите на сайт для отправки комментариев
Подключить и заставить менять картинку на куче экранчиков для Ардуино не сложно, а как экранчики-ценники будут с ней связаны? Проводами?
- Войдите на сайт для отправки комментариев
- Войдите на сайт для отправки комментариев
- Войдите на сайт для отправки комментариев
К этим дисплейчикам ещё «удлинительные» I2C чипы скорее всего понадобятся. А под них ещё платы делать. Корпусировать. Провода растягивать как-то по полкам, чтоб с мясом не выдрали их продавцы. Расключать все на стороне Ардуино. Треш и угар, вобщем-то.
- Войдите на сайт для отправки комментариев
Вот посмотрите ради забавы мои баловства. Думаю местные профи знают схему как к уно прикрутить море таких экранчиков. Просто монтажные работы. ох.
- Войдите на сайт для отправки комментариев
Вот посмотрите ради забавы мои баловства. Думаю местные профи знают схему как к уно прикрутить море таких экранчиков. Просто монтажные работы. ох.
- Войдите на сайт для отправки комментариев
Недавно сталкивался с таким же гением, наворотившим кучу удаленных сенсоров на i2c. Горели один за другим, плюс полный фарш вместо монтажа. Пришлось полностью переделывать.
- Войдите на сайт для отправки комментариев
I2C это внутрисхемный интерфейс. На большом расстоянии и при большом количестве устройств начнутся проблемы. По хорошему надо на каждый экран вешать свой МК и соединять их по последовательным интерфейсам.
- Войдите на сайт для отправки комментариев
Ну или в небольшие группы объединять. Это не с точки зрения правильности, а с точки зрения «удобоэксплуатации».
- Войдите на сайт для отправки комментариев
Да все это статичная конструкция, которую ещё заколебешься администрировать. Например: сегодня на 0x27 экспандера 13 огурцы, завтра — шапки. На каком софте все это реконфигурить? А сдвинуть ценник на полметра, например.
- Войдите на сайт для отправки комментариев
на каждый экран вешать свой МК это уже дороже получится. уже недалеко от e-paper по 8 евро.
- Войдите на сайт для отправки комментариев
возле каждого екранчика qr код — вот идентификатор сканировать телефоном и отправлять на сервер, к которому подключены ардуино
- Войдите на сайт для отправки комментариев
Дешевле взять по 8 евро.
Их хоть сбросить можно, если прогоришь.
- Войдите на сайт для отправки комментариев
на каждый экран вешать свой МК это уже дороже получится. уже недалеко от e-paper по 8 евро.
Постоянно чинить кривую самоделку получится еще дороже 8 евро, поверь уж.
- Войдите на сайт для отправки комментариев
Всех благодарю за ответы ! можно сделать выводы что организовать сложно , но главное работать будет )
- Войдите на сайт для отправки комментариев
Готовые подобные устройства стоят примерно 1000р.
У вас лучше и дешевле все равно не получится
- Войдите на сайт для отправки комментариев
Можно ещё мультиплексоры использовать TCA9548 — тогда число экранов можно СИЛЬНО увеличить .
- Войдите на сайт для отправки комментариев
Недавно сталкивался с таким же гением, наворотившим кучу удаленных сенсоров на i2c. Горели один за другим, плюс полный фарш вместо монтажа. Пришлось полностью переделывать.
Прямо в яблочко 🙂
- Войдите на сайт для отправки комментариев
А как вариант через esp wemos d1 + lcd 1602
1. можно выводить все что угодно(В пределах возможности lcd 1602).
2. Безпроводная связь(выбор протоколов:TCP/IP,UDP,HTTP,mmqt. )
1. оно устройство, один ценник.
2. Нужно самому писать ПО(сервер, который будет рулить выводом информации на ценники) которое будет привязывать конкретную esp к SKU(Товару)
- Войдите на сайт для отправки комментариев
А как вариант через esp wemos d1 + lcd 1602
1. можно выводить все что угодно(В пределах возможности lcd 1602).
2. Безпроводная связь(выбор протоколов:TCP/IP,UDP,HTTP,mmqt. )
1. оно устройство, один ценник.
2. Нужно самому писать ПО(сервер, который будет рулить выводом информации на ценники) которое будет привязывать конкретную esp к SKU(Товару)
Спасибо за ответы !
Если использовать esp wemos d1 + ЛСД 1602 нужно будет как то идентифицировать каждый дисплей подключенный к wifi сети , а если товаров пару тысяч — нужно несколько сетей . Возможно это реализовать ?
- Войдите на сайт для отправки комментариев
Ем, а с ценниками как? принцип думаю, одинаков. каждому товару привязан ценник(Мас, id,не важно).
Если товаров больше 2 тис, то лучше тогда ставить «Информационное табло» на группу товаров.
- Войдите на сайт для отправки комментариев
- Войдите на сайт для отправки комментариев
Благодарю , есть над чем поработать чего попробовать !
- Войдите на сайт для отправки комментариев
Основная проблема ценников это питание. Поэтому то и сделаны они на «электронных чернилах». Просто протянуть питание к 2000 ценников, это уже 4 тысячи проводов 🙂 Кабеля будут лежать как в метро 🙂 Еще пара интерфейсных и «туши свет» 🙂 Ну а i2c дисплеев к меге можно прикрутить штук 45, а то и более.
Конечно явной ноги «чипселест» нет, но есть ноги выбора адреса, которые ничем не хуже. По одному контакту для активации дисплея и пару — общая шина.
- Войдите на сайт для отправки комментариев
Здравствуйте, правильно ли я понимаю что ардуино мега может контролировать 27 itc дисплеев так как имеет 54 digital пина ?
возможно есть какойто более рациональный вариант управлять контентом на множествах маленьких дисплеев, не обязательно ардуино, посоветуйте если есть идеи ?
справится и ардуино уно (нано) , на i2c переходниках можно задавать 8 разных адресов , PCF8574T и AT имеют разные массивы адресов , и того на 2 провода можно повешать 16шт I2C дисплеев .
вариант1 — 4пина ардуинки — применить софтварную i2C (надо поискать) , переключать I2C на другие 2 пина , подключив к ним второй массив из 16ти диспов , и того имеем 32диспа
вариант2 — 3пина ардуинки — переключать сигнал CLK , к примеру транзисторами или жёсткой логикой , на второй массив 16диспов, и того тож имеем 32диспа.
На большую дальность проводов не стоит рассчитывать , оптимально до 1метра от ардуинки. И резисторы подтягивающие желательно убрать на промежуточных диспах , оставить на конечных. Или увеличить их.
// OLED диспы не вариант, на них быстро выгорают пиксели.
- Войдите на сайт для отправки комментариев
здравствуйте, хочу выводить данные с компьютера, а именно цену на товар в магазине, тоесть пару слов и цифры, и что бы эта картинка висела а по надобности обновлять, https://www.alibaba.com/product-detail/Free-shipping-1602-16×2-HD44780-For_1600132345945.html — ссылка на дисплей
Если речь об автономных электронных ценниках , то дисплей — e ink электронная бумага https://aliexpress.ru/item/1005002306771826.html , + экономный чип блютуз BLE , м.б. к примеру CC2541 ( CC2640 блютуз 5.0 CC2640R2F ), подключать можно без ардуины. писать прогу сразу на нём , но надо изучать SDK среду к нему. https://www.compel.ru/lib/89209
Ещё вариант чип NRF52xxx , есть либы для Adruino IDE под него ( блютуз 5 https://github.com/rsramki/arduino-nRF52840 , https://learn.sparkfun.com/tutorials/nrf52832 ).
У блютуз 5 очень хорошая дальность будет (Bluetooth 4 активно работает в радиусе 50 м на открытом пространстве и в радиусе 10 м в помещении, что делает его не очень удобным, в то время как Bluetooth 5 активно работает в радиусе 200 м на открытом пространстве и в радиусе 40 м в помещении.).
Вот внутренности электронный ценник https://disk.yandex.ru/d/s5vqk2ikdNw4bA (ист. тыц ),
там видно что внутри стоит известный радиочип CC2640 блютуз 5. Что при должном внимании можно написать свою прогу в него , и сделать «базовую станцию» на том же чипе , по рассылке им данных .
Еще одни внутренности, но там что-то вроде RFID, антенна как у пейджеров, comment-591188 ., возможно через такую антенну и подзаряжать по ночам можно.
//Есть ещё вариант электронных ценников , где приём на них осуществляется по IR каналу , но тут уж только в пределах прямой видимости.
//// реальные электронные ценники такие как у китайцев и дешевле чем у них , у вас не получиться сделать .
600-700руб https://aliexpress.ru/item/1005002394903370.html
подключаться можно блютузом на телефоне андроид, менять ценники. Или создавать свои графические шаблоны в онлайн на китайском сайте.
Сборка схемы из модулей
Микроконтроллер – очень универсальная штука, его можно научить взаимодействовать практически с любым другим электронным устройством: аналоговые датчики, цифровые датчики, всякие разные микросхемы, дисплеи, драйверы, контроллеры… Чтобы схема работала, входящие в неё компоненты нужно правильно соединить между собой. В этом уроке мы рассмотрим подключение электронных модулей.
Электронный модуль
Модуль – это специальная удобная плата на базе какой-то микросхемы или электронного компонента. Модуль может быть датчиком, драйвером, интерфейсом, памятью, дисплеем и так далее. Зачем использовать модуль, почему не взять конкретный компонент? Если вы хотите делать электронное устройство на печатной плате – конечно же лучше собирать его из голых компонентов, а не из модулей, потому что в большинстве случаев это выйдет дешевле, а также изготовление такой платы можно заказать вместе со сборкой на производстве (например на JLCPCB). Но мы с вами собираемся сначала научиться программировать, поэтому модули имеют неоспоримые преимущества:
- Основная концепция Ардуино – электронный конструктор, быстрое и простое создание прототипов электронных устройств без помощи паяльника.
- Микросхема очень маленькая, подключать её к чему-то – не очень приятная затея. У модуля выведена рейка для подключения проводов и работы на макетной плате.
- Чтобы подключить голую микросхему – понадобится изучить документацию. У модуля все нужные для подключения пины выведены и подписаны.
- Для корректной работы большинства микросхем требуются дополнительные компоненты (драйверы, контроллеры, резисторы, стабилизаторы, конденсаторы, индуктивности, кварцевые генераторы), посчитанные, выбранные и установленные согласно документации. На плате модуля всё это уже есть.
- У некоторых модулей на плате предусмотрена настройка: крутилки, джамперы, переключатели, перемычки для спайки паяльником.
Макетная плата
Макетная плата, она же макетка или брэдборд (breadboard) – самый удобный способ создания электронных макетов. Отверстия расположены со стандартным шагом 2.54мм, внутри каждого – пружинная клемма. Это позволяет вставлять в плату любые Arduino-модули, а также микросхемы в DIP корпусах.
Для соединения отверстий в пределах макетки используются провода штырёк-штырёк, рекомендую вариант с цилиндрическими штекерами (я пользуюсь одним комплектом на протяжении уже 5-ти лет). Также существуют провода с квадратными штекерами, они есть в вариантах гнездо-гнездо, гнездо-штырёк и штырёк-штырёк. Эти провода менее качественные, но вариант гнездо-штырёк позволяет подключить модуль к макетке, не втыкая модуль в макетку:
Что происходит на этом фото и как работает брэдборд? Очень просто! Контакты в нём соединены следующим образом:
“Простые” модули
Цифровые
Простые цифровые модули имеют два пина питания и пин с логическим выходом, он может быть подписан как OUT, S, D или DO. Плата таких модулей имеет синий цвет и содержит типовую схему – крутилка (синий корпус) и операционный усилитель (чёрная микросхема рядом с крутилкой). Такой модуль выдаёт только два состояния: датчик “сработал” и “не сработал”, на цифровом выходе появляется соответственно VCC (напряжение питания) или 0 Вольт, т.е. высокий и низкий цифровой сигнал. Крутилка на плате позволяет настроить порог срабатывания. Такие датчики подключаются к питанию и любому цифровому пину (GPIO). Опрашиваются стандартными средствами Arduino.
Примеры на картинке ниже: датчик звука, температуры, освещённости, приближения, магнитного поля.
Аналоговые
У аналоговых модулей помимо питания есть аналоговый выход, может быть маркирован как OUT, S, A или AO. Такие модули выдают аналоговый сигнал, пропорциональный показанию датчика. Подключаются к питанию и любому аналоговому пину (ADC) и опрашиваются стандартными средствами Arduino.
Примеры на картинке ниже: датчик звука, уровня жидкости, индуктивный датчик влажности почвы, обычный датчик влажности почвы, потенциометр (просто крутилка).
Смешанные
Некоторые модули имеют цифровой и аналоговый выходы одновременно, пины у них обычно подписаны как DO – цифровой выход и AO – аналоговый. Крутилка на плате настраивает порог срабатывания у цифрового выхода, а аналоговый просто выдаёт “сырой” сигнал с датчика. Опрашиваются как цифровые и аналоговые датчики соответственно.
Общая схема для всех перечисленных выше типов модулей:
Примеры на картинке ниже: датчик вибрации, звука, магнитного поля, влажности почвы и освещённости.
KY-модули
Существует также целое семейство модулей с названием KY-цифра, это самые дешёвые модули на чёрных платах. Среди них есть и цифровые, и аналоговые, и интерфейсные датчики, а также индикация (светодиоды, пищалки) и реле. Проблема в том, что пины почти у всех плат подписаны одинаково:
- – (минус) – минус, GND
- Средний пин без подписи – плюс, VCC
- S – сигнал
Сигналом здесь может быть как исходящий из датчика цифровой или аналоговый сигнал, так и цифровой сигнал управления, который нужно подать на модуль с микроконтроллера. Обязательно читайте описание к модулю такого типа, если не знаете, что делает компонент на его плате!
Интерфейсные модули
Некоторые модули имеют один или несколько логических выходов и передают данные по цифровому интерфейсу связи. Сигнальные пины таких датчиков могут быть подписаны как SCK, SDA, SCL, MISO, MOSI, SS и прочими аббревиатурами, отличными от OUT, как в “простых” модулях. Подключаются такие модули к пинам интерфейсов (подробнее в этом уроке) на плате Arduino и опрашиваются при помощи сторонних библиотек. Для работы с такими модулями нужно найти в интернете статью с описанием и примерами. Подробное описание к самым популярным модулям можно найти в базе примеров к набору GyverKIT, а также у меня в каталоге ссылок на Ардуино-компоненты. Примеры таких модулей:
Давайте вкратце рассмотрим самые распространённые интерфейсы и особенности подключения модулей с ними. Напомню распиновку плат Arduino Nano и Wemos Mini:
Интерфейс i2c Ардуино, сканер i2c шины (scl sda)
I2C Arduino (i2c — Inter-Integrated Circuits) — это протокол последовательной связи по двум линиям связи. Эти линии также называются: шина SDA (последовательные данные) и шина SCL (последовательный тактовый генератор). Порты SDA и SCL Ардуино подтягиваются к шине питания через резисторы. Рассмотрим, что такое шина i2c Arduino Nano и как подключить к плате несколько устройств по интерфейсу i2c.
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- lcd 1602 i2c дисплей
- модуль rtc ds1307 i2c
- коннекторы
- библиотека LiquidCrystal_I2C.h и iarduino_RTC.h
Микроконтроллеры Arduino используют два контакта для работы i2c. В Arduino Uno и Nano линия SDA соответствует аналоговому порту A4, а SCL — аналоговому порту A5. В Ardunio Mega линия SDA — это 20 вывод, а линия SCL — 21 вывод. Чтобы облегчить работу с шиной i2c и обмен данными между устройствами, для IDE Arduino написана стандартная библиотека Wire (скачивать и устанавливать ее не нужно).
Протокол интерфейс i2c Ардуино: описание
Каждому устройству при подключении к микроконтроллеру по протоколу i2c присваивается уникальный адрес (можно подключить до 127 устройств). Изменить адрес устройства на шине невозможно, так как он встроен в микросхему. Часто производители предлагают возможность изменения адреса устройства в небольшом диапазоне, что позволяет подключить к шине iic несколько одинаковых устройств.
I2C scanner Arduino (сканер шины i2c)
LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
GND | GND | GND | GND |
VCC | 5V | 5V | 5V |
SDA | A4 | A4 | 20 |
SCL | A5 | A5 | 21 |
Следующая программа позволяет узнать адреса всех устройств, подключенных к шине i2c. Если устройство не было подключено или подключено неправильно, на мониторе порта появится сообщение о том, что устройство не найдено. Вместо дисплея можно подключить любое устройство, поддерживающее связь по протоколу iic — модуль часов реального времени DS1302, датчик давления BMP180 и т.д.
Скетч для сканирования шины I2C Arduino
Подключение несколько устройств к шине i2c Ардуино
DS1307 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
GND | GND | GND | GND |
VCC | 5V | 5V | 5V |
SDA | A4 | A4 | 20 |
SCL | A5 | A5 | 21 |
В следующем примере два устройства: дисплей 1602 и модуль часов времени будут подключены к шине IIC. После сборки схемы можно провести предварительное сканирование шины, используя программу, размещенную выше. Адреса всех устройств различны, и можно изменить только iic адрес дисплея. Для остальных устройств адреса «жестко привязаны» и используются в библиотеках по умолчанию.
Скетч несколько устройств на i2c, scanner i2c шины
Заключение. Мы исследовали возможность подключения нескольких i2c устройств к плате Ардуино, что будет полезно знать при разработке различных DIY проектов. Например, метеостанции на Ардуино с дисплеем и датчиком давления. Если у вас остались вопросы о сканере шины i2c или о подключении переферийных устройств по этому протоколу, не стесняйтесь оставлять их в комментариях к этой статье.