Cuprins:

Comunicare în serie Arduino: 5 pași
Comunicare în serie Arduino: 5 pași
Anonim
Comunicare în serie Arduino
Comunicare în serie Arduino

Multe proiecte Arduino se bazează pe transmiterea datelor între mai multe Arduino.

Fie că sunteți un pasionat care construiește o mașină RC, un avion RC sau proiectați o stație meteo cu un afișaj de la distanță, va trebui să știți cum să transferați în mod fiabil datele seriale de la un Arduino la altul. Din păcate, pentru pasionați este dificil să obțină comunicări de date seriale care lucrează în propriile lor proiecte, deoarece datele seriale sunt trimise ca un flux de octeți.

Fără un fel de context în fluxul de octeți, este aproape imposibil să interpretezi datele. Fără a putea interpreta datele, Arduino-urile dvs. nu vor putea comunica în mod fiabil. Cheia este să adăugați aceste date de context la fluxul de octeți utilizând un design standard de pachete seriale.

Proiectarea în serie a pachetelor, umplerea pachetelor și analiza pachetelor sunt complexe și dificil de realizat. Din fericire pentru utilizatorii Arduino, există biblioteci disponibile care pot face toată această logică complexă din culise, astfel încât să vă puteți concentra asupra faptului că proiectul dvs. va funcționa fără o îndoială suplimentară. Acest Instructable va utiliza biblioteca SerialTransfer.h pentru procesarea serială a pachetelor.

Pe scurt: acest instructabil va descrie modul în care puteți implementa date seriale robuste cu ușurință în orice proiect utilizând biblioteca SerialTransfer.h. Dacă doriți să aflați mai multe despre teoria de nivel scăzut a comunicării seriale robuste, consultați acest tutorial.

Provizii

  • 2 Arduino

    Este foarte încurajat să utilizați Arduino care au mai multe UART hardware (adică Arduino Mega)

  • Sârmă de conectare
  • Instalați SerialTransfer.h

    Disponibil prin intermediul Managerului de biblioteci al Arduino IDE

Pasul 1: Conexiuni fizice

Conexiuni fizice
Conexiuni fizice

Când utilizați comunicații seriale, trebuie să aveți în vedere câteva puncte de cablare:

  • Asigurați-vă că toate terenurile sunt conectate!
  • Pinul Arduino TX (Transmit) trebuie să fie conectat la celălalt pin RX (Receive) Arduino

Pasul 2: Cum se folosește biblioteca

Cum se folosește biblioteca
Cum se folosește biblioteca

SerialTransfer.h vă permite să trimiteți cu ușurință cantități mari de date utilizând un protocol de pachete personalizat. Mai jos este o descriere a tuturor funcțiilor bibliotecii - multe dintre care le vom folosi mai târziu în acest tutorial:

SerialTransfer.txBuff

Aceasta este o matrice de octeți în care toate datele privind sarcina utilă care urmează să fie trimise prin serial sunt tamponate înainte de transmisie. Puteți umple acest buffer cu octeți de date pentru a-l trimite la un alt Arduino.

SerialTransfer.rxBuff

Aceasta este o matrice de octeți în care toate datele privind sarcina utilă primite de la celălalt Arduino sunt tamponate.

SerialTransfer.bytesRead

Numărul de octeți ai sarcinii utile primite de celălalt Arduino și stocate în SerialTransfer.rxBuff

SerialTransfer.begin (Stream & _port)

Inițializează o instanță a clasei bibliotecii. Puteți trece orice obiect de clasă „Serial” ca parametru - chiar și obiecte de clasă „SoftwareSerial”!

SerialTransfer.sendData (const uint16_t & messageLen)

Acest lucru face ca Arduino să trimită „messageLen” numărul de octeți din buffer-ul de transmisie către celălalt Arduino. De exemplu, dacă „messageLen” este 4, primii 4 octeți ai SerialTransfer.txBuff vor fi trimiși prin serial către celălalt Arduino.

SerialTransfer.available ()

Acest lucru face ca Arduino să analizeze orice date seriale primite de la celălalt Arduino. Dacă această funcție returnează booleanul „adevărat”, înseamnă că un pachet nou a fost analizat cu succes, iar datele pachetului nou recepționat sunt stocate / disponibile în SerialTransfer.rxBuff.

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

Intră „len” numărul de octeți al unui obiect arbitrar (octet, int, float, dublu, struct etc.) în bufferul de transmisie începând de la index așa cum este specificat de argumentul „index”.

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

Citește „len” numărul de octeți din buffer-ul de primire (rxBuff) începând de la index așa cum este specificat de argumentul „index” într-un obiect arbitrar (octet, int, float, double, struct, etc …).

NOTĂ:

Cel mai simplu mod de a transmite date este să definiți mai întâi o structură care conține toate datele pe care doriți să le trimiteți. Arduino de pe capătul receptor trebuie să aibă o structură identică definită.

Pasul 3: Transmiteți datele de bază

Următoarea schiță transmite atât valoarea ADC a analogRead (0), cât și valoarea analogRead (0) convertite în tensiune la Arduino # 2.

Încărcați următoarea schiță pe Arduino # 1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; tensiune de plutire; } date; 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 (date, sizeof (data)); myTransfer.sendData (sizeof (date)); întârziere (100); }

Pasul 4: Primiți date de bază

Următorul cod tipărește valorile ADC și de tensiune primite de la Arduino # 1.

Încărcați următorul cod pe Arduino # 2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; tensiune de plutire; } date; 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 (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("EROARE:"); 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")); }}

Pasul 5: Testare

Odată ce ambele schițe au fost încărcate în Arduino-urile lor respective, puteți utiliza Serial Monitor pe Arduino # 2 pentru a verifica că primiți date de la Arduino # 1!

Recomandat: