Indholdsfortegnelse:

Arduino seriel kommunikation: 5 trin
Arduino seriel kommunikation: 5 trin

Video: Arduino seriel kommunikation: 5 trin

Video: Arduino seriel kommunikation: 5 trin
Video: Lesson 05: Introduction to Serial Monitor | Robojax Arduino Step By Step Course 2024, November
Anonim
Arduino seriel kommunikation
Arduino seriel kommunikation

Mange Arduino -projekter er afhængige af at overføre data mellem flere Arduinoer.

Uanset om du er en hobbyist, der bygger en RC -bil, et RC -fly eller designer en vejrstation med et fjerndisplay, skal du vide, hvordan du pålideligt kan overføre serielle data fra en Arduino til en anden. Desværre er det svært for hobbyfolk at få seriel datakommunikation til at fungere i deres egne projekter, fordi serielle data sendes som en strøm af bytes.

Uden nogen form for kontekst i bytesstrømmen er det næsten umuligt at fortolke dataene. Uden at kunne fortolke dataene, vil dine Arduinos ikke være i stand til at kommunikere pålideligt. Nøglen er at tilføje disse kontekstdata til byte -strømmen ved hjælp af et standard serielt pakkedesign.

Seriel pakkedesign, pakkestopning og pakkeanalyse er kompleks og vanskelig at opnå. Heldigvis for Arduino -brugere er der biblioteker til rådighed, der kan gøre alt denne komplekse logik bag kulisserne, så du kan fokusere på at få dit projekt til at fungere uden ekstra headace. Denne instruks vil bruge biblioteket SerialTransfer.h til seriel pakkebehandling.

Kort sagt: denne instruktør vil beskrive, hvordan du nemt kan implementere robuste seriedata i ethvert projekt ved hjælp af biblioteket SerialTransfer.h. Hvis du vil lære mere om teorien på lavt niveau om robust seriel kommunikation, kan du se denne vejledning.

Forbrugsvarer

  • 2 Arduinos

    Det tilrådes stærkt, at du bruger Arduinos, der har flere hardware UART'er (dvs. Arduino Mega)

  • Tilslutningstråd
  • Installer SerialTransfer.h

    Tilgængelig via Arduino IDE's Libraries Manager

Trin 1: Fysiske forbindelser

Fysiske forbindelser
Fysiske forbindelser

Når du bruger seriel kommunikation, skal du huske på et par ledningspunkter:

  • Sørg for, at alle grunde er forbundet!
  • Arduino TX (Transmit) pin skal tilsluttes den anden Arduino's RX (Receive) pin

Trin 2: Sådan bruges biblioteket

Sådan bruges biblioteket
Sådan bruges biblioteket

SerialTransfer.h giver dig mulighed for nemt at sende store mængder data ved hjælp af en brugerdefineret pakkeprotokol. Nedenfor er en beskrivelse af alle bibliotekets funktioner - mange af dem vil vi bruge senere i denne vejledning:

SerialTransfer.txBuff

Dette er et byte -array, hvor alle nyttelastdata, der skal sendes over seriel, bufres før transmission. Du kan proppe denne buffer med bytes med data for at sende til en anden Arduino.

SerialTransfer.rxBuff

Dette er et byte -array, hvor alle nyttelastdata, der modtages fra den anden Arduino, bufferes.

SerialTransfer.bytesRead

Antallet af nyttelastbytes modtaget af den anden Arduino og gemt i SerialTransfer.rxBuff

SerialTransfer.begin (Stream & _port)

Initialiserer en forekomst af bibliotekets klasse. Du kan sende ethvert "Serial" klasseobjekt som en parameter - selv "SoftwareSerial" klasseobjekter!

SerialTransfer.sendData (const uint16_t & messageLen)

Dette får din Arduino til at sende "messageLen" -byte i overførselsbufferen til den anden Arduino. For eksempel, hvis "messageLen" er 4, vil de første 4 bytes af SerialTransfer.txBuff blive sendt via serie til den anden Arduino.

SerialTransfer.available ()

Dette får din Arduino til at analysere alle modtagne serielle data fra den anden Arduino. Hvis denne funktion returnerer den boolske "sand", betyder det, at en ny pakke er blevet analyseret, og den nyligt modtagne pakkes data er gemt/tilgængelige i SerialTransfer.rxBuff.

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

Stuffer "len" antal bytes af et vilkårligt objekt (byte, int, float, double, struct, osv …) i transmitteringsbufferen, der starter ved indekset som angivet af argumentet "index".

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

Læser "len" antal bytes fra modtagerbufferen (rxBuff), der starter ved indekset som angivet af argumentet "indeks", til et vilkårligt objekt (byte, int, float, double, struct osv …).

BEMÆRK:

Den letteste måde at overføre data på er først at definere en struktur, der indeholder alle data, du vil sende. Arduino i den modtagende ende skal have en identisk struktur defineret.

Trin 3: Overfør grundlæggende data

Den følgende skitse transmitterer både ADC -værdien af analogRead (0) og værdien af analogRead (0), der er konverteret til spænding til Arduino #2.

Upload følgende skitse til Arduino #1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; flyde spænding; } data; ugyldig opsætning () {Serial.begin (115200); Seriel1.begyndt (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.spænding = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (data, sizeof (data)); myTransfer.sendData (sizeof (data)); forsinkelse (100); }

Trin 4: Modtag grundlæggende data

Den følgende kode udskriver ADC- og spændingsværdierne modtaget fra Arduino #1.

Upload følgende kode til Arduino #2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; flyde spænding; } data; ugyldig opsætning () {Serial.begin (115200); Seriel1.begyndt (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.spænding); Serial.println (); } ellers hvis (myTransfer.status <0) {Serial.print ("FEJL:"); hvis (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); ellers hvis (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); ellers hvis (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Trin 5: Test

Når begge skitser er blevet uploadet til deres respektive Arduinos, kan du bruge Serial Monitor på Arduino #2 til at kontrollere, at du modtager data fra Arduino #1!

Anbefalede: