Съдържание:

Arduino серийна комуникация: 5 стъпки
Arduino серийна комуникация: 5 стъпки

Видео: Arduino серийна комуникация: 5 стъпки

Видео: Arduino серийна комуникация: 5 стъпки
Видео: How to use Serial Monitor in Arduino 2024, Юли
Anonim
Arduino серийна комуникация
Arduino серийна комуникация

Много проекти на 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!

Препоръчано: