Sadržaj:

Arduino serijska komunikacija: 5 koraka
Arduino serijska komunikacija: 5 koraka
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 avion ili dizajnira meteorološku stanicu s udaljenim ekranom, morat ćete znati kako pouzdano prenijeti serijske podatke s jednog Arduina na drugi. Nažalost, hobistima je teško postići da serijska komunikacija podataka radi 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 tok bajtova korištenjem standardnog dizajna serijskog paketa.

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

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

Supplies

  • 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 Arduino IDE -ovog upravitelja biblioteka

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 (Transmit) pin mora biti povezan s drugim Arduino RX (Receive) pinom

Korak 2: Kako koristiti biblioteku

Kako koristiti biblioteku
Kako koristiti biblioteku

SerialTransfer.h vam omogućuje jednostavno slanje velikih količina podataka pomoću prilagođenog protokola paketa. Ispod je opis svih značajki biblioteke - 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 serijski memoriraju prije prijenosa. Ovaj bafer možete napuniti bajtovima podataka za slanje na drugi Arduino.

SerialTransfer.rxBuff

Ovo je niz bajtova u kojem se memoriraju svi podaci o korisnom opterećenju primljeni s drugog Arduina.

SerialTransfer.bytesRead

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

SerialTransfer.begin (Stream & _port)

Inicijalizira instancu klase biblioteke. 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 će biti 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 "indeks" u proizvoljan objekt (bajt, int, float, double, struct, itd …).

BILJEŠKA:

Najlakši 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: Prenesite osnovne podatke

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 (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (podaci, veličina (podaci)); myTransfer.sendData (sizeof (data)); kašnjenje (100); }

Korak 4: Primite osnovne podatke

Sljedeći kod ispisuje ADC i vrijednosti 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 (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (podaci, veličina (podaci)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("GREŠ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 koristiti serijski monitor na Arduinu #2 da biste potvrdili da primate podatke s Arduina #1!

Preporučuje se: