INHOUDSOPGAWE:

Seriële kommunikasie van Arduino: 5 stappe
Seriële kommunikasie van Arduino: 5 stappe

Video: Seriële kommunikasie van Arduino: 5 stappe

Video: Seriële kommunikasie van Arduino: 5 stappe
Video: Lesson 05: Introduction to Serial Monitor | Robojax Arduino Step By Step Course 2024, November
Anonim
Arduino seriële kommunikasie
Arduino seriële kommunikasie

Baie Arduino -projekte maak staat op die oordrag van data tussen verskeie Arduino's.

Of u nou 'n stokperdjie is wat 'n RC -motor, 'n RC -vliegtuig bou of 'n weerstasie met 'n afstandskerm ontwerp, u moet weet hoe u reële data betroubaar van die een Arduino na die ander kan oordra. Ongelukkig is dit vir stokperdjies moeilik om seriële datakommunikasie in hul eie projekte te laat werk, omdat seriële data as 'n stroom grepe gestuur word.

Sonder enige konteks in die stroom van grepe, is dit byna onmoontlik om die data te interpreteer. Sonder dat u die data kan interpreteer, kan u Arduinos nie betroubaar kommunikeer nie. Die sleutel is om hierdie konteksdata by die byte -stroom te voeg deur 'n standaard reekspakketontwerp te gebruik.

Die reeksontwerp van pakkies, pakketopvulling en ontleding van pakkies is kompleks en moeilik om te bereik. Gelukkig vir Arduino -gebruikers, is daar biblioteke beskikbaar wat al hierdie ingewikkelde logika agter die skerms kan doen, sodat u kan fokus daarop om u projek sonder ekstra kopstuk te laat werk. Hierdie instruksies gebruik die biblioteek SerialTransfer.h vir die verwerking van reekse.

Kortliks: hierdie instruksie sal beskryf hoe u robuuste seriële data maklik in enige projek kan implementeer met behulp van die biblioteek SerialTransfer.h. Raadpleeg hierdie tutoriaal as u meer wil leer oor die lae-vlak-teorie oor robuuste seriële kommunikasie.

Voorrade

  • 2 Arduino's

    Dit word sterk aangemoedig om Arduino's te gebruik wat verskeie UART's vir hardeware het (dws Arduino Mega)

  • Aansluitdraad
  • Installeer SerialTransfer.h

    Beskikbaar via die Arduino IDE se biblioteekbestuurder

Stap 1: Fisiese verbindings

Fisiese verbindings
Fisiese verbindings

By die gebruik van seriële kommunikasie moet 'n paar bedradingpunte in gedagte gehou word:

  • Maak seker dat alle gronde verbind is!
  • Arduino TX (Transmit) -pen moet aan die ander Arduino's RX (Receive) -pen gekoppel word

Stap 2: Hoe om die biblioteek te gebruik

Hoe om die biblioteek te gebruik
Hoe om die biblioteek te gebruik

Met SerialTransfer.h kan u groot hoeveelhede data maklik stuur met behulp van 'n pasgemaakte pakketprotokol. Hieronder is 'n beskrywing van al die funksies van die biblioteek - waarvan ons baie later in hierdie handleiding sal gebruik:

SerialTransfer.txBuff

Dit is 'n byte -skikking waar alle loonvragdata wat oor die reeks gestuur moet word, voor die oordrag gebuffer word. U kan hierdie buffer met grepe data vul om na 'n ander Arduino te stuur.

SerialTransfer.rxBuff

Dit is 'n byte -skikking waar alle loonvragdata wat van die ander Arduino ontvang word, gebuffer word.

SerialTransfer.bytes Lees

Die aantal laai -grepe wat die ander Arduino ontvang en in SerialTransfer.rxBuff gestoor word

SerialTransfer.begin (Stroom en _port)

Initialiseer 'n voorbeeld van die klas van die biblioteek. U kan enige 'Serial' klasvoorwerp as 'n parameter deurgee - selfs 'SoftwareSerial' klasvoorwerpe!

SerialTransfer.sendData (const uint16_t & messageLen)

Dit laat u Arduino 'messageLen' aantal grepe in die stuurbuffer na die ander Arduino stuur. Byvoorbeeld, as "messageLen" 4 is, word die eerste 4 grepe SerialTransfer.txBuff per reeks na die ander Arduino gestuur.

SerialTransfer.available ()

Dit laat u Arduino ontvou seriële data van die ander Arduino ontleed. As hierdie funksie die booleaanse "waar" teruggee, beteken dit dat 'n nuwe pakkie suksesvol ontleed is en dat die nuut ontvangde pakkie se data gestoor/beskikbaar is in SerialTransfer.rxBuff.

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

Bevat 'len' aantal grepe van 'n arbitrêre voorwerp (byte, int, float, double, struct, ens …) in die stuurbuffer wat begin by die indeks soos gespesifiseer deur die argument 'index'.

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

Lees 'len' aantal grepe uit die ontvangbuffer (rxBuff) vanaf die indeks soos gespesifiseer deur die argument 'indeks' in 'n arbitrêre voorwerp (byte, int, float, double, struct, ens …).

LET WEL:

Die maklikste manier om data oor te dra, is om eers 'n struktuur te definieer wat alle data bevat wat u wil stuur. Die Arduino aan die ontvangkant moet 'n identiese struktuur hê.

Stap 3: Stuur basiese data

Die volgende skets stuur beide die ADC -waarde van analogRead (0) en die waarde van analogRead (0) wat na spanning omgeskakel is na Arduino #2 oor.

Laai die volgende skets op na Arduino #1:

#sluit "SerialTransfer.h" in

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; dryfspanning; } data; ongeldige opstelling () {Serial.begin (115200); Reeks1.begin (115200); myTransfer.begin (reeks1); } leemte lus () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (data, sizeof (data)); myTransfer.sendData (sizeof (data)); vertraging (100); }

Stap 4: Ontvang basiese data

Die volgende kode druk die ADC- en spanningswaardes wat van Arduino #1 ontvang is, af.

Laai die volgende kode op na Arduino #2:

#sluit "SerialTransfer.h" in

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; dryfspanning; } data; ongeldige opstelling () {Serial.begin (115200); Reeks1.begin (115200); myTransfer.begin (reeks1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } anders as (myTransfer.status <0) {Serial.print ("FOUT:"); as (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); anders as (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); anders as (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Stap 5: Toets

Nadat albei sketse na hul onderskeie Arduinos gelaai is, kan u die Serial Monitor op Arduino #2 gebruik om te verifieer dat u data van Arduino #1 ontvang!

Aanbeveel: