Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-23 14:47
Mnogi Arduino projekti oslanjaju se na prijenos podataka između nekoliko Arduino.
Bilo da ste hobist koji gradi RC automobil, RC zrakoplov ili projektira meteorološku stanicu s udaljenim zaslonom, morat ćete znati kako pouzdano prenijeti serijske podatke s jednog Arduina na drugi. Nažalost, hobistima je teško uspostaviti komunikaciju serijskim podacima 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 stream bajtova korištenjem standardnog dizajna serijskog paketa.
Dizajn serijskog paketa, punjenje paketa i raščlanjivanje paketa složeni su i teško ih je postići. Srećom za korisnike Arduina, dostupne su knjižnice koje mogu izvesti svu ovu složenu logiku iza kulisa pa se možete usredotočiti na to da vaš projekt radi bez dodatne glavobolje. Ovaj Instructable će koristiti biblioteku SerialTransfer.h za obradu serijskog paketa.
Ukratko: ovaj Instructable će razmotriti kako možete jednostavno implementirati robusne serijske podatke u bilo koji projekt pomoću biblioteke SerialTransfer.h. Ako želite saznati više o teoriji niske razine o robusnoj serijskoj komunikaciji, pogledajte ovaj vodič.
Pribor
- 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 upravitelja biblioteka Arduino IDE -a
Korak 1: 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 (odašiljač) pin mora biti spojen na drugi Arduino RX (prijem) pin
2. korak: Kako koristiti biblioteku
SerialTransfer.h omogućuje vam jednostavno slanje velikih količina podataka pomoću prilagođenog protokola paketa. Dolje je opis svih značajki knjižnice - 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 preko serijske memorije memoriraju prije prijenosa. Ovaj međuspremnik možete napuniti bajtovima podataka za slanje na drugi Arduino.
SerialTransfer.rxBuff
Ovo je niz bajtova u kojem se svi podaci o korisnom opterećenju primljeni s drugog Arduina čuvaju u međuspremniku.
SerialTransfer.bytesRead
Broj bajtova korisnog opterećenja koje je drugi Arduino primio i pohranio u SerialTransfer.rxBuff
SerialTransfer.begin (Stream & _port)
Inicijalizira instancu klase knjižnice. 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 bit će 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 "index" u proizvoljan objekt (byte, int, float, double, struct, itd …).
BILJEŠKA:
Najjednostavniji 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: Prijenos osnovnih podataka
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 (Serijski1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (podaci, veličina (podaci)); myTransfer.sendData (sizeof (podaci)); kašnjenje (100); }
Korak 4: Primite osnovne podatke
Sljedeći kod ispisuje vrijednosti ADC -a i 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 (Serijski1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (podaci, veličina (podaci)); Serijski.ispis (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("POGREŠ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 upotrijebiti Serijski monitor na Arduinu #2 kako biste potvrdili da primate podatke s Arduina #1!
Preporučeni:
Serijska konfiguracija HC-05 putem Bluetootha: 10 koraka
Serijska konfiguracija HC-05 putem Bluetootha: Tijekom korištenja Android uređaja i HC-05 Bluetooth SPP modula za neke Arduino projekte, želio sam provjeriti i promijeniti HC-05 brzine prijenosa i druge parametre bez povezivanja na USB priključak računala. To se pretvorilo u ovo.HC-05 moduli povezuju serijski i Blu
PIC MCU i Python serijska komunikacija: 5 koraka
PIC MCU i Python serijska komunikacija: Zdravo, dečki! U ovom projektu pokušat ću objasniti svoje eksperimente na PIC MCU i Python serijskoj komunikaciji. Preko interneta postoji mnogo vodiča i video zapisa o tome kako komunicirati s PIC MCU -om preko virtualnog terminala što je vrlo korisno. Howev
Arduino i Python serijska komunikacija - prikaz tipkovnice: 4 koraka
Arduino i Python serijska komunikacija - prikaz tipkovnice: Ovaj je projekt napravljen za korisnike Mac računara, ali se može implementirati i za Linux i Windows, jedini korak koji bi trebao biti drugačiji je instalacija
Bežična serijska komunikacija pomoću Bluefruit -a: 4 koraka
Bežična serijska komunikacija pomoću Bluefruit -a: Evo jednostavnog vodiča korak po korak kako biste zamijenili svoje žice bluetooth vezom niske energije: Trebalo mi je vremena da to shvatim jer gotovo da nema dokumentacije o tome kako to učiniti s modernom bluetooth tehnologijom niske energije, poput kao Bluefrui
Serijska komunikacija pomoću ARM Cortex-M4: 4 koraka
Serijska komunikacija pomoću ARM Cortex-M4: Ovo je projekt zasnovan na matičnoj ploči koji koristi ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) za serijsku komunikaciju pomoću virtualnog terminala. Izlaz se može dobiti na 16x2 LCD zaslonu, a ulaz za serijsku komunikaciju može se dati u serijskom Mo