Innholdsfortegnelse:

Arduino seriell kommunikasjon: 5 trinn
Arduino seriell kommunikasjon: 5 trinn

Video: Arduino seriell kommunikasjon: 5 trinn

Video: Arduino seriell kommunikasjon: 5 trinn
Video: RS485 Serial Communication for Multi Channel Electric Lock Control 2024, November
Anonim
Arduino seriell kommunikasjon
Arduino seriell kommunikasjon

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

Fysiske forbindelser
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

Slik bruker du biblioteket
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: