Turinys:
- Prekės
- 1 žingsnis: fiziniai ryšiai
- 2 veiksmas: kaip naudotis biblioteka
- 3 žingsnis: perduokite pagrindinius duomenis
- 4 žingsnis: Gaukite pagrindinius duomenis
- 5 žingsnis: bandymas
Video: „Arduino“serijinis ryšys: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:45
Daugelis „Arduino“projektų remiasi duomenų perdavimu tarp kelių „Arduino“.
Nesvarbu, ar esate mėgėjas, kuriantis RC automobilį, RC lėktuvą, ar kuriantis orų stotį su nuotoliniu ekranu, turėsite žinoti, kaip patikimai perduoti serijinius duomenis iš vieno „Arduino“į kitą. Deja, mėgėjams sunku gauti nuoseklų duomenų perdavimą savo projektuose. Taip yra todėl, kad serijiniai duomenys siunčiami kaip baitų srautas.
Be baitų srauto konteksto beveik neįmanoma interpretuoti duomenų. Negalėdami interpretuoti duomenų, jūsų „Arduinos“negalės patikimai bendrauti. Svarbiausia yra pridėti šiuos kontekstinius duomenis prie baitų srauto naudojant standartinį serijinių paketų dizainą.
Serijinis paketų dizainas, paketų įdarymas ir paketų analizavimas yra sudėtingas ir sunkiai pasiekiamas. Laimei, „Arduino“vartotojams yra bibliotekų, galinčių atlikti visą šią sudėtingą logiką užkulisiuose, kad galėtumėte sutelkti dėmesį į tai, kad jūsų projektas veiktų be papildomų galvos skausmų. Šis „Instructable“serijinių paketų apdorojimui naudos biblioteką „SerialTransfer.h“.
Trumpai tariant: šioje instrukcijoje aprašoma, kaip galite lengvai įdiegti patikimus serijinius duomenis bet kuriame projekte, naudojant biblioteką SerialTransfer.h. Jei norite sužinoti daugiau apie žemo lygio tvirtos serijinės komunikacijos teoriją, peržiūrėkite šią mokymo programą.
Prekės
-
2 Arduinos
Labai rekomenduojama naudoti „Arduinos“, turinčias kelis aparatinės įrangos UART (t. Y. „Arduino Mega“)
- Prijungimo viela
-
Įdiekite SerialTransfer.h
Prieinama per „Arduino IDE“bibliotekų tvarkytuvę
1 žingsnis: fiziniai ryšiai
Naudojant nuoseklųjį ryšį, reikia nepamiršti kelių prijungimo taškų:
- Įsitikinkite, kad visi pagrindai yra prijungti!
- „Arduino TX“(perdavimo) kaištis turi būti prijungtas prie kito „Arduino“RX (priėmimo) kaiščio
2 veiksmas: kaip naudotis biblioteka
SerialTransfer.h leidžia lengvai siųsti didelius duomenų kiekius naudojant pasirinktinį paketų protokolą. Žemiau yra visų bibliotekos funkcijų aprašymas - daugelį iš jų naudosime vėliau šioje pamokoje:
SerialTransfer.txBuff
Tai yra baitų masyvas, kuriame visi naudingosios apkrovos duomenys, kurie turi būti siunčiami nuosekliai, yra buferuojami prieš perdavimą. Jūs galite užpildyti šį buferį baitais duomenų, kad nusiųstumėte į kitą „Arduino“.
SerialTransfer.rxBuff
Tai yra baitų masyvas, kuriame visi naudingosios apkrovos duomenys, gauti iš kito „Arduino“, yra buferuojami.
SerialTransfer.bytesRead
Kitos apkrovos baitų, kuriuos gavo kitas „Arduino“, skaičius ir saugomas SerialTransfer.rxBuff
SerialTransfer.begin (srautas ir _portas)
Inicijuoja bibliotekos klasės egzempliorių. Galite perduoti bet kurį „Serial“klasės objektą kaip parametrą - net „SoftwareSerial“klasės objektus!
SerialTransfer.sendData (const uint16_t & messageLen)
Dėl to jūsų „Arduino“siunčia „messageLen“baitų skaičių perdavimo buferyje kitam „Arduino“. Pavyzdžiui, jei „messageLen“yra 4, pirmieji 4 „SerialTransfer.txBuff“baitai bus siunčiami serijiniu būdu kitam „Arduino“.
SerialTransfer.available ()
Dėl to jūsų „Arduino“analizuoja visus gautus serijinius duomenis iš kito „Arduino“. Jei ši funkcija grąžina loginę reikšmę „true“, tai reiškia, kad naujas paketas buvo sėkmingai išanalizuotas ir naujai gauto paketo duomenys saugomi/pasiekiami SerialTransfer.rxBuff.
SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Įkelia „len“savavališko objekto (baito, int, plūdės, dvigubo, struktūros ir kt.) Baitų skaičių į perdavimo buferį, pradedant indeksu, kaip nurodyta argumente „index“.
SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)
Skaito „len“baitų skaičių iš priėmimo buferio (rxBuff), pradedant indeksu, kaip nurodyta argumente „index“, į savavališką objektą (baitą, int, plūdę, dvigubą, struktūrą ir kt.).
PASTABA:
Lengviausias būdas perduoti duomenis yra pirmiausia apibrėžti struktūrą, kurioje yra visi duomenys, kuriuos norite siųsti. „Arduino“priėmimo gale turėtų būti apibrėžta identiška struktūra.
3 žingsnis: perduokite pagrindinius duomenis
Šis eskizas perduoda tiek analogRead (0) ADC reikšmę, tiek analogRead (0) vertę, konvertuotą į įtampą į Arduino #2.
Įkelkite šį eskizą į „Arduino #1“:
#include "SerialTransfer.h"
SerialTransfer myTransfer; struktura STRUCT {uint16_t adcVal; plūdės įtampa; } duomenys; 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 (duomenys, dydis (duomenys)); myTransfer.sendData (sizeof (duomenys)); vėlavimas (100); }
4 žingsnis: Gaukite pagrindinius duomenis
Šis kodas spausdina ADC ir įtampos vertes, gautas iš „Arduino #1“.
Įkelkite šį kodą į „Arduino #2“:
#include "SerialTransfer.h"
SerialTransfer myTransfer; struktura STRUCT {uint16_t adcVal; plūdės įtampa; } duomenys; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (duomenys, dydis (duomenys)); Serial.print (data.adcVal); Serial.print (''); Serial.println (duomenys. Įtampa); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("KLAIDA:"); 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")); }}
5 žingsnis: bandymas
Kai abu eskizai bus įkelti į atitinkamus „Arduinos“, galite naudoti „Arduino #2“serijos monitorių, kad patikrintumėte, ar gaunate duomenis iš „Arduino #1“!
Rekomenduojamas:
„Arduino“serijinis UDP/IP šliuzas, pagrįstas ESP8266 ekranu: 8 žingsniai
„Arduino“serijinis UDP/IP šliuzas, pagrįstas ESP8266 Shield: Aš jau paskelbiau 2016 m. Šią instrukciją „Kaip sukurti savo„ Wifi “šliuzą, kad galėtumėte prijungti„ Arduino “prie IP tinklo“. Kadangi aš padariau keletą kodo patobulinimų ir vis dar naudoju šį sprendimą. Nepaisant to, dabar yra keletas ESP8266 skydų
PIC MCU ir „Python“serijinis ryšys: 5 žingsniai
PIC MCU ir „Python Serial Communication“: Sveiki, vaikinai! Šiame projekte bandysiu paaiškinti savo eksperimentus su PIC MCU ir „Python“serijiniu ryšiu. Internete yra daug vadovėlių ir vaizdo įrašų, kaip bendrauti su PIC MCU per virtualų terminalą, o tai yra labai naudinga. Kaip
„Arduino“ir „Python“serijinis ryšys - klaviatūros ekranas: 4 žingsniai
„Arduino“ir „Python“serijinis ryšys - klaviatūros ekranas: Šis projektas skirtas „Mac“vartotojams, tačiau jis taip pat gali būti įgyvendintas „Linux“ir „Windows“, vienintelis žingsnis, kuris turėtų skirtis, yra diegimas
Belaidis serijinis ryšys naudojant „Bluefruit“: 4 žingsniai
Belaidis nuoseklusis ryšys naudojant „Bluefruit“: čia yra paprastas žingsnis po žingsnio vadovas, kaip pakeisti laidus „Bluetooth“mažai energijos naudojančiu ryšiu: man prireikė šiek tiek laiko, kol tai išsiaiškinau, nes vargu ar yra kokių nors dokumentų, kaip tai padaryti naudojant šiuolaikines „Bluetooth“mažos energijos technologijas, tokias kaip kaip Bluefrui
Serijinis ryšys naudojant ARM Cortex-M4: 4 žingsniai
Serijinis ryšys naudojant ARM Cortex-M4: Tai yra duonos lentos projektas, kuriame naudojamas ARM Cortex-M4 („Texas Instruments EK-TM4C123GXL“) nuosekliam ryšiui naudojant virtualų terminalą. Išvestį galima gauti 16x2 skystųjų kristalų ekrane, o įvestį nuosekliam ryšiui galima pateikti serijiniu Mo