Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Fysiske forbindelser
- Trinn 2: Slik bruker du biblioteket
- Trinn 3: Overfør grunnleggende data
- Trinn 4: Motta grunnleggende data
- Trinn 5: Testing
Video: Arduino seriell kommunikasjon: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Mange Arduino -prosjekter er avhengige av å overføre data mellom flere Arduinoer.
Enten du er en hobbyist som bygger en RC -bil, et RC -fly eller designer en værstasjon med en ekstern skjerm, må du vite hvordan du på en pålitelig måte kan overføre serielle data fra en Arduino til en annen. Dessverre er det vanskelig for hobbyfolk å få seriell datakommunikasjon til å fungere i sine egne prosjekter. Dette er fordi serielle data sendes som en strøm av byte.
Uten noen form for kontekst i strømmen av byte, er det nesten umulig å tolke dataene. Uten å kunne tolke dataene, vil Arduinos ikke kunne kommunisere pålitelig. Nøkkelen er å legge til disse kontekstdataene i byte -strømmen ved å bruke en standard seriepakkedesign.
Seriell pakkeutforming, pakkefylling og pakkeanalyse er kompleks og vanskelig å oppnå. Heldigvis for Arduino -brukere er det tilgjengelige biblioteker som kan gjøre all denne komplekse logikken bak kulissene, slik at du kan fokusere på å få prosjektet til å fungere uten ekstra hodehøyde. Denne instruksen vil bruke biblioteket SerialTransfer.h til seriepakkebehandling.
Kort sagt: Denne instruksen vil gå gjennom hvordan du enkelt kan implementere robuste seriedata i ethvert prosjekt ved å bruke biblioteket SerialTransfer.h. Hvis du vil lære mer om teorien på lavt nivå om robust seriell kommunikasjon, kan du se denne opplæringen.
Rekvisita
-
2 Arduinos
Det anbefales sterkt at du bruker Arduinos som har flere UART -er (dvs. Arduino Mega)
- Tilkoblingskabel
-
Installer SerialTransfer.h
Tilgjengelig via Arduino IDE's Libraries Manager
Trinn 1: Fysiske forbindelser
Når du bruker seriekommunikasjon, må du huske på noen ledningspunkter:
- Sørg for at alle grunner er tilkoblet!
- Arduino TX (Transmit) pin må kobles til den andre Arduino's RX (Receive) pin
Trinn 2: Slik bruker du biblioteket
Med SerialTransfer.h kan du enkelt sende store datamengder ved hjelp av en tilpasset pakkeprotokoll. Nedenfor er en beskrivelse av alle bibliotekets funksjoner - mange av dem vil vi bruke senere i denne opplæringen:
SerialTransfer.txBuff
Dette er en byte -matrise der alle nyttelastdata som skal sendes over seriell blir bufret før overføring. Du kan fylle denne bufferen med byte med data for å sende til en annen Arduino.
SerialTransfer.rxBuff
Dette er en byte -matrise der alle nyttelastdata mottatt fra den andre Arduino blir bufret.
SerialTransfer.bytesRead
Antall nyttelastbyte mottatt av den andre Arduino og lagret i SerialTransfer.rxBuff
SerialTransfer.begin (Stream & _port)
Initialiserer en forekomst av bibliotekets klasse. Du kan sende ethvert "Serial" klasseobjekt som parameter - til og med "SoftwareSerial" klasseobjekter!
SerialTransfer.sendData (const uint16_t & messageLen)
Dette får din Arduino til å sende "messageLen" antall byte i overføringsbufferen til den andre Arduino. For eksempel, hvis "messageLen" er 4, vil de første 4 byte av SerialTransfer.txBuff bli sendt via serie til den andre Arduino.
SerialTransfer.available ()
Dette får din Arduino til å analysere mottatte serielle data fra den andre Arduino. Hvis denne funksjonen returnerer den boolske "true", betyr det at en ny pakke har blitt analysert og at den nylig mottatte pakkens data er lagret/tilgjengelig i SerialTransfer.rxBuff.
SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Stuffer "len" antall byte til et vilkårlig objekt (byte, int, float, double, struct, etc …) i overføringsbufferen som starter ved indeksen som spesifisert av argumentet "index".
SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Leser "len" antall byte fra mottaksbufferen (rxBuff) som starter ved indeksen som angitt av argumentet "indeks" til et vilkårlig objekt (byte, int, float, double, struct, etc …).
MERK:
Den enkleste måten å overføre data på er å først definere en struktur som inneholder alle dataene du vil sende. Arduino på mottakerenden bør ha en identisk struktur definert.
Trinn 3: Overfør grunnleggende data
Følgende skisse overfører både ADC -verdien til analogRead (0) og verdien til analogRead (0) konvertert til spenning til Arduino #2.
Last opp følgende skisse til Arduino #1:
#include "SerialTransfer.h"
SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; flytespenning; } data; ugyldig oppsett () {Serial.begin (115200); Seriell1.begynner (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (data, sizeof (data)); myTransfer.sendData (sizeof (data)); forsinkelse (100); }
Trinn 4: Motta grunnleggende data
Følgende kode skriver ut ADC- og spenningsverdiene mottatt fra Arduino #1.
Last opp følgende kode til Arduino #2:
#include "SerialTransfer.h"
SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; flytespenning; } data; ugyldig oppsett () {Serial.begin (115200); Seriell1.begynner (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.spenning); Serial.println (); } annet hvis (myTransfer.status <0) {Serial.print ("FEIL:"); 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")); }}
Trinn 5: Testing
Når begge skissene er lastet opp til sine respektive Arduinos, kan du bruke Serial Monitor på Arduino #2 for å bekrefte at du mottar data fra Arduino #1!
Anbefalt:
Raspberry PI 3 - Aktiver seriell kommunikasjon til TtyAMA0 til BCM GPIO 14 og GPIO 15: 9 trinn
Raspberry PI 3 - Aktiver seriell kommunikasjon til TtyAMA0 til BCM GPIO 14 og GPIO 15: Jeg hadde nylig interesse for å aktivere UART0 på min Raspberry Pi (3b) slik at jeg kunne koble den direkte til en RS -232 signalnivåenhet ved hjelp av en standard 9 -nål d-sub-kontakt uten å måtte gå gjennom en USB til RS-232 adapter. En del av min interesse
PIC MCU og Python seriell kommunikasjon: 5 trinn
PIC MCU og Python seriell kommunikasjon: Hei, folkens! I dette prosjektet vil jeg prøve å forklare eksperimentene mine på PIC MCU og Python seriell kommunikasjon. Over internett er det mange opplæringsprogrammer og videoer om hvordan du kommuniserer med PIC MCU over virtuell terminal, noe som er veldig nyttig. Howev
Arduino og Python seriell kommunikasjon - tastaturvisning: 4 trinn
Arduino og Python seriell kommunikasjon - tastaturvisning: Dette prosjektet er laget for mac -brukere, men det kan også implementeres for Linux og Windows, det eneste trinnet som bør være annerledes er installasjonen
Trådløs seriell kommunikasjon ved hjelp av Bluefruit: 4 trinn
Trådløs seriekommunikasjon ved hjelp av Bluefruit: Her er en enkel trinnvis veiledning for å bytte ut ledningene dine med en Bluetooth lavenergitilkobling: Det tok meg en stund å finne ut av dette fordi det knapt er dokumentasjon på hvordan jeg gjør dette med moderne Bluetooth lavenergiteknologi som som Bluefrui
Nettbasert SmartMirror ved bruk av seriell kommunikasjon: 6 trinn
Nettbasert SmartMirror ved bruk av seriell kommunikasjon: Denne instruksjonen leveres med all koden klar til bruk. Utviklingen var veldig komplisert, men når den er satt opp, er den veldig enkel å tilpasse. Ta en titt og nyt;)