Оглавление:

Последовательная связь Arduino: 5 шагов
Последовательная связь Arduino: 5 шагов

Видео: Последовательная связь Arduino: 5 шагов

Видео: Последовательная связь Arduino: 5 шагов
Видео: Аналоговые входы (АЦП) #5 | Arduino - учимся программировать (обучающие уроки) 2024, Июль
Anonim
Последовательная связь Arduino
Последовательная связь Arduino

Многие проекты Arduino полагаются на передачу данных между несколькими Arduino.

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

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

Разработка последовательных пакетов, заполнение пакетов и анализ пакетов сложны и труднодостижимы. К счастью для пользователей Arduino, доступны библиотеки, которые могут выполнять всю эту сложную логику за кулисами, поэтому вы можете сосредоточиться на том, чтобы заставить свой проект работать без лишних усилий. Этот Instructable будет использовать библиотеку SerialTransfer.h для обработки последовательных пакетов.

Вкратце: это руководство расскажет, как легко реализовать надежные последовательные данные в любом проекте с помощью библиотеки SerialTransfer.h. Если вы хотите узнать больше о низкоуровневой теории надежной последовательной связи, см. Это руководство.

Запасы

  • 2 Ардуино

    Настоятельно рекомендуется использовать Arduinos с несколькими аппаратными UART (например, Arduino Mega)

  • Монтажный провод
  • Установите SerialTransfer.h

    Доступно через диспетчер библиотек Arduino IDE

Шаг 1. Физические соединения

Физические соединения
Физические соединения

При использовании последовательной связи необходимо учитывать несколько точек подключения:

  • Убедитесь, что все заземления подключены!
  • Контакт Arduino TX (передача) должен быть подключен к другому контакту RX (прием) Arduino.

Шаг 2: Как использовать библиотеку

Как пользоваться библиотекой
Как пользоваться библиотекой

SerialTransfer.h позволяет легко отправлять большие объемы данных с использованием настраиваемого пакетного протокола. Ниже приводится описание всех функций библиотеки, многие из которых мы будем использовать позже в этом руководстве:

SerialTransfer.txBuff

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

SerialTransfer.rxBuff

Это байтовый массив, в котором буферизируются все данные полезной нагрузки, полученные от другого Arduino.

SerialTransfer.bytesRead

Количество байтов полезной нагрузки, полученных другим Arduino и сохраненных в SerialTransfer.rxBuff.

SerialTransfer.begin (поток и _port)

Инициализирует экземпляр класса библиотеки. Вы можете передать в качестве параметра любой объект класса "Serial" - даже объекты класса "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t и messageLen)

Это заставляет ваш Arduino отправлять количество байтов "messageLen" в буфере передачи на другой Arduino. Например, если messageLen равно 4, первые 4 байта SerialTransfer.txBuff будут отправлены через последовательный порт на другой Arduino.

SerialTransfer.available ()

Это заставляет ваш Arduino анализировать любые полученные последовательные данные от другого Arduino. Если эта функция возвращает логическое значение «истина», это означает, что новый пакет был успешно проанализирован и данные нового полученного пакета сохранены / доступны в SerialTransfer.rxBuff.

SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

Заполняет "len" байтов произвольного объекта (byte, int, float, double, struct и т.д.) в буфер передачи, начиная с индекса, указанного аргументом "index".

SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

Считывает "len" байтов из приемного буфера (rxBuff), начиная с индекса, указанного аргументом "index", в произвольный объект (byte, int, float, double, struct и т. Д.…).

ЗАМЕТКА:

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

Шаг 3. Передача основных данных

Следующий эскиз передает как значение АЦП analogRead (0), так и значение analogRead (0), преобразованное в напряжение, в Arduino # 2.

Загрузите следующий скетч в Arduino # 1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; плавающее напряжение; } данные; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (данные, sizeof (данные)); myTransfer.sendData (sizeof (данные)); задержка (100); }

Шаг 4: Получите основные данные

Следующий код печатает значения АЦП и напряжения, полученные от Arduino # 1.

Загрузите следующий код в Arduino # 2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; плавающее напряжение; } данные; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (данные, sizeof (данные)); Serial.print (data.adcVal); Серийный принт (''); Serial.println (данные. Напряжение); Serial.println (); } иначе, если (myTransfer.status <0) {Serial.print ("ОШИБКА:"); если (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); иначе, если (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); иначе, если (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Шаг 5: Тестирование

После того, как оба эскиза были загружены в соответствующие Arduino, вы можете использовать Serial Monitor на Arduino # 2, чтобы убедиться, что вы получаете данные от Arduino # 1!

Рекомендуемые: