Arduino kommunikasjonsprotokoller
Ved å bruke kommunikasjonsprotokoller kan vi sende og motta alle sensordata i Arduino.
Noen enkle sensorer som infrarød (IR) kan kommunisere direkte med Arduino, men noen av de komplekse sensorene som Wi-Fi-modul, SD-kortmodul og Gyroskop kan ikke kommunisere direkte med Arduino uten noen kommunikasjonsprotokoller. Så det er derfor disse protokollene er en integrert del av Arduino-kommunikasjonen.
Arduino har flere eksterne enheter knyttet til seg; blant dem er det tre kommunikasjonsutstyr som brukes i Arduino-kort.
Arduino kommunikasjonsprotokoller
Kommunikasjon mellom ulike elektroniske enheter som Arduino er standardisert blant disse tre protokollene; det gjør det mulig for designere å kommunisere mellom forskjellige enheter enkelt uten kompatibilitetsproblemer. Arbeidet med disse tre protokollene er det samme siden de tjener samme formål med kommunikasjon, men de er forskjellige i implementering i en krets. Ytterligere beskrivelse av disse protokollene er diskutert nedenfor.
UART
UART er kjent som Universal asynkron mottaker sender. UART er en seriell kommunikasjonsprotokoll som betyr at databiter overføres i sekvensiell form etter hverandre. For å sette opp UART-kommunikasjon trenger vi to linjer. Den ene er Tx (D1)-pinnen til Arduino-kortet og den andre er Rx(D0)-pinnen til Arduino-kortet. Tx pin brukes for å overføre data til enheter og Rx pin brukes for å motta data. Ulike Arduino-brett har flere UART-pinner.
Arduino digital pin | UART Pin |
D1 | Tx |
D0 | Rx |
For å etablere seriell kommunikasjon med UART-port må vi koble til to enheter i konfigurasjonen nedenfor:
På Arduino Uno er en seriell port dedikert for kommunikasjon, som ofte refereres til som USB-port. Som navnet antyder Universal Serial Bus, så er det en seriell port. Ved å bruke USB-porten Arduino kan opprette kommunikasjon med datamaskiner. USB-porten er koblet til pinnene Tx og Rx på Arduino ombord. Ved å bruke disse pinnene kan vi koble til annen ekstern maskinvare enn datamaskin via USB. Arduino IDE tilbyr SoftwareSerial-bibliotek (SoftwareSerial.h) som lar brukere bruke GPIO-pinner som Serial Tx- og Rx-pinner.
- UART er enkel å betjene med Arduino
- UART trenger ikke noe klokkesignal
- Baud-hastigheten må settes innenfor 10 % grense for kommuniserende enheter for å forhindre tap av data
- Flere enheter med Arduino i Master Slave-konfigurasjon er ikke mulig med UART
- UART er halvt dupleks, noe som betyr at enheter ikke kan sende og motta data samtidig
- Bare to enheter om gangen kan kommunisere med UART-protokollen
Serial Peripheral Interface (SPI)
SPI er et akronym av serielt perifert grensesnitt som er spesialdesignet for mikrokontrollere for å kommunisere med dem. SPI opererer i full-dupleks-modus som betyr at SPI kan sende og motta data samtidig. Sammenlignet med UART og I2C er det den raskeste kommunikasjonsutstyret i Arduino-kort. Det brukes ofte der det kreves høy datahastighet som i LCD-skjerm og Micro SD-kortapplikasjoner.
SPI digitale pinner på Arduino er forhåndsdefinert. For Arduino Uno SPI pin konfigurasjon er som følger:
SPI linje | GPIO | ICSP Header Pin |
SCK | 1. 3 | 3 |
MISO | 12 | 1 |
RØYK | elleve | 4 |
SS | 10 | – |
- MOSI står for Master Out Slave In , MOSI er dataoverføringslinje for master til slave.
- SCK er en Klokkelinje som definerer overføringshastighet og startsluttegenskaper.
- SS står for Slavevalg ; SS-linje lar Master velge en bestemt slaveenhet når den opererer i flere slavekonfigurasjoner.
- MISO står for Master i Slave Out ; MISO er Slave to Master overføringslinje for data.
Et av hovedhøydepunktene til SPI-protokollen er Master-Slave-konfigurasjon. Ved å bruke SPI kan én enhet defineres som Master for å kontrollere flere slaveenheter. Master har full kontroll over Slave-enheter gjennom SPI-protokollen.
SPI er synkron protokoll, som betyr at kommunikasjon er koblet med felles klokkesignal mellom Master og Slave. SPI kan kontrollere flere enheter som slave over en enkelt sende- og mottakslinje. Alle slavene er koblet til Master ved hjelp av felles MISO motta linje sammen med RØYK én felles sendelinje. SCK er også den vanlige klokkelinjen blant Master- og Slave-enheter. Den eneste forskjellen på slaveenheter er at hver slaveenhet styres gjennom separate SS velg linje. Dette betyr at hver Slave trenger en ekstra GPIO-pin fra Arduino-kortet som vil fungere som utvalgslinje for den spesielle Slave-enheten.
Noen av hovedhøydepunktene i SPI-protokollen er oppført nedenfor:
- SPI er den raskeste protokollen enn I2C og UART
- Ingen start- og stoppbiter kreves som i UART, noe som betyr at kontinuerlig dataoverføring er mulig
- Slave kan enkelt adresseres på grunn av enkel Master Slave-konfigurasjon
- For hver slave er det en ekstra pin på Arduino-brettet. Praktisk talt 1 Master kan kontrollere 4 Slave-enheter
- Databekreftelse mangler som brukt i UART
- Multiple Master-konfigurasjon er ikke mulig
I2C kommunikasjonsprotokoll
Inter Integrated Circuit (I2C) er en annen kommunikasjonsprotokoll som brukes av Arduino-kort. I2C er den vanskeligste og mest kompliserte protokollen å implementere med Arduino og andre enheter. Til tross for komplikasjonen, tilbyr den flere funksjoner som mangler i andre protokoller som flere Master- og flere Slaves-konfigurasjoner. I2C gjør det mulig å koble opptil 128 enheter til hoved Arduino-kortet. Dette er bare mulig fordi I2C deler enkelt ledning blant alle slave-enhetene. I2C i Arduino bruker et adressesystem, noe som betyr at før du sender data til Slave-enhet, må Arduino først velge Slave-enhet ved å sende en unik adresse. I2C bruker bare to ledninger som reduserer det totale antallet Arduino-pinner, men den dårlige siden er at I2C er tregere enn SPI-protokollen.
Arduino analog pinne | I2C Pin |
A4 | SDA |
A5 | SCL |
På maskinvarenivå er I2C begrenset til kun to ledninger, en for en datalinje kjent som SDA (seriedata) og den andre for klokkelinjen SCL (Serial Clock). Ved inaktiv tilstand trekkes både SDA og SCL høyt. Når data må overføres, trekkes disse linjene lavt ved hjelp av MOSFET-kretser. Ved å bruke I2C i prosjekter er det obligatorisk å bruke pull up-motstander, normalt en verdi på 4,7 Kohm. Disse opptrekksmotstandene sikrer at både SDA- og SCL-linjene forblir høye i tomgangsstart.
Noen av hovedhøydepunktene til I2C-protokoller er:
- Antall pinner som kreves er svært lavt
- Flere Master Slaves-enheter kan kobles til
- Bruker kun 2 ledninger
- Hastigheten er lavere sammenlignet med SPI på grunn av opptrekksmotstander
- Motstander trenger mer plass i kretsen
- Prosjektets kompleksitet øker med økning i antall enheter
Sammenligning mellom UART vs I2C vs SPI
Protokoll | UART | SPI | 2C |
Hastighet | Tregest | Raskest | Raskere enn UART |
Antall enheter | Opptil 2 | 4 enheter | Opptil 128 enheter |
Ledninger kreves | 2(Tx,Rx) | 4(SCK,SMOKE,EYES,SS) | 2(SDA,SCL) |
Dupleksmodus | Full dupleksmodus | Full dupleksmodus | Halv dupleks |
Antall Master-slaver mulig | Enkel Master-Singel Slave | Enkeltmester-flere slaver | Flere Masters-Flere Slaver |
Kompleksitet | Enkel | Kan enkelt kontrollere flere enheter | Kompleks med økning i enheter |
Anerkjennelsesbit | Nei | Nei | Ja |
Konklusjon
I denne artikkelen har vi dekket en omfattende sammenligning av alle de tre protokollene UART, SPI og I2C som brukes i Arduino. Å kjenne alle protokollene er viktig siden det gir uendelige muligheter til å integrere flere enheter. Å forstå alle kommunikasjonsutstyret vil spare tid og bidra til å optimalisere prosjekter i henhold til riktig protokoll.