Оглавление:
- Запасы
- Шаг 1. Физические соединения
- Шаг 2: Как использовать библиотеку
- Шаг 3. Передача основных данных
- Шаг 4: Получите основные данные
- Шаг 5: Тестирование
Видео: Последовательная связь Arduino: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:49
Многие проекты 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!
Рекомендуемые:
Последовательная конфигурация HC-05 через Bluetooth: 10 шагов
Последовательная конфигурация HC-05 через Bluetooth: при использовании устройств Android и модулей HC-05 Bluetooth SPP для некоторых проектов Arduino я хотел проверить и изменить скорость передачи данных HC-05 и другие параметры без подключения к USB-порту ПК. Вот и получилось. Модули HC-05 соединяют последовательный порт и Blu
Последовательная связь PIC MCU и Python: 5 шагов
PIC MCU и последовательная связь Python: Привет, ребята! В этом проекте я попытаюсь объяснить свои эксперименты с PIC MCU и последовательной связью Python. В Интернете есть много учебных пособий и видео о том, как общаться с PIC MCU через виртуальный терминал, что очень полезно. Хауев
Последовательная связь Arduino и Python - дисплей клавиатуры: 4 шага
Последовательная связь Arduino и Python - дисплей клавиатуры: этот проект создан для пользователей Mac, но он также может быть реализован для Linux и Windows, единственный шаг, который должен отличаться, - это установка
Беспроводная последовательная связь с использованием Bluefruit: 4 шага
Беспроводная последовательная связь с использованием Bluefruit: Вот простое пошаговое руководство по замене ваших проводов на соединение с низким энергопотреблением Bluetooth: мне потребовалось время, чтобы понять это, потому что почти нет документации по выполнению этого с помощью современных технологий Bluetooth с низким энергопотреблением, таких как как Bluefrui
Последовательная связь с использованием ARM Cortex-M4: 4 шага
Последовательная связь с использованием ARM Cortex-M4: это проект на основе макета, который использует ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) для последовательной связи с использованием виртуального терминала. Выходной сигнал может быть получен на ЖК-экране 16x2, а вход для последовательной связи может быть предоставлен в Serial Mo