Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Fysiske forbindelser
- Trin 2: Sådan bruges biblioteket
- Trin 3: Overfør grundlæggende data
- Trin 4: Modtag grundlæggende data
- Trin 5: Test
Video: Arduino seriel kommunikation: 5 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
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
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
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:
Raspberry PI 3 - Aktiver seriel kommunikation til TtyAMA0 til BCM GPIO 14 og GPIO 15: 9 trin
Raspberry PI 3 - Aktiver seriel kommunikation til TtyAMA0 til BCM GPIO 14 og GPIO 15: Jeg havde for nylig interesse i at aktivere UART0 på min Raspberry Pi (3b), så jeg kunne tilslutte den direkte til en RS -232 signalniveauenhed ved hjælp af en standard 9 -pind d-sub-stik uden at skulle gå gennem en USB til RS-232 adapter. En del af min interesse
PIC MCU og Python seriel kommunikation: 5 trin
PIC MCU og Python seriel kommunikation: Hej, fyre! I dette projekt vil jeg forsøge at forklare mine eksperimenter med PIC MCU og Python seriel kommunikation. Over internettet er der mange selvstudier og videoer om, hvordan man kommunikerer med PIC MCU over virtuel terminal, hvilket er meget nyttigt. Howev
Arduino og Python seriel kommunikation - tastaturdisplay: 4 trin
Arduino og Python seriel kommunikation - tastaturvisning: Dette projekt er lavet til mac -brugere, men det kan også implementeres til Linux og Windows, det eneste trin, der burde være anderledes, er installationen
Trådløs seriel kommunikation ved hjælp af Bluefruit: 4 trin
Trådløs seriel kommunikation ved hjælp af Bluefruit: Her er en simpel trin for trin guide til at udskifte dine ledninger med en bluetooth lavenergiforbindelse: Det tog mig et stykke tid at finde ud af dette, fordi der næsten ikke er dokumentation for at gøre dette med moderne bluetooth lavenergiteknologi, f.eks. som Bluefrui
Web-baseret SmartMirror ved hjælp af seriel kommunikation: 6 trin
Web-baseret SmartMirror ved hjælp af seriel kommunikation: Denne instruktør leveres med al koden klar til brug. Udviklingen var meget kompliceret, men når den er konfigureret, er den virkelig let at tilpasse. Tag et kig og nyd den;)