Arduino ryšio protokolai
Naudodami komunikacijos protokolus galime siųsti ir gauti bet kokius jutiklio duomenis Arduino.
Kai kurie paprasti jutikliai, tokie kaip infraraudonųjų spindulių (IR), gali tiesiogiai susisiekti su „Arduino“, tačiau kai kurie sudėtingi jutikliai, tokie kaip „Wi-Fi“ modulis, SD kortelės modulis ir giroskopas, negali tiesiogiai susisiekti su „Arduino“ be jokių ryšio protokolų. Taigi, todėl šie protokolai yra neatsiejama Arduino komunikacijos dalis.
„Arduino“ turi kelis išorinius įrenginius; tarp jų yra trys ryšio periferiniai įrenginiai, naudojami Arduino plokštėse.
Arduino ryšio protokolai
Ryšys tarp skirtingų elektroninių įrenginių, tokių kaip Arduino, yra standartizuotas tarp šių trijų protokolų; tai leidžia dizaineriams lengvai bendrauti tarp skirtingų įrenginių be jokių suderinamumo problemų. Šių trijų protokolų veikimas yra toks pat, nes jie tarnauja tam pačiam ryšio tikslui, tačiau skiriasi jų įgyvendinimas grandinėje. Tolesnis šių protokolų aprašymas aptariamas toliau.
UART
UART yra žinomas kaip Universalus asinchroninis imtuvas siųstuvas. UART yra nuoseklaus ryšio protokolas, kuris reiškia, kad duomenų bitai perduodami nuosekliai vienas po kito. Norėdami nustatyti UART ryšį, mums reikia dviejų linijų. Vienas yra Arduino plokštės Tx (D1) kaištis, o antrasis - Arduino plokštės Rx (D0) kaištis. Tx kontaktas skirtas duomenims perduoti į įrenginius, o Rx kaištis naudojamas duomenims priimti. Skirtingos Arduino plokštės turi kelis UART kaiščius.
Arduino skaitmeninis PIN kodas | UART kaištis |
D1 | Tx |
D0 | Rx |
Norėdami užmegzti nuoseklųjį ryšį naudodami UART prievadą, turime prijungti du įrenginius pagal žemiau pateiktą konfigūraciją:
„Arduino Uno“ vienas nuoseklusis prievadas skirtas ryšiui, kuris paprastai vadinamas USB prievadu. Kaip rodo pavadinimas, Universal Serial Bus, tai yra nuoseklusis prievadas. Naudojant USB prievadą Arduino galima užmegzti ryšį su kompiuteriais. USB prievadas yra prijungtas prie „Arduino“ Tx ir Rx kaiščių. Naudodami šiuos kaiščius, per USB galime prijungti bet kokią išorinę aparatinę įrangą, išskyrus kompiuterį. „Arduino IDE“ teikia „SoftwareSerial“ biblioteką (SoftwareSerial.h) kuri leidžia vartotojams naudoti GPIO kaiščius kaip Serial Tx ir Rx kaiščius.
- UART paprasta valdyti su Arduino
- UART nereikia jokio laikrodžio signalo
- Norint išvengti duomenų praradimo, perdavimo sparta turi būti nustatyta neviršijant 10 % ryšio įrenginių
- Naudojant UART, negalima naudoti kelių įrenginių, kuriuose yra „Arduino“ pagrindinėje Slave konfigūracijoje
- UART yra pusiau dvipusis, o tai reiškia, kad įrenginiai negali perduoti ir priimti duomenų tuo pačiu metu
- Tik du įrenginiai vienu metu gali susisiekti su UART protokolu
Serijinė periferinė sąsaja (SPI)
SPI yra nuosekliosios periferinės sąsajos akronimas, specialiai sukurtas mikrovaldikliams bendrauti su jais. SPI veikia pilno dvipusio ryšio režimu, o tai reiškia, kad SPI gali siųsti ir gauti duomenis vienu metu. Palyginti su UART ir I2C, tai greičiausias Arduino plokščių komunikacijos periferinis įrenginys. Jis dažniausiai naudojamas ten, kur reikalingas didelis duomenų perdavimo greitis, pvz., LCD ekrane ir „Micro SD“ kortelių programose.
Arduino SPI skaitmeniniai kaiščiai yra iš anksto nustatyti. Arduino Uno SPI kaiščio konfigūracija yra tokia:
SPI linija | GPIO | ICSP antraštės PIN kodas |
SCK | 13 | 3 |
MISO | 12 | 1 |
DŪMAI | vienuolika | 4 |
SS | 10 | – |
- MOSI reiškia Master Out Slave In , MOSI yra duomenų perdavimo linija, skirta nuo pagrindinio iki vergo.
- SCK yra a Laikrodžio linija kuri apibrėžia perdavimo greitį ir pradžios pabaigos charakteristikas.
- SS reiškia Slave Select ; SS linija leidžia pagrindiniam valdikliui pasirinkti konkretų Slave įrenginį, kai jis veikia keliose Slave konfigūracijose.
- MISO reiškia Master in Slave Out ; MISO yra duomenų perdavimo linija iš vergo į pagrindinį.
Vienas iš pagrindinių SPI protokolo akcentų yra Master-Slave konfigūracija. Naudojant SPI vieną įrenginį galima apibrėžti kaip pagrindinį, kad būtų galima valdyti kelis Slave įrenginius. Master visiškai valdo Slave įrenginius per SPI protokolą.
SPI yra sinchroninis protokolas, o tai reiškia, kad ryšys yra susietas su bendru laikrodžio signalu tarp pagrindinio ir pavaldinio. SPI gali valdyti kelis įrenginius kaip Slave per vieną perdavimo ir priėmimo liniją. Visi vergai yra prijungti prie šeimininko naudojant bendrą MISO gauti liniją kartu su DŪMAI viena bendra perdavimo linija. SCK taip pat yra įprasta laikrodžio linija tarp pagrindinio ir pavaldinio įrenginių. Vienintelis pavaldinių įrenginių skirtumas yra tas, kad kiekvienas valdomas įrenginys yra valdomas atskirai SS pasirinkite eilutę. Tai reiškia, kad kiekvienam Slave reikalingas papildomas GPIO kaištis iš Arduino plokštės, kuris veiks kaip pasirinkimo linija tam konkrečiam Slave įrenginiui.
Kai kurie pagrindiniai SPI protokolo akcentai yra išvardyti žemiau:
- SPI yra greičiausias protokolas nei I2C ir UART
- Nereikia pradžios ir pabaigos bitų, kaip UART, o tai reiškia, kad galimas nuolatinis duomenų perdavimas
- Slave gali būti lengvai kreipiamasi dėl paprastos Master Slave konfigūracijos
- Kiekvienam Slave Arduino plokštėje yra užimtas papildomas kaištis. Praktiškai 1 Master gali valdyti 4 Slave įrenginius
- Trūksta duomenų patvirtinimo, kaip naudojamas UART
- Kelių pagrindinių konfigūracijų negalima
I2C ryšio protokolas
„Inter Integrated Circuit“ (I2C) yra dar vienas „Arduino“ plokščių naudojamas ryšio protokolas. I2C yra sunkiausias ir sudėtingiausias protokolas, kurį galima įdiegti naudojant Arduino ir kitus įrenginius. Nepaisant sudėtingumo, jis siūlo daugybę funkcijų, kurių trūksta kituose protokoluose, pvz., keliose pagrindinės ir kelių vergų konfigūracijose. I2C leidžia prie pagrindinės Arduino plokštės prijungti iki 128 įrenginių. Tai įmanoma tik todėl, kad I2C dalijasi vienu laidu tarp visų Slave įrenginių. „Arduino“ „I2C“ naudoja adresų sistemą, o tai reiškia, kad prieš siųsdamas duomenis į „Slave“ įrenginį, „Arduino“ pirmiausia turi pasirinkti „Slave“ įrenginį, siųsdamas unikalų adresą. I2C naudoja tik du laidus, kurie sumažina bendrą Arduino kaiščių skaičių, tačiau blogoji jo pusė yra ta, kad I2C yra lėtesnis nei SPI protokolas.
Arduino analoginis kaištis | I2C kaištis |
A4 | SDA |
A5 | SCL |
Techninės įrangos lygiu I2C yra apribotas tik dviem laidais, vienas skirtas duomenų linijai, žinomai kaip SDA (serijiniai duomenys) o antrasis skirtas Laikrodžio linijai SCL (serijinis laikrodis). Tuščiosios eigos būsenoje tiek SDA, tiek SCL pakeliami aukštai. Kai reikia perduoti duomenis, šios linijos sumažinamos naudojant MOSFET grandinę. Naudojant I2C projektuose, privaloma naudoti traukimo rezistorius, kurių vertė paprastai yra 4,7 Kohm. Šie pakėlimo rezistoriai užtikrina, kad tiek SDA, tiek SCL linijos išliktų aukštos tuščiosios eigos paleidimo metu.
Kai kurie pagrindiniai I2C protokolų akcentai yra šie:
- Reikalingų kaiščių skaičius yra labai mažas
- Galima prijungti kelis Master Slaves įrenginius
- Naudoja tik 2 laidus
- Greitis yra lėtesnis, palyginti su SPI dėl pakeliamų rezistorių
- Rezistoriams grandinėje reikia daugiau vietos
- Projekto sudėtingumas didėja didėjant įrenginių skaičiui
UART ir I2C ir SPI palyginimas
protokolas | UART | SPI | 2C |
Greitis | Lėčiausias | Greičiausias | Greičiau nei UART |
Įrenginių skaičius | Iki 2 | 4 įrenginiai | Iki 128 įrenginių |
Reikalingi laidai | 2 (Tx, Rx) | 4 (SCK, SMOKE, EYES, SS) | 2 (SDA, SCL) |
Dvipusis režimas | Visas dvipusis režimas | Visas dvipusis režimas | Pusiau dvipusis |
Galimas šeimininkų-vergų skaičius | Vienas šeimininkas – vienas vergas | Vienas šeimininkas – keli vergai | Keli šeimininkai – keli vergai |
Sudėtingumas | Paprasta | Gali lengvai valdyti kelis įrenginius | Sudėtingas su įrenginių padidėjimu |
Pripažinimo bitė | Ne | Ne | Taip |
Išvada
Šiame straipsnyje mes išsamiai palyginome visus tris Arduino naudojamus protokolus UART, SPI ir I2C. Svarbu žinoti visus protokolus, nes tai suteikia begalines galimybes integruoti kelis įrenginius. Suprasdami visus komunikacijos periferinius įrenginius sutaupysite laiko ir padėsite optimizuoti projektus pagal teisingą protokolą.