
Съдържание:
2025 Автор: John Day | [email protected]. Последно модифициран: 2025-01-23 12:57

Много проекти на Arduino разчитат на предаване на данни между няколко Arduino.
Независимо дали сте любител, който изгражда RC автомобил, RC самолет или проектирате метеорологична станция с дистанционен дисплей, ще трябва да знаете как надеждно да прехвърляте серийни данни от един Arduino към друг. За съжаление, за любителите е трудно да накарат серийната комуникация на данни да работи в свои собствени проекти. Това е така, защото серийните данни се изпращат като поток от байтове.
Без какъвто и да е контекст в потока от байтове е почти невъзможно да се интерпретират данните. Без да можете да интерпретирате данните, вашият Arduinos няма да може да комуникира надеждно. Ключът е да добавите тези контекстни данни към байтовия поток, като използвате стандартен дизайн на сериен пакет.
Дизайнът на серийни пакети, пълненето на пакети и анализирането на пакети са сложни и трудни за постигане. За щастие на потребителите на Arduino, има налични библиотеки, които могат да изпълнят цялата тази сложна логика зад кулисите, така че да можете да се съсредоточите върху това да накарате проекта ви да работи без допълнително главоболие. Този Instructable ще използва библиотеката SerialTransfer.h за обработка на серийни пакети.
Накратко: този Instructable ще разгледа как можете лесно да внедрите стабилни серийни данни във всеки проект, използвайки библиотеката SerialTransfer.h. Ако искате да научите повече за теорията на ниското ниво за стабилна серийна комуникация, вижте този урок.
Консумативи
-
2 Arduinos
Силно се препоръчва да използвате Arduinos, които имат множество хардуерни UART (т.е. Arduino Mega)
- Тел за свързване
-
Инсталирайте SerialTransfer.h
Предлага се чрез Arduino IDE's Libraries Manager
Стъпка 1: Физически връзки

Когато използвате серийна комуникация, трябва да имате предвид няколко точки на окабеляване:
- Уверете се, че всички основания са свързани!
- Arduino TX (Transmit) щифт трябва да бъде свързан към другия RX (Receive) пин на Arduino
Стъпка 2: Как да използвате библиотеката

SerialTransfer.h ви позволява лесно да изпращате големи количества данни, използвайки персонализиран протокол за пакети. По -долу е дадено описание на всички функции на библиотеката - много от които ще използваме по -късно в този урок:
SerialTransfer.txBuff
Това е байтов масив, където всички данни за полезен товар, които трябва да се изпращат по сериен код, се буферират преди предаването. Можете да напълните този буфер с байтове данни, които да изпратите до друг Arduino.
SerialTransfer.rxBuff
Това е байтов масив, където всички данни за полезен товар, получени от другия Arduino, се буферират.
SerialTransfer.bytesRead
Броят байтове за полезен товар, получен от другия Arduino и съхранен в SerialTransfer.rxBuff
SerialTransfer.begin (Stream & _port)
Инициализира екземпляр от класа на библиотеката. Можете да предадете всеки обект от клас "Serial" като параметър - дори обекти от клас "SoftwareSerial"!
SerialTransfer.sendData (const uint16_t & messageLen)
Това прави вашия Arduino да изпраща "messageLen" брой байтове в предавателния буфер към другия Arduino. Например, ако "messageLen" е 4, първите 4 байта на SerialTransfer.txBuff ще бъдат изпратени чрез сериен код към другия Arduino.
SerialTransfer.available ()
Това кара вашия Arduino да анализира всички получени серийни данни от другия Arduino. Ако тази функция връща логическото „true“, това означава, че нов пакет е успешно анализиран и данните на новоприетия пакет са съхранени/достъпни в SerialTransfer.rxBuff.
SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Въвежда "len" брой байтове на произволен обект (байт, int, float, double, struct и т.н …) в предавателния буфер, започващ от индекса, както е посочено от аргумента "index".
SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Чете "len" броя на байтовете от буфера за получаване (rxBuff), започващ от индекса, определен от аргумента "index", в произволен обект (байт, int, float, double, struct и т.н …).
ЗАБЕЛЕЖКА:
Най -лесният начин за предаване на данни е първо да дефинирате структура, която съдържа всички данни, които искате да изпратите. Arduino на приемащия край трябва да има идентична структура.
Стъпка 3: Предаване на основни данни
Следващата скица предава както ADC стойността на 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.adcVal * 5.0) / 1023.0; myTransfer.txObj (данни, размер на (данни)); myTransfer.sendData (sizeof (данни)); забавяне (100); }
Стъпка 4: Получаване на основни данни
Следният код отпечатва стойностите на ADC и напрежението, получени от 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.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("ГРЕШКА:"); if (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: Тестване
След като и двете скици бъдат качени в съответните им Arduinos, можете да използвате серийния монитор на Arduino #2, за да потвърдите, че получавате данни от Arduino #1!
Препоръчано:
HC-05 Серийна конфигурация през Bluetooth: 10 стъпки

Последователна конфигурация на HC-05 през Bluetooth: Докато използвах устройства с Android и HC-05 Bluetooth SPP модули за някои проекти на Arduino, исках да проверя и променя скоростите на предаване на HC-05 и други параметри, без да се свързвам с USB порт на компютър. Това се превърна в това. Модулите HC-05 свързват сериен и Blu
Micro: bit MU Vision Sensor - Серийна връзка и OLED екран: 10 стъпки

Micro: bit MU Vision Sensor - Серийна връзка и OLED екран: Това е моето трето ръководство за сензора за MU зрение. Досега се опитвахме да използваме MU за разпознаване на карти с числа и форми, но за да изследваме нашия MU сензор с по -сложен проект, бихме искали да получим по -добър резултат. Не можем да получим толкова информация
PIC MCU и серийна комуникация на Python: 5 стъпки

PIC MCU и серийна комуникация на Python: Здравейте, момчета! В този проект ще се опитам да обясня експериментите си с PIC MCU и серийната комуникация на Python. В интернет има много уроци и видеоклипове за това как да комуникирате с PIC MCU през виртуален терминал, което е много полезно. Хоув
Безжична серийна комуникация с Bluefruit: 4 стъпки

Безжична серийна комуникация с помощта на Bluefruit: Ето едно просто стъпка по стъпка ръководство за подмяна на кабелите ви с Bluetooth връзка с ниска енергия: Отне ми известно време, за да разбера това, защото едва ли има документация за това с модерни технологии за ниска енергия на Bluetooth, като като Bluefrui
Уеб-базиран SmartMirror, използващ серийна комуникация: 6 стъпки

Уеб-базиран SmartMirror, използващ серийна комуникация: Тази инструкция се доставя с целия код, готов за употреба. Разработката беше много сложна, но след като е настроена, наистина е лесно да се персонализира. Разгледайте и се насладете;)