Բովանդակություն:

Arduino սերիական հաղորդակցություն. 5 քայլ
Arduino սերիական հաղորդակցություն. 5 քայլ

Video: Arduino սերիական հաղորդակցություն. 5 քայլ

Video: Arduino սերիական հաղորդակցություն. 5 քայլ
Video: Չափել մինչև 500 Ա DC հոսանք Shdu Resistor– ով ՝ օգտագործելով Arduino 2024, Նոյեմբեր
Anonim
Arduino սերիական հաղորդակցություն
Arduino սերիական հաղորդակցություն

Arduino- ի շատ նախագծեր հիմնված են մի քանի Arduinos- ի միջև տվյալների փոխանցման վրա:

Անկախ նրանից, թե դուք հոբբիստ եք, որը կառուցում է RC մեքենա, RC ինքնաթիռ կամ նախագծում է եղանակային կայան հեռակառավարվող էկրանով, դուք պետք է իմանաք, թե ինչպես կարելի է հուսալիորեն փոխանցել սերիական տվյալները մեկ Arduino- ից մյուսը: Unfortunatelyավոք, հոբբիստների համար դժվար է սերիական տվյալների հաղորդակցություն ստանալ, որը աշխատում է սեփական նախագծերում: Դա պայմանավորված է նրանով, որ սերիական տվյալները ուղարկվում են որպես բայթերի հոսք:

Առանց բայթերի ներսում որևէ համատեքստի, գրեթե անհնար է մեկնաբանել տվյալները: Առանց տվյալների մեկնաբանման կարողանալու, ձեր Arduinos- ը չի կարողանա հուսալիորեն հաղորդակցվել: Հիմնական բանը այս համատեքստային տվյալների ավելացումն է բայթ հոսքի մեջ ՝ օգտագործելով ստանդարտ սերիական փաթեթի ձևավորում:

Սերիայի փաթեթների ձևավորումը, փաթեթավորումը և փաթեթը վերլուծելը բարդ և դժվար է հասնել: Բարեբախտաբար, Arduino- ի օգտվողների համար կան մատչելի գրադարաններ, որոնք կարող են անել այս ամբողջ բարդ տրամաբանությունը կուլիսներում, այնպես որ դուք կարող եք կենտրոնանալ ձեր նախագիծը առանց լրացուցիչ առաջընթացի աշխատանքի: Այս հրահանգը կօգտագործի SerialTransfer.h գրադարանը սերիական փաթեթների մշակման համար:

Մի խոսքով. Այս Ուղեցույցը կանդրադառնա, թե ինչպես կարող եք հեշտությամբ իրականացնել կայուն սերիական տվյալներ ցանկացած նախագծում ՝ օգտագործելով գրադարան SerialTransfer.h: Եթե ցանկանում եք ավելին իմանալ կայուն սերիական հաղորդակցության ցածր մակարդակի տեսության մասին, տես այս ձեռնարկը:

Պարագաներ

  • 2 Արդուինոս

    Շատ խրախուսվում է, որ դուք օգտագործում եք Arduinos, որոնք ունեն բազմաթիվ ապարատային UARTs (այսինքն ՝ Arduino Mega)

  • Միացման մետաղալար
  • Տեղադրեք SerialTransfer.h

    Հասանելի է Arduino IDE- ի գրադարանների մենեջերի միջոցով

Քայլ 1: Ֆիզիկական կապեր

Ֆիզիկական կապեր
Ֆիզիկական կապեր

Սերիական հաղորդակցություն օգտագործելիս պետք է հաշվի առնել միացման մի քանի կետ.

  • Համոզվեք, որ բոլոր հիմքերը միացված են:
  • Arduino TX (Փոխանցում) քորոցը պետք է միացված լինի Arduino- ի մյուս RX (Ստացման) քորոցին

Քայլ 2. Ինչպես օգտագործել գրադարանը

Ինչպես օգտագործել գրադարանը
Ինչպես օգտագործել գրադարանը

SerialTransfer.h- ն թույլ է տալիս հեշտությամբ մեծ քանակությամբ տվյալներ ուղարկել ՝ օգտագործելով հատուկ փաթեթային արձանագրություն: Ստորև բերված է գրադարանի բոլոր հնարավորությունների նկարագրությունը, որոնցից շատերը մենք հետագայում կօգտագործենք այս ձեռնարկում.

SerialTransfer.txBuff

Սա բայթ զանգված է, որտեղ սերիայի միջոցով ուղարկվելիք բեռի բոլոր տվյալները բուֆերացվում են նախքան փոխանցումը: Դուք կարող եք այս բուֆերը լցնել տվյալների բայթերով ՝ մեկ այլ Arduino ուղարկելու համար:

SerialTransfer.rxBuff

Սա բայթ զանգված է, որտեղ մյուս Arduino- ից ստացված բեռնվածքի բոլոր տվյալները բուֆերացված են:

SerialTransfer.bytesRead

Մյուս Arduino- ի կողմից ստացված և պահված SerialTransfer.rxBuff- ում բեռնված բայթերի քանակը

SerialTransfer.begin (Stream & _port)

Նախաձեռնում է գրադարանի դասի օրինակ: Դուք կարող եք որպես պարամետր փոխանցել ցանկացած «Սերիական» դասի օբյեկտ ՝ նույնիսկ «SoftwareSerial» դասի օբյեկտներ:

SerialTransfer.sendData (const uint16_t & messageLen)

Սա ստիպում է ձեր Arduino- ին փոխանցման բուֆերում «messageLen» քանակի բայթ ուղարկել մյուս Arduino- ին: Օրինակ, եթե «messageLen» - ը 4 է, SerialTransfer.txBuff- ի առաջին 4 բայթերը սերիայի միջոցով կուղարկվեն մյուս Arduino- ին:

SerialTransfer.available ()

Սա ստիպում է ձեր Arduino- ին վերլուծել մյուս Arduino- ից ստացված սերիական տվյալները: Եթե այս գործառույթը վերադարձնում է բուլյան «ճշմարիտ», դա նշանակում է, որ նոր փաթեթը հաջողությամբ վերլուծվել է, և նոր ստացված փաթեթի տվյալները պահվում/հասանելի են SerialTransfer.rxBuff- ում:

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

Կամայական օբյեկտի (բայթ, ինտ, բոց, երկակի, ստրուկտ և այլն …) լցնում է մի շարք բայթերի քանակը փոխանցման բուֆերում `սկսած ինդեքսից, ինչպես նշված է« ինդեքս »փաստարկով:

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

Ընդունման բուֆերից (rxBuff) «լեն» քանակի բայթ է կարդում ինդեքսից, ինչպես նշված է «ինդեքս» փաստարկով կամայական օբյեկտի (բայթ, ինտ, բոց, կրկնակի, ստրուկտ և այլն …):

ՆՇՈՒՄ:

Տվյալների փոխանցման ամենահեշտ ձևն այն է, որ սկզբում սահմանվի մի կառուցվածք, որը պարունակում է բոլոր տվյալները, որոնք ցանկանում եք ուղարկել: Ստացող կողմում գտնվող Arduino- ն պետք է ունենա նույնական կառուցվածք:

Քայլ 3: Հիմնական տվյալների փոխանցում

Հետևյալ ուրվագիծը փոխանցում է և՛ analogRead- ի (0), և՛ լարման վերածված analogRead- ի (0) արժեքը Arduino #2 -ին:

Վերբեռնեք հետևյալ ուրվագիծը Arduino #1 -ում

#ներառել "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; բոց լարման; } տվյալներ; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Սերիա 1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (տվյալները, չափը (տվյալները)); myTransfer.sendData (չափը (տվյալները)); ուշացում (100); }

Քայլ 4: Ստացեք հիմնական տվյալներ

Հետևյալ կոդը տպում է Arduino #1 -ից ստացված ADC և լարման արժեքները:

Ներբեռնեք հետևյալ կոդը Arduino #2 -ում

#ներառել "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; բոց լարման; } տվյալներ; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Սերիա 1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (տվյալները, չափը (տվյալները)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("ՍԽԱԼ:"); եթե (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); այլապես, եթե (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); այլապես, եթե (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Քայլ 5: Փորձարկում

Երբ երկու էսքիզները վերբեռնվեն իրենց համապատասխան Arduinos- ում, կարող եք օգտագործել Arduino #2 -ի սերիական մոնիտորը `հաստատելու համար, որ դուք ստանում եք տվյալներ Arduino #1 -ից:

Խորհուրդ ենք տալիս: