Скидки, ограниченное предложение! Полный список акционных товаров

Урок 26.2 Соединяем две arduino по стандарту RS485

Необходимые детали
Видео уроки

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

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

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

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

Недостатки:

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

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

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

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

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

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

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

// Подключаем библиотеки:
#include <Wire.h>                            // подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h>               // подключаем библиотеку для работы с LCD дисплеем
#include <iarduino_KB.h>                     // подключаем библиотеку для работы с матричной клавиатурой
// Объявляем переменные и константы:
LiquidCrystal_I2C lcd(0x27,16,2);            // объявляем переменную для работы с LCD дисплеем, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
iarduino_KB       KB(9,8,7,6,5,4,3,2);       // объявляем переменную для работы с матричной клавиатурой, указывая номера aeduino подключенные к шлейфу клавиатуры, начиная с первого вывода шлейфа
const uint8_t     PIN_direction_TX_RX = 10;  // указываем номер вывода arduino, к которому подключены выводы RE и DE конвертирующего модуля
void setup(){
  pinMode(PIN_direction_TX_RX,   OUTPUT);    // устанавливаем режим работы вывода PIN_direction_TX_RX, как "выход"
  digitalWrite(PIN_direction_TX_RX, LOW);    // устанавливаем уровень логического «0» на выводе PIN_direction_TX_RX (переводим модуль в режим приёма данных)
  Serial.begin(9600);                        // открываем последовательный порт на скорости 9600 бод
  KB.begin(KB1);                             // инициируем клавиатуру (KB1 - эластичная матричная клавиатура 4х4)
  lcd.init();                                // инициируем LCD дисплей
  lcd.backlight();                           // включаем подсветку LCD дисплея
  lcd.setCursor(0, 0);                       // устанавливаем курсор в позицию: столбец 0, строка 0
  lcd.print("iArduino.ru");                  // выводим текст "iArduino.ru"
  lcd.setCursor(0, 1);                       // устанавливаем курсор в позицию: столбец 0, строка 1
  lcd.print("Received data:");               // выводим текст "Received data:"
}
void loop(){
  if(KB.check(KEY_DOWN)){                    // если нажимается кнопка (KEY_DOWN - нажимается, KEY_UP - отпускается, KEY_PRESS - удерживается), то ...
    digitalWrite(PIN_direction_TX_RX, HIGH); // переводим модуль в режим передачи данных
    delay(1);
    Serial.print(KB.getChar);                // отправляем символ кнопки в последовательный порт (для вывода цифры кнопки используйте KB.getNum)
    delay(1);
    digitalWrite(PIN_direction_TX_RX, LOW);  // переводим модуль в режим приёма данных
  }
  if(Serial.available()>0){                  // если в последовательном порту есть данные для чтения, то ...
    lcd.setCursor(15, 1);                    // устанавливаем курсор в позицию: столбец 15, строка 1
    lcd.print(char(Serial.read()));          // выводим байт данных в виде символа, из последовательного порта на LCD дисплей
  }
}

скачать

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

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

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

Ссылки:

Обсуждение

Присоединяйся

Другие уроки

На главную