Kazalo:

Arduino serijska komunikacija: 5 korakov
Arduino serijska komunikacija: 5 korakov

Video: Arduino serijska komunikacija: 5 korakov

Video: Arduino serijska komunikacija: 5 korakov
Video: Arduino Programming Serial Communication vs Parallel Communication Episode-5 2024, Julij
Anonim
Arduino serijsko komuniciranje
Arduino serijsko komuniciranje

Mnogi projekti Arduino temeljijo na prenosu podatkov med več Arduino.

Ne glede na to, ali ste ljubitelj gradnje avtomobila RC, letala RC ali oblikovanja vremenske postaje z oddaljenim zaslonom, boste morali vedeti, kako zanesljivo prenesti serijske podatke iz enega Arduina v drugega. Na žalost ljubitelji težko pridobijo serijsko podatkovno komunikacijo pri svojih projektih, ker se serijski podatki pošiljajo kot tok bajtov.

Brez kakršnega koli konteksta v toku bajtov je skoraj nemogoče razlagati podatke. Brez razlage podatkov vaš Arduinos ne bo mogel zanesljivo komunicirati. Ključno je, da te kontekstne podatke dodate v bajtni tok z uporabo standardne zasnove serijskih paketov.

Oblikovanje zaporednih paketov, polnjenje paketov in razčlenjevanje paketov je zapleteno in težko dosegljivo. Na srečo uporabnikov Arduina so na voljo knjižnice, ki lahko naredijo vso to kompleksno logiko v ozadju, tako da se lahko osredotočite na to, da bo vaš projekt deloval brez dodatnega glavobola. Ta Instructable bo za obdelavo serijskih paketov uporabljal knjižnico SerialTransfer.h.

Skratka: ta Instructable bo obravnaval, kako lahko preprosto vnesete robustne serijske podatke v kateri koli projekt s knjižnico SerialTransfer.h. Če želite izvedeti več o teoriji nizke ravni o robustni serijski komunikaciji, si oglejte to vadnico.

Zaloge

  • 2 Arduino

    Zelo priporočljivo je, da uporabljate Arduinos, ki ima več strojnih UART (tj. Arduino Mega)

  • Priključna žica
  • Namestite SerialTransfer.h

    Na voljo prek upravitelja knjižnic Arduino IDE

1. korak: Fizične povezave

Fizične povezave
Fizične povezave

Pri uporabi serijske komunikacije je treba upoštevati nekaj točk ožičenja:

  • Prepričajte se, da so vsi temelji povezani!
  • Arduino TX (Transmit) pin mora biti povezan z drugim Arduino RX (Receive) pin

2. korak: Kako uporabljati knjižnico

Kako uporabljati knjižnico
Kako uporabljati knjižnico

SerialTransfer.h vam omogoča preprosto pošiljanje velikih količin podatkov z uporabo protokola paketov po meri. Spodaj je opis vseh funkcij knjižnice - mnoge bomo uporabili kasneje v tem vodiču:

SerialTransfer.txBuff

To je niz bajtov, kjer so vsi podatki o uporabni obremenitvi, ki jih je treba poslati po zaporedju, med prenosom medpomnjeni. Ta vmesnik lahko napolnite z bajti podatkov za pošiljanje v drug Arduino.

SerialTransfer.rxBuff

To je niz bajtov, v katerem so shranjeni vsi podatki o uporabni obremenitvi, prejeti od drugega Arduina.

SerialTransfer.bytesRead

Število bajtov koristnega bremena, ki jih je prejel drugi Arduino in shranil v SerialTransfer.rxBuff

SerialTransfer.begin (Stream & _port)

Inicializira primerek razreda knjižnice. Kot parameter lahko posredujete kateri koli predmet razreda "Serial" - tudi predmete razreda "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t & messageLen)

Tako vaš Arduino pošlje število bajtov "messageLen" v medpomnilniku za prenos drugemu Arduinu. Na primer, če je "messageLen" 4, bodo prvi 4 bajti SerialTransfer.txBuff poslani serijsko na drug Arduino.

SerialTransfer.available ()

Tako vaš Arduino razčleni vse prejete serijske podatke iz drugega Arduina. Če ta funkcija vrne logično vrednost "true", to pomeni, da je bil nov paket uspešno razčlenjen in so podatki prejetega paketa shranjeni/na voljo v SerialTransfer.rxBuff.

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

Vnese "len" število bajtov poljubnega predmeta (byte, int, float, double, struct itd …) v medpomnilnik za prenos, ki se začne pri indeksu, kot je določeno z argumentom "index".

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

Prebere "len" število bajtov iz sprejemnega medpomnilnika (rxBuff), ki se začne pri indeksu, kot je podano z argumentom "indeks", v poljuben objekt (bajt, int, float, double, struct itd …).

OPOMBA:

Najlažji način za prenos podatkov je, da najprej definirate strukturo, ki vsebuje vse podatke, ki jih želite poslati. Arduino na sprejemnem koncu mora imeti definirano isto strukturo.

3. korak: Prenesite osnovne podatke

Naslednja skica prenaša vrednost ADC analogRead (0) in vrednost analogRead (0), pretvorjeno v napetost v Arduino #2.

Naložite naslednjo skico v Arduino #1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; plavajoča napetost; } podatki; 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 (podatki, velikost (podatki)); myTransfer.sendData (sizeof (podatki)); zamuda (100); }

4. korak: prejemanje osnovnih podatkov

Naslednja koda natisne vrednosti ADC in napetosti, prejete od Arduina #1.

Naložite naslednjo kodo v Arduino #2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; plavajoča napetost; } podatki; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (podatkovna napetost); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("NAPAKA:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); sicer če (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); sicer če (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

5. korak: Testiranje

Ko sta obe skici naloženi v ustrezen Arduinos, lahko s serijskim monitorjem na Arduinu #2 preverite, ali prejemate podatke iz Arduina #1!

Priporočena: