Последовательная связь позволяет вашему Arduino взаимодействовать с другими устройствами. Узнайте, как подключить и закодировать их, используя любой из четырех протоколов.
При работе над крупными проектами Arduino довольно часто не хватает доступных контактов для подключения компонентов. Скажем, вы хотите подключить несколько датчиков/исполнительных механизмов с острой необходимостью сохранить дополнительные контакты для питания модуля дисплея, требующего большого количества контактов.
Если только вы не поколдуете, иногда бывает сложно справиться со всеми этими соединениями на одной плате Arduino, особенно когда вы решите использовать меньшие платы, потому что вам не хватает места. Вот когда в игру вступает последовательная связь.
Давайте рассмотрим, что такое последовательная связь и как ее можно настроить с помощью Arduino для таких задач, как распределенная обработка и общая интеграция.
Что такое последовательная связь?
Последовательная связь — это метод отправки и получения данных между двумя или более электронными устройствами по одному биту за раз по одной линии связи. Как следует из названия, данные отправляются «последовательно».
".Даже просто для загрузки скетчей на вашу любимую плату Arduino используется последовательная связь через USB.
Протоколы последовательной связи на Arduino
Платы Arduino невероятно универсальны и могут взаимодействовать с широким спектром устройств. Они поддерживают четыре протокола последовательной связи: Soft Serial, SPI (последовательный периферийный интерфейс), стандартный UART (универсальный асинхронный приемник-передатчик) и I2C (межинтегральная схема). Для получения более подробной информации ознакомьтесь с нашим подробным руководством по как работает последовательная связь UART, SPI и I2C.
В этом руководстве используются базовые эскизы, чтобы показать, как можно настроить последовательное соединение между двумя платами Arduino Uno с использованием различных протоколов. Адаптируйте код в соответствии с вашими конкретными требованиями.
SPI (последовательный периферийный интерфейс)
SPI — это протокол синхронной последовательной связи, обеспечивающий высокоскоростную связь между микроконтроллерами и периферийными устройствами. Этот протокол требует четырех проводов для связи: СКК (серийные часы), МОСИ (главный выход подчиненный вход), МИСО (главный в ведомом выходе) и SS (выбор ведомого).
SPI.ч библиотека очень удобна для такого типа связи и должна быть включена в начало вашего эскиза.
#включать
Вот контакты SPI на плате Arduino Uno:
Функция |
Номер контакта (цифровой) |
Номер контакта (заголовок ICSP) |
---|---|---|
МОС |
11 |
4 |
МИСО |
12 |
1 |
СКК |
13 |
3 |
SS |
10 (по умолчанию) |
1 (Альтернатива) |
После инициализации последовательной связи вам необходимо настроить коммуникационные контакты.
пустотанастраивать(){
СПИ.начинать(115200);
// Установить режимы выводов для SS, MOSI, MISO и SCK
контактный режим(SS, ВЫХОД);
контактный режим(МОСИ, ВЫХОД);
контактный режим(МИСО, ВХОД);
контактный режим(СКК, ВЫХОД);
// Установите вывод выбора ведомого устройства (SS) в высокий уровень, чтобы отключить ведомое устройство
цифровойЗапись(SS, ВЫСОКИЙ);
}
Сигнал SS используется, чтобы сообщить ведомому устройству, когда данные передаются.
// Выбираем подчиненное устройство
цифровойЗапись(SS, НИЗКИЙ);// Отправляем данные на ведомое устройство
СПИ.передача(данные);
// Отменить выбор ведомого устройства
цифровойЗапись(SS, ВЫСОКИЙ);
Вот как соединить две платы Arduino с помощью SPI.
Код для основной платы:
#включать
константаинт ведомыйВыборПин = 10;
пустотанастраивать(){
СПИ.начинать(115200);
контактный режим(slaveSelectPin, ВЫХОД);
}
пустотапетля(){
цифровойЗапись(slaveSelectPin, НИЗКИЙ);
СПИ.передача('ЧАС');
цифровойЗапись(slaveSelectPin, ВЫСОКИЙ);
задерживать(1000);
}
Код для ведомой платы:
#включать
константаинт ведомыйВыборПин = 10;
пустотанастраивать(){
СПИ.начинать(115200);
контактный режим(slaveSelectPin, ВЫХОД);
}
пустотапетля(){
если (цифровойЧитать(slaveSelectPin) == НИЗКИЙ) {
уголь полученные данные = СПИ.передача('Л');
Серийный.печать(полученные данные);
}
}
Убедитесь, что ваши устройства имеют общую землю для правильной настройки.
UART (универсальный асинхронный приемник-передатчик)
UART — это протокол асинхронной последовательной связи, который позволяет обмениваться данными между устройствами, используя только два провода: TX (передача) и RX (прием). UART обычно используется для связи с такими устройствами, как модули GPS, модули Bluetooth и другие микроконтроллеры. Каждая плата Arduino оснащена как минимум одним портом для UART.
Выводы UART на популярных платах Arduino включают в себя:
Доска |
Серийные контакты |
Serial1 Пины |
Серийный 2 контакта |
Серийный3 контакта |
---|---|---|---|---|
Уно, Нано, Мини |
0 (прием), 1 (передача) |
Н/Д |
Н/Д |
Н/Д |
Мега |
0 (прием), 1 (передача) |
19 (прием), 18 (передача) |
17 (прием), 16 (передача) |
15 (прием), 14 (передача) |
Вы можете получить полную таблицу от Онлайн-документация Arduino о последовательной связи.
Сначала подключите свои платы следующим образом:
Затем используйте этот код для платы отправителя:
пустотанастраивать(){
Серийный.начинать(9600);
}
пустотапетля(){
// Отправляем сообщение через последовательный порт каждую секунду
Серийный.печать("Привет с доски отправителя!");
задерживать(1000);
}
Код платы приемника:
пустотанастраивать(){
Серийный.начинать(9600);
}
пустотапетля(){
// Проверяем, есть ли входящие данные
если (Серийный.доступный() > 0) {
// Считать входящие данные и вывести их на серийный монитор
Нить входящие данные = Серийный.readString();
Серийный.печать(входящие данные);
}
}
Arduino Uno работает на логическом уровне 5 В, в то время как порт RS232 компьютера использует логический уровень +/- 12 В.
Прямое подключение Arduino Uno к порту RS232 может повредить вашу плату.
I2C (межинтегральная схема)
I2C — это протокол синхронной последовательной связи, который позволяет обмениваться данными между несколькими устройствами, используя только два провода: SDA (последовательные данные) и SCL (последовательные часы). I2C обычно используется для связи с датчиками, EEPROM и другими устройствами, которым необходимо передавать данные на короткие расстояния.
Контакты I2C на Arduino Uno ПДД (А4) и СКЛ (A5).
Мы создадим простую программу для установления соединения между двумя платами Arduino с использованием связи I2C. Но сначала подключите свои платы следующим образом:
Код для основной платы:
#включать
пустотанастраивать(){
Проволока.начинать(); // присоединяемся к шине I2C в качестве мастера
Серийный.начинать(9600);
}пустотапетля(){
Проволока.начатьпередачу(9); // передать на ведомое устройство с адресом 9
Проволока.писать(а); // отправляет байт 'a' на ведомое устройство
Проволока.конец передачи(); // прекращаем передачу
задерживать(500);
}
Код для ведомой платы:
#включать
пустотанастраивать(){
Проволока.начинать(9); // подключаемся к шине I2C как ведомое устройство с адресом 9
Проволока.при получении(получить событие);
Серийный.начинать(9600);
}пустотапетля(){
задерживать(100);
}
пустотаполучитьсобытие(инт байты){
пока(Проволока.доступный()) { // цикл по всем полученным байтам
уголь полученный байт = Проволока.читать(); // читаем каждый полученный байт
Серийный.печать(полученобайт); // вывести полученный байт на серийный монитор
}
}
Что такое SoftwareSerial?
Библиотека Arduino SoftwareSerial была разработана для эмуляции связи UART, позволяя осуществлять последовательную связь через любые два цифровых контакта на платах Arduino. Это полезно, когда аппаратный UART уже используется другими устройствами.
Чтобы настроить SoftwareSerial, сначала включите в скетч библиотеку SoftwareSerial.
#включать
Затем создайте экземпляр объекта SoftwareSerial, указав RX и Техас контакты, которые будут использоваться для связи.
ПОСерийныймой сериал(2, 3); // контакты RX, TX
Вот пример кода для Arduino, демонстрирующий использование SoftwareSerial:
#включать
ПОСерийныймой сериал(2, 3); // контакты RX, TX
пустотанастраивать(){
Серийный.начинать(9600); // запускаем аппаратный серийный номер
мой сериал.начинать(9600); // запускаем программный сериал
}
пустотапетля(){
если (мой сериал.доступный()) {
Серийный.писать(мой сериал.читать()); // отправляем полученные данные на аппаратный последовательный порт
}
если (Серийный.доступный()) {
мой сериал.писать(Серийный.читать()); // отправляем данные с аппаратного последовательного на программный последовательный
}
}
Серийная библиотека
Библиотека Serial — это мощный инструмент в Arduino, который обеспечивает связь между микроконтроллером и компьютером или другими устройствами через последовательное соединение. Некоторые общие функции включают в себя:
Функция |
Описание |
---|---|
Serial.begin (скорость) |
Инициализирует последовательную связь с указанной скоростью передачи данных. |
Serial.print (данные) |
Отправляет данные на последовательный порт для передачи в виде текста ASCII. |
Serial.write (данные) |
Отправляет необработанные двоичные данные через последовательный порт. |
Серийный.доступный() |
Возвращает количество байтов, доступных для чтения из последовательного буфера. |
Серийный.flush() |
Перед продолжением ожидает завершения передачи исходящих последовательных данных. |
Серийный.читать() |
Считывает первый байт входящих последовательных данных и возвращает его как целое число. |
Скорость передачи данных и формат последовательных данных
Скорость передачи относится к скорости, с которой данные передаются по последовательному соединению. Он представляет собой количество битов, которые передаются в секунду. Скорость передачи данных должна быть одинаковой как для отправителя, так и для получателя, иначе связь может быть искажена или вообще не работать. Общие скорости передачи для Arduino включают 9600, 19200, 38400 и 115200.
Формат последовательных данных относится к структуре данных, отправляемых через последовательное соединение. Формат последовательных данных состоит из трех основных компонентов: стартовые биты, биты данных и стоповые биты.
- Биты данных: Количество битов, используемых для представления одного байта данных.
- Паритет: Необязательный бит, используемый для проверки ошибок. В зависимости от требований коммуникационного канала можно установить отсутствие четности, четную или нечетную четность.
- Стоповые биты: Количество битов, используемых для обозначения конца байта данных.
Формат данных должен быть одинаковым как на передающем, так и на принимающем устройствах, чтобы обеспечить надлежащую связь. Вот пример того, как вы можете установить определенные форматы данных:
пустотанастраивать(){
// Установите последовательную связь со скоростью 9600 бод, 8 битами данных, без четности и 1 стоповым битом
Серийный.начинать(9600, СЕРИЙНЫЙ_8N1);
}
Здесь, SERIAL_8N1 представляет формат данных с 8 биты данных, отсутствие четности и 1 стоп бит. Другие варианты, такие как SERIAL_7E1, SERIAL_8O2и т. д., могут использоваться в зависимости от конкретных требований проекта.
Серийный разговор
Платы Arduino предоставляют различные варианты последовательной связи, которые обеспечивают эффективный и надежный обмен данными между устройствами. Поняв, как настроить протоколы последовательной связи в Arduino IDE, вы сможете использовать возможности распределенной обработки или значительно сократить количество проводов, используемых в ваших проектах.