Sadržaj:

Arduino serijska komunikacija: 5 koraka
Arduino serijska komunikacija: 5 koraka

Video: Arduino serijska komunikacija: 5 koraka

Video: Arduino serijska komunikacija: 5 koraka
Video: Arduino Programming Serial Communication vs Parallel Communication Episode-5 2024, Srpanj
Anonim
Arduino serijska komunikacija
Arduino serijska komunikacija

Mnogi Arduino projekti oslanjaju se na prijenos podataka između nekoliko Arduino.

Bilo da ste hobist koji gradi RC automobil, RC zrakoplov ili projektira meteorološku stanicu s udaljenim zaslonom, morat ćete znati kako pouzdano prenijeti serijske podatke s jednog Arduina na drugi. Nažalost, hobistima je teško uspostaviti komunikaciju serijskim podacima u vlastitim projektima. To je zato što se serijski podaci šalju kao niz bajtova.

Bez ikakvog konteksta unutar niza bajtova, gotovo je nemoguće interpretirati podatke. Bez mogućnosti tumačenja podataka, vaš Arduinos neće moći pouzdano komunicirati. Ključ je u dodavanju ovih kontekstnih podataka u stream bajtova korištenjem standardnog dizajna serijskog paketa.

Dizajn serijskog paketa, punjenje paketa i raščlanjivanje paketa složeni su i teško ih je postići. Srećom za korisnike Arduina, dostupne su knjižnice koje mogu izvesti svu ovu složenu logiku iza kulisa pa se možete usredotočiti na to da vaš projekt radi bez dodatne glavobolje. Ovaj Instructable će koristiti biblioteku SerialTransfer.h za obradu serijskog paketa.

Ukratko: ovaj Instructable će razmotriti kako možete jednostavno implementirati robusne serijske podatke u bilo koji projekt pomoću biblioteke SerialTransfer.h. Ako želite saznati više o teoriji niske razine o robusnoj serijskoj komunikaciji, pogledajte ovaj vodič.

Pribor

  • 2 Arduinosa

    Preporučuje se korištenje Arduinosa koji ima više hardverskih UART -ova (tj. Arduino Mega)

  • Spojna žica
  • Instalirajte SerialTransfer.h

    Dostupno putem upravitelja biblioteka Arduino IDE -a

Korak 1: Fizičke veze

Fizičke veze
Fizičke veze

Prilikom korištenja serijske komunikacije potrebno je imati na umu nekoliko točaka ožičenja:

  • Provjerite jesu li svi uzemljeni spojeni!
  • Arduino TX (odašiljač) pin mora biti spojen na drugi Arduino RX (prijem) pin

2. korak: Kako koristiti biblioteku

Kako koristiti biblioteku
Kako koristiti biblioteku

SerialTransfer.h omogućuje vam jednostavno slanje velikih količina podataka pomoću prilagođenog protokola paketa. Dolje je opis svih značajki knjižnice - mnoge ćemo koristiti kasnije u ovom vodiču:

SerialTransfer.txBuff

Ovo je niz bajtova u kojem se svi podaci o korisnom opterećenju koji se šalju preko serijske memorije memoriraju prije prijenosa. Ovaj međuspremnik možete napuniti bajtovima podataka za slanje na drugi Arduino.

SerialTransfer.rxBuff

Ovo je niz bajtova u kojem se svi podaci o korisnom opterećenju primljeni s drugog Arduina čuvaju u međuspremniku.

SerialTransfer.bytesRead

Broj bajtova korisnog opterećenja koje je drugi Arduino primio i pohranio u SerialTransfer.rxBuff

SerialTransfer.begin (Stream & _port)

Inicijalizira instancu klase knjižnice. Možete proslijediti bilo koji objekt klase "Serial" kao parametar - čak i objekte klase "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t & messageLen)

Zbog toga vaš Arduino šalje "messageLen" broj bajtova u međuspremniku za prijenos drugom Arduinu. Na primjer, ako je "messageLen" 4, prva 4 bajta SerialTransfer.txBuff bit će poslana serijski na drugi Arduino.

SerialTransfer.available ()

Time vaš Arduino analizira sve primljene serijske podatke s drugog Arduina. Ako ova funkcija vrati logičko "true", to znači da je novi paket uspješno raščlanjen i da su podaci novo primljenog paketa pohranjeni/dostupni u SerialTransfer.rxBuff.

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

Ubacuje "len" broj bajtova proizvoljnog objekta (byte, int, float, double, struct, itd …) u međuspremnik za prijenos koji počinje od indeksa kako je navedeno u argumentu "index".

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

Čita "len" broj bajtova iz međuspremnika za primanje (rxBuff) počevši od indeksa kako je specificirano argumentom "index" u proizvoljan objekt (byte, int, float, double, struct, itd …).

BILJEŠKA:

Najjednostavniji način prijenosa podataka je prvo definirati strukturu koja sadrži sve podatke koje želite poslati. Arduino na prijemnom kraju trebao bi imati definiranu identičnu strukturu.

Korak 3: Prijenos osnovnih podataka

Sljedeća skica prenosi i ADC vrijednost analogRead (0) i vrijednost analogRead (0) pretvorenu u napon u Arduino #2.

Prenesite sljedeću skicu na Arduino #1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; plivajući napon; } podaci; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serijski1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (podaci, veličina (podaci)); myTransfer.sendData (sizeof (podaci)); kašnjenje (100); }

Korak 4: Primite osnovne podatke

Sljedeći kod ispisuje vrijednosti ADC -a i napona primljene od Arduina #1.

Prenesite sljedeći kod na Arduino #2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; plivajući napon; } podaci; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serijski1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (podaci, veličina (podaci)); Serijski.ispis (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("POGREŠKA:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); else if (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); else if (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Korak 5: Testiranje

Nakon što su obje skice učitane na odgovarajući Arduinos, možete upotrijebiti Serijski monitor na Arduinu #2 kako biste potvrdili da primate podatke s Arduina #1!

Preporučeni: