Përmbajtje:

Komunikimi Serial Arduino: 5 hapa
Komunikimi Serial Arduino: 5 hapa

Video: Komunikimi Serial Arduino: 5 hapa

Video: Komunikimi Serial Arduino: 5 hapa
Video: Lesson 05: Introduction to Serial Monitor | Robojax Arduino Step By Step Course 2024, Korrik
Anonim
Komunikimi Serial Arduino
Komunikimi Serial Arduino

Shumë projekte Arduino mbështeten në transmetimin e të dhënave midis disa Arduinos.

Pavarësisht nëse jeni një hobiist që po ndërton një makinë RC, një aeroplan RC ose po harton një stacion moti me një ekran të largët, do t'ju duhet të dini se si të transferoni me besueshmëri të dhënat serike nga një Arduino në tjetrin. Fatkeqësisht, është e vështirë për hobistët të marrin komunikim të të dhënave serike duke punuar në projektet e tyre. Kjo është për shkak se të dhënat serike dërgohen si një rrjedhë e bajtëve.

Pa asnjë lloj konteksti brenda rrjedhës së bajtëve, është pothuajse e pamundur të interpretohen të dhënat. Pa qenë në gjendje të interpretoni të dhënat, Arduinos tuaj nuk do të jenë në gjendje të komunikojnë me besueshmëri. Çelësi është që të shtoni këto të dhëna konteksti në rrjedhën e bajtit duke përdorur një dizajn standard të paketave serike.

Dizajni serik i paketave, mbushja e paketave dhe analizimi i paketave është kompleks dhe i vështirë për t'u arritur. Për fat të mirë për përdoruesit e Arduino, ka biblioteka të disponueshme që mund të bëjnë të gjithë këtë logjikë komplekse prapa skenave, kështu që ju mund të përqendroheni në zbatimin e projektit tuaj pa ndonjë shtesë shtesë. Ky Instructable do të përdorë bibliotekën SerialTransfer.h për përpunimin serik të paketave.

Shkurtimisht: ky Instructable do të përshkruajë sesi mund të zbatoni të dhëna serike të fuqishme me lehtësi në çdo projekt duke përdorur bibliotekën SerialTransfer.h. Nëse doni të mësoni më shumë rreth teorisë së nivelit të ulët mbi komunikimin e fuqishëm serik, shihni këtë tutorial.

Furnizimet

  • 2 Arduinos

    Isshtë shumë e inkurajuar që të përdorni Arduinos që kanë UART të shumtë të harduerit (dmth. Arduino Mega)

  • Teli lidhës
  • Instaloni SerialTransfer.h

    E disponueshme përmes Menaxherit të Bibliotekave të Arduino IDE

Hapi 1: Lidhjet fizike

Lidhjet Fizike
Lidhjet Fizike

Kur përdorni komunikimin serik, duhet të keni parasysh disa pika të telave:

  • Sigurohuni që të gjitha bazat janë të lidhura!
  • Kodi Arduino TX (Transmeto) duhet të lidhet me kunjin tjetër të Arduino RX (Merr)

Hapi 2: Si të përdorni bibliotekën

Si të përdorni bibliotekën
Si të përdorni bibliotekën

SerialTransfer.h ju lejon të dërgoni me lehtësi sasi të mëdha të të dhënave duke përdorur një protokoll të paketave të personalizuara. Më poshtë është një përshkrim i të gjitha veçorive të bibliotekës - shumë prej të cilave do t'i përdorim më vonë në këtë tutorial:

SerialTransfer.txBuff

Ky është një grup byte ku të gjitha të dhënat e ngarkesës që do të dërgohen në seri ruhen para transmetimit. Ju mund ta mbushni këtë tampon me bajt të të dhënave për t'i dërguar në një Arduino tjetër.

SerialTransfer.rxBuff

Ky është një grup byte ku të gjitha të dhënat e ngarkesës të marra nga Arduino tjetër janë të ruajtura.

SerialTransfer.bytesRead

Numri i bajtëve të ngarkesës të marrë nga Arduino tjetër dhe të ruajtur në SerialTransfer.rxBuff

SerialTransfer.begin (Transmeto & _port)

Fillon një shembull të klasës së bibliotekës. Ju mund të kaloni çdo objekt të klasës "Serial" si parametër - madje edhe objekte të klasës "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t & messageLen)

Kjo e bën Arduino -n tuaj të dërgojë "mesazhLen" numër bajtësh në tamponin e transmetimit te Arduino -ja tjetër. Për shembull, nëse "messageLen" është 4, 4 bajtët e parë të SerialTransfer.txBuff do t'i dërgohen përmes serisë Arduino -s tjetër.

SerialTransfer. I disponueshëm ()

Kjo e bën Arduino -n tuaj të analizojë çdo të dhënë serike të marrë nga Arduino -ja tjetër. Nëse ky funksion e kthen boolean "true", do të thotë që një pako e re është analizuar me sukses dhe të dhënat e pakos së sapo marrë janë të ruajtura/të disponueshme në SerialTransfer.rxBuff.

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

Mbush "len" numrin e bajtëve të një objekti arbitrar (byte, int, float, double, struct, etj …) në tamponin e transmetimit duke filluar nga indeksi siç specifikohet nga argumenti "index".

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

Lexon "len" numrin e bajtëve nga tamponi i marrjes (rxBuff) duke filluar nga indeksi siç përcaktohet nga argumenti "index" në një objekt arbitrar (byte, int, float, double, struct, etj …).

SHËNIM:

Mënyra më e lehtë për të transmetuar të dhëna është së pari të përcaktoni një strukturë që përmban të gjitha të dhënat që dëshironi të dërgoni. Arduino në anën marrëse duhet të ketë një strukturë identike të përcaktuar.

Hapi 3: Transmetoni të dhënat themelore

Skica e mëposhtme transmeton si vlerën ADC të analogRead (0) ashtu edhe vlerën e analogRead (0) të konvertuar në tension në Arduino #2.

Ngarko skicën e mëposhtme në Arduino #1:

#përfshi "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; tensioni notues; } të dhëna; void setup () {Serial.begin (115200); Serial1.fill (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (të dhëna, madhësia e (të dhënave)); myTransfer.sendData (madhësia e (të dhënave)); vonesë (100); }

Hapi 4: Merrni të dhënat themelore

Kodi i mëposhtëm printon vlerat ADC dhe tensionit të marra nga Arduino #1.

Ngarko kodin e mëposhtëm në Arduino #2:

#përfshi "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; tensioni notues; } të dhëna; void setup () {Serial.begin (115200); Serial1.fill (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (të dhëna, madhësi (të dhëna)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("GABIM:"); nëse (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); tjetër nëse (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); tjetër nëse (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Hapi 5: Testimi

Pasi të dy skicat të jenë ngarkuar në Arduinos -in e tyre përkatës, mund të përdorni Monitoruesin Serial në Arduino #2 për të verifikuar që po merrni të dhëna nga Arduino #1!

Recommended: