Innehållsförteckning:

Arduino seriell kommunikation: 5 steg
Arduino seriell kommunikation: 5 steg

Video: Arduino seriell kommunikation: 5 steg

Video: Arduino seriell kommunikation: 5 steg
Video: Уроки Arduino. Общение по Serial, парсинг данных, протоколы связи 2024, Juli
Anonim
Arduino seriell kommunikation
Arduino seriell kommunikation

Många Arduino -projekt är beroende av att överföra data mellan flera Arduinos.

Oavsett om du är en hobbyist som bygger en RC -bil, ett RC -flygplan eller designar en väderstation med en fjärrdisplay, måste du veta hur du på ett tillförlitligt sätt kan överföra seriell data från en Arduino till en annan. Tyvärr är det svårt för hobbyister att få seriell datakommunikation att fungera i sina egna projekt, eftersom seriell data skickas som en ström av byte.

Utan någon form av sammanhang i byteflödet är det nästan omöjligt att tolka data. Utan att kunna tolka data kommer dina Arduinos inte att kunna kommunicera på ett tillförlitligt sätt. Nyckeln är att lägga till denna sammanhangsdata i byteflödet med hjälp av en standard seriell paketdesign.

Seriell paketdesign, paketstoppning och paketanalys är komplex och svår att uppnå. Lyckligtvis för Arduino -användare finns det bibliotek som kan göra all denna komplexa logik bakom kulisserna så att du kan fokusera på att få ditt projekt att fungera utan extra utrymme. Denna instruktionsbok använder biblioteket SerialTransfer.h för seriepaketbehandling.

Kort sagt: den här instruktionsboken kommer att gå igenom hur du enkelt kan implementera robust seriell data i alla projekt med biblioteket SerialTransfer.h. Om du vill lära dig mer om lågnivåteori om robust seriell kommunikation, se den här självstudien.

Tillbehör

  • 2 Arduinos

    Det rekommenderas starkt att du använder Arduinos som har flera hårdvaru -UART (dvs. Arduino Mega)

  • Anslutningstråd
  • Installera SerialTransfer.h

    Tillgänglig via Arduino IDE: s Libraries Manager

Steg 1: Fysiska anslutningar

Fysiska anslutningar
Fysiska anslutningar

När du använder seriell kommunikation måste du tänka på några kopplingspunkter:

  • Se till att alla grunder är anslutna!
  • Arduino TX (Transmit) pin måste anslutas till den andra Arduinos RX (Receive) pin

Steg 2: Så här använder du biblioteket

Hur man använder biblioteket
Hur man använder biblioteket

Med SerialTransfer.h kan du enkelt skicka stora mängder data med hjälp av ett anpassat paketprotokoll. Nedan finns en beskrivning av alla bibliotekets funktioner - många av dem kommer vi att använda senare i denna handledning:

SerialTransfer.txBuff

Detta är en byte -array där all nyttolastdata som ska skickas över seriell buffras före överföring. Du kan stoppa denna buffert med byte med data för att skicka till en annan Arduino.

SerialTransfer.rxBuff

Detta är en byte -array där all nyttolastdata som tas emot från den andra Arduino buffras.

SerialTransfer.bytesRead

Antalet nyttolastbyte som tas emot av den andra Arduino och lagras i SerialTransfer.rxBuff

SerialTransfer.begin (Stream & _port)

Initierar en instans av bibliotekets klass. Du kan skicka alla "Serial" klassobjekt som en parameter - även "SoftwareSerial" klassobjekt!

SerialTransfer.sendData (const uint16_t & messageLen)

Detta gör att din Arduino skickar "messageLen" antal byte i överföringsbufferten till den andra Arduino. Till exempel, om "messageLen" är 4, skickas de första 4 bytesna av SerialTransfer.txBuff via serie till den andra Arduino.

SerialTransfer.available ()

Detta gör att din Arduino analyserar alla mottagna seriella data från den andra Arduino. Om den här funktionen returnerar den booleska "true" betyder det att ett nytt paket har analyserats och det nyligen mottagna paketets data lagras/finns tillgängliga i SerialTransfer.rxBuff.

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

Fyller "len" antal byte för ett godtyckligt objekt (byte, int, float, double, struct, etc …) i överföringsbufferten som börjar vid indexet som anges av argumentet "index".

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

Läser "len" antal byte från mottagningsbufferten (rxBuff) som börjar vid indexet som anges av argumentet "index" till ett godtyckligt objekt (byte, int, float, double, struct, etc …).

NOTERA:

Det enklaste sättet att överföra data är att först definiera en struktur som innehåller all data du vill skicka. Arduino på mottagaränden bör ha en identisk struktur definierad.

Steg 3: Överför grunddata

Följande skiss överför både ADC -värdet för analogRead (0) och värdet för analogRead (0) som omvandlats till spänning till Arduino #2.

Ladda upp följande skiss till Arduino #1:

#inkludera "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; flottörspänning; } data; void setup () {Serial.begin (115200); Serial1.start (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)); fördröjning (100); }

Steg 4: Ta emot grundläggande data

Följande kod skriver ut ADC- och spänningsvärdena från Arduino #1.

Ladda upp följande kod till Arduino #2:

#inkludera "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; flottörspänning; } data; void setup () {Serial.begin (115200); Serial1.start (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.spänning); Serial.println (); } annars if (myTransfer.status <0) {Serial.print ("ERROR:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); annars om (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); annars om (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Steg 5: Testning

När båda skisserna har laddats upp till sina respektive Arduinos kan du använda Serial Monitor på Arduino #2 för att verifiera att du tar emot data från Arduino #1!

Rekommenderad: