Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-23 15:04
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
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
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:
Comunicare fără fir LoRa de 3Km la 8Km cu dispozitiv E32 (sx1278 / sx1276) low cost pentru Arduino, Esp8266 sau Esp32: 15 pași
Comunicare wireless LoRa de 3Km la 8Km cu dispozitiv E32 low cost (sx1278 / sx1276) pentru Arduino, Esp8266 sau Esp32: Creez o bibliotecă pentru gestionarea EBYTE E32 bazată pe seria Semtech de dispozitive LoRa, dispozitiv foarte puternic, simplu și ieftin. Puteți găsi Versiunea de 3 km aici, versiunea de 8 km aici Pot funcționa pe o distanță de 3000m până la 8000m și au o mulțime de caracteristici și
MPU 6050 Gyro, comunicare accelerometru cu Arduino (Atmega328p): 5 pași
MPU 6050 Gyro, comunicare accelerometru cu Arduino (Atmega328p): MPU6050 IMU are atât accelerometru cu 3 axe, cât și giroscop cu 3 axe integrate pe un singur cip. Giroscopul măsoară viteza de rotație sau rata de schimbare a poziției unghiulare în timp, de-a lungul Axa X, Y și Z. Ieșirile giroscopului sunt
Interval lung, 1,8 km, comunicare wireless Arduino-Arduino cu HC-12 .: 6 pași (cu imagini)
Interval lung, 1,8 km, comunicare wireless Arduino-Arduino cu HC-12. În acest instructiv, veți învăța cum să comunicați între Arduinos pe o distanță lungă de până la 1,8 km în aer liber. HC-12 este un port serial wireless modul de comunicare foarte util, extrem de puternic și ușor de utilizat. Mai întâi vei pleca
Comunicare în serie fără fir folosind Bluefruit: 4 pași
Comunicare în serie fără fir folosind Bluefruit: Iată un ghid simplu pas cu pas pentru a vă înlocui firele cu o conexiune Bluetooth cu consum redus de energie: Mi-a luat ceva timp să aflu acest lucru, deoarece nu există aproape nicio documentație cu privire la acest lucru cu tehnologia modernă Bluetooth cu consum redus de energie. ca Bluefrui
Comunicare în serie utilizând ARM Cortex-M4: 4 pași
Comunicare în serie utilizând ARM Cortex-M4: Acesta este un proiect bazat pe panou care folosește ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) pentru comunicarea în serie utilizând terminalul virtual. Ieșirea poate fi obținută pe ecranul LCD de 16x2 și intrarea pentru comunicarea serială poate fi dată în Serial Mo