Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-23 15:08
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
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
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:
Serijska konfiguracija HC-05 prek Bluetootha: 10 korakov
Serijska konfiguracija HC-05 prek Bluetootha: Med uporabo naprav Android in modulov SPP Bluetooth HC-05 Bluetooth za nekatere Arduino projekte sem želel preveriti in spremeniti hitrost prenosa HC-05 in druge parametre brez povezave z vrati USB na računalniku. To se je spremenilo v to.HC-05 moduli povezujejo serijsko in Blu
Micro: bitni senzor vida MU - serijska povezava in zaslon OLED: 10 korakov
Micro: bitni senzor vida MU - serijska povezava in zaslon OLED: To je moj tretji vodnik do vidnega senzorja MU. Doslej smo poskušali uporabiti MU za prepoznavanje kartic s številkami in oblikami, toda za raziskovanje našega senzorja MU s kompleksnejšim projektom bi radi dobili boljši rezultat. Ne moremo dobiti toliko informacij
PIC MCU in serijska komunikacija Python: 5 korakov
PIC MCU in serijska komunikacija Python: Pozdravljeni, fantje! V tem projektu bom poskušal razložiti svoje poskuse o PIC MCU in serijski komunikaciji Python. Po internetu obstaja veliko vadnic in videov o tem, kako komunicirati s PIC MCU prek navideznega terminala, kar je zelo koristno. Howev
Arduino in Python serijska komunikacija - prikaz tipkovnice: 4 koraki
Arduino in Python Serijska komunikacija - Prikaz tipkovnice: Ta projekt je namenjen uporabnikom Mac, lahko pa se izvaja tudi za Linux in Windows, edini korak, ki bi moral biti drugačen, je namestitev
Brezžična serijska komunikacija z uporabo Bluefruit: 4 koraki
Brezžična serijska komunikacija z uporabo Bluefruit: Tukaj je preprost vodnik po korakih za zamenjavo vaših žic z nizkoenergetsko povezavo Bluetooth: Rabil sem nekaj časa, da sem to ugotovil, ker skoraj ni nobene dokumentacije o tem, kako to storiti s sodobno tehnologijo bluetooth z nizko porabo energije, kot je kot Bluefrui