Как связать 2 ардуино

Обновлено: 29.11.2022

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

PiratFox

Nikanor

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

Все подключено как описано в статье. В библиотеке есть примеры, ничего не менял, примеры просты и понятны. Но ничего не происходит, то есть обе ардуино стоят и ничего не происходит. Но вообще мне нужно предельно простые действия от этих двух ардуино, одна на другую должна передать сигнал чтобы вторая просто включила или выключила реле.

bort707

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

может просто подавать на вторую ардуину HIGH LOW на пин? HIGH - реле включить, ЛОУ - выключить. как-то так

@k134, для этого есть мониторы портов (отладочный вывод в serial). Посмотреть что генерит передающая Ардуино, принимает ли что-нибудь приёмная часть. Может порты неверно выбраны или ничего не посылается в принципе.

@k134, для этого есть мониторы портов (отладочный вывод в serial). Посмотреть что генерит передающая Ардуино, принимает ли что-нибудь приёмная часть. Может порты неверно выбраны или ничего не посылается в принципе.

Всё проверил порты в норме, перепутать не могу ибо только принимающая ардуино подключена к компьютеру. Не знаю как проверить идет ли отправка с первой ардуино вообще

может просто подавать на вторую ардуину HIGH LOW на пин? HIGH - реле включить, ЛОУ - выключить. как-то так

Старик Похабыч

В этой статье упомянуты 3 библиотеки. Все 3 не работают ?
Вы , если нужна конечно помощь или совет, не ленитесь, приведите и схему (хоть рукой нарисуйте), и текст программ. Вам это уже @Nikanor, написал.

bus3.jpg

Какие Ардуино использованы? К каким пинам подключены соединяющие платы провода? К чему приведена схема соединения из статьи? Там не две Ардуино!

Старик Похабыч

Ну вот провод передачи должен у обоих ардуин подключаться к 4-му пину. Это так ? Картинка не соотв. схеме

Dev9tiU

Имеются две нано, леонардо и mightycore для 644.
Использовал SoftUART и GBUS и однопроводной интерфейс.
если просто открыть пример и потестить все работает. но стоит внедрить код который читает 8 каналов ацп , фильтрует значения и делает небольшой математический расчетик и настроить все на прием-передачу (параметр FULL) то передачи нет. иногда проскакивает чтото но всетаки теряются почти все пакеты.
неужели данная библиотека так чувствительна к небольшим задержкам?
а вообще как следует отправлять запросы и принимать данные?
моя преследуемая цель:
Имеется центральное устройство которое делает запрос на переферийное устройство скажем раз в секнду
переферийное устройство приняв запрос шлет пакет(ы) с данными (8 чисел в формате float)
имеется также второе переферийное устройство на которое запросы отправляются в 4 раза чаще
второе устройство также в ответ шлет 2 числа в формате float и 4 в формате int

перетыкал все примеры но данные не проходят ни так ни эдак.
да и примеров както маловато хотя на сайте обещано очень много примеров

естественно номера пинов, подтяжки, адреса все проверено

Во-первых, нужно оптимизировать объем передачи. Штатный АЦП имеет всего 3 значащих цифры точности, зачем его упаковывать в 4-байтный double? Точность выше первоначальной Вы всё равно не получите!
Во-вторых, аналоговое чтение занимает 113 мкс в норме, 8 шт.= 0,9мс, при этом прерывания стопятся. Уверен, что с оптимизацией расчётов Вы также не церемонились, как и запуском сбора данных по расписанию, а не сколько влезет. А теперь давайте посчитаем необходимую скорость передачи в идеальных условиях для идеализированного однопроводного интерфейса:
5 запросов центра по 3 байта = 15 байт/сек
ответ первой периферии 2+8*4=34 байта/сек
ответ второй периферии (2+2*4+4*2)*4=72 байта/сек
Или 121 байт = 968 бит, которые передаются, как правило, двумя интервалами (0,52 мс / интервал). Т.е. аналоговое чтение, если запущено несинхронизированно с передачей данных, блокирует один из битов передачи. В зависимости от используемой библиотеки это может означать отсутствие подтверждения готовности к приему и передающая Ардуино просто не начинает это делать.
Короче, сделать можно всё, но переходить нужно на двухпроводную архитектуру и жёстко оптимизировать код с профилированием моментов запретов прерываний.

Радио модули с частотой 433 MHz – самый простой способ связать две Ардуины по беспроводному каналу. Чем они лучше радио 2.4 GHz, например nRF24?

  • Неприхотливы к питанию
  • Потребляют небольшой ток
  • Занимают один пин МК
  • В два раза дешевле
  • Выше дальность связи при той же мощности
  • Более высокая проникающая способность

Также на этой частоте работают пульты управления (брелоки) радио-реле и шлагбаумов, что позволяет перехватывать их команды и подменять при желании.

Модулей данного типа на китайских площадках существует несколько, продаются они парой (передатчик TX и приёмник RX), либо по отдельности.


Наборы GyverKIT до 2 партии комплектовались парой модулей как по центру на картинке выше (модель SYNxxx), со второй партии в наборах идут модули FS1000A и MX-RM-5V (слева на картинке) как более удобные для подключения и более стабильные в работе. Правые модули, несмотря на самый высокий ценник, работают хуже всех и к покупке не рекомендуются.

Ток потребления модулей:

  • FS1000A [5V]: передача 12 мА, холостой 10 мкА
  • MX-RM-5V [5V]: 3.7 мА
  • SYN115 [3.3V]: передача 14 мА, холостой 0.5 мкА
  • SYN480R [5V]: 4.5 мА

Для лучшего качества связи к модулям в пин ANT нужно припаять антенну длиной 17.3 см (четверть волны) в виде одножильного провода, при желании можно свернуть в спираль:


Подключение

Модули подключаются к питанию и data – на любой цифровой пин. “Зелёные” модули к Arduino подключаются напрямую, а синий передатчик – через делитель напряжения трёх 10к резисторах (есть в наборе). Для подключения к esp8266 делитель не нужен, там и так 3.3V на пине.

На всех схемах передатчик слева, приёмник справа.



Библиотеки

Для данных модулей предлагается использовать библиотеку VirtualWire или RadioHead. Библиотеки очень сложные и тяжёлые по весу, и лично у меня китайские модули с ними не заработали. Причём со средними и правыми модулями с картинки из самого начала этого урока данные библиотеки в принципе не будут работать, так как у них слишком долгая синхронизация. Я написал свою библиотеку, Gyver433, которая работает даже в самых плохих условиях и выжимает максимум из этих модулей.

Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию Gyver433. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

Примеры

Отправка

Приём

Библиотека позволяет отправлять данные любого типа (массив, структура) любой длины, что охватывает все возможные сценарии работы с радио.


При создании некоторых проектов, требуется разделить выполняемые задачи между несколькими Arduino.

В этом уроке мы научимся соединять две Arduino по аппаратной шине UART.

Преимущества:

  • Простота реализации.
  • Дуплексная связь, обе Arduino могут одновременно передавать данные друг другу.

Недостатки:

  • Нет возможности «залить» скетч, при наличии устройств на аппаратной шине UART.
  • Реализуется соединение только двух устройств (при отсутствии доп. модулей).

Нам понадобится:

    х 2шт.
  • LCD дисплей LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) х 2шт. х 2шт. х 2шт. х 2шт.
  • Шлейф «мама-мама» (3 провода) для шины UART x 1шт.

Для реализации проекта нам необходимо установить библиотеки:

  • Библиотека iarduino_KB (для подключения матричных клавиатур).
  • Библиотека LiquidCrystal_I2C_V112 (для подключения дисплеев LCD1602 по шине I2C).

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE .

Видео:

Схема подключения:

Подключение LCD дисплея осуществляется к аппаратным выводам шины I2C.
Клавиатура подключается к любым цифровым выводам, в примере используются выводы 2-9.
Соединение двух arduino осуществляется по шине UART:

Arduino 1 Arduino 2
TX (transmit - передать) RX (receive - получить)
RX (receive - получить) TX (transmit - передать)
GND (ground - земля) GND (ground - земля)

Схема соединения двух Arduino Uno по шине UART

Код программы:

Настройка параметров шины UART:

Максимальная, аппаратно реализуемая частота передачи данных, может достигать 1/8 от тактовой частоты.

Настройка шины осуществляется вызовом функции begin() класса Serial, с передачей ей до двух аргументов. Первый аргумент устанавливает частоту передачи данных (в примере 9600 бод), второй (необязательный) аргумент устанавливает количество битов, наличие проверки на четность/нечетность, длину стопового бита (по умолчанию SERIAL_8N1).

Допустимые значения второго аргумента функции begin() класса Serial:

  • SERIAL_5N1
  • SERIAL_6N1
  • SERIAL_7N1
  • SERIAL_8N1
  • SERIAL_5N2
  • SERIAL_6N2
  • SERIAL_7N2
  • SERIAL_8N2
  • SERIAL_5E1
  • SERIAL_6E1
  • SERIAL_7E1
  • SERIAL_8E1
  • SERIAL_5E2
  • SERIAL_6E2
  • SERIAL_7E2
  • SERIAL_8E2
  • SERIAL_5O1
  • SERIAL_6O1
  • SERIAL_7O1
  • SERIAL_8O1
  • SERIAL_5O2
  • SERIAL_6O2
  • SERIAL_7O2
  • SERIAL_8O2

Значения отличаются последними тремя символами, которые означают следующее:

  • Первая цифра: указывает количество бит в минимальной посылке (от 5 до 8).
  • Буква N/E/O: E-проверка четности, O-проверка нечетности, N-без проверки.
  • Последняя цифра: указывает длину стопового бита (1 или 2 битовых интервала)

Таким образом значение по умолчанию SERIAL_8N1 означает, что в минимальной посылке 8 бит (без учёта стартового и стопового битов), данные передаются без проверки на чётность/нечётность, длина стопового бита равна 1 битовому интервалу.

Настройки шины UART обеих arduino должны быть идентичны!

При создании некоторых проектов, требуется разделить выполняемые задачи между несколькими arduino.

В этом уроке мы научимся соединять две arduino по аппаратной шине I2C.


Преимущества:

  • Реализуется возможность подключения до 126 устройств.
    (не рекомендуется присваивать устройствам адреса 0x00 и 0x7F)
  • Не требуются дополнительные модули.
  • Все устройства одинаково подключаются к шине.
  • Каждое ведомое устройство имеет свой уникальный адрес на шине.

Недостатки:

  • Код программы немного сложнее чем для шины UART.

Нам понадобится:

    х 3шт.
  • LCD дисплей LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) х 1шт. х 3шт. x 2шт. x 1шт. x 1шт. x 1шт. х 4шт.

Для реализации проекта нам необходимо установить библиотеки:

  • Библиотека 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.

    - к цифровому выводу D2 подключена trema кнопка. - к цифровому выводу D2 подключена trema кнопка. - к цифровому выводу D13 подключён trema светодиод, к аналоговому выводу A0 подключён Trema потенциометр. - является устройством slave 0x27.

Схема соединения нескольких Arduino по шине I2C

На шине 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(). Указывая в качестве параметров функций, адрес ведомого устройства и номер регистра, можно побайтно читать и записывать данные.


    При создании некоторых проектов, требуется разделить выполняемые задачи между несколькими arduino.

    В этом уроке мы научимся соединять две arduino по стандарту RS485 через аппаратную шину UART.

    Преимущества:

    • Простота реализации.
    • Реализуется возможность подключения более двух arduino.
    • Любая arduino на линии связи может работать ведущим и/или ведомым.
    • Передача данных осуществляется на большие расстояния (длина линии связи до 1,2 км).
    • Не требуется отключать модули от шины UART при загрузке скетча.

    Недостатки:

    • Связь осуществляется в полудуплексном режиме (одновременно может отправлять данные только одна arduino).
    • Используется дополнительный цифровой вывод arduino, для управления конвертирующим модулем.

    Нам понадобится:

      х 2шт.
    • LCD дисплей LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) х 2шт. х 2шт. х 2шт. х 2шт.
    • Витая пара «мама-мама» (2 провода) - линия связи x 1шт. х 2шт.

    Для реализации проекта нам необходимо установить библиотеки:

    • Библиотека iarduino_KB (для подключения матричных клавиатур).
    • Библиотека LiquidCrystal_I2C_V112 (для подключения дисплеев LCD1602 по шине I2C).

    О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE .

    Видео:

    Схема подключения:

    Подключение LCD дисплея осуществляется к аппаратным выводам шины I2C.
    Клавиатура подключается к любым цифровым выводам, в примере используются выводы 2-9.
    Конвертирующий модуль подключается к шине UART:

    Конвертирующий модуль Arduino
    DI (Driver Input - вход передатчика) TX (transmit - передать)
    RO (Receiver Out - выход приёмника) RX (receive - получить)
    Vcc (Voltage constant current - напряжение постоянного тока) Vcc
    GND (GrouND - земля) GND (GrouND - земля)
    DE (Driver Enable - разрешение работы передатчика) D10 (Digital - цифровой)
    ~RE (Receiver Enable - разрешение работы приёмника) D10 (Digital - цифровой)

    Схема соединения нескольких Arduino по стандарту RS485

    На рисунке приведён пример подключения двух и более устройств.
    Схемы устройства-1, устройства-2, . - идентичны.

    Все конвертирующие модули на линии соединяются одноименными выводами: «A» с «A», «B» с «B».

    Код программы:

    Настройка параметров линии связи:

    Конвертирующий модуль только преобразует сигналы TTL в стандарт RS485 и обратно. Параметры линии: скорость передачи данных, количество бит в минимальной посылке, длина стопового бита, проверка на чётность/нечётность, зависят от настроек шины UART, см. раздел «Настройка параметров шины UART» в уроке 26.1.

    Настройки шины UART всех arduino подключённых к линии должны быть идентичны!

    Читайте также: