Arduino kommunikationsprotokoll

Arduino Kommunikationsprotokoll



Kommunikationsprotokoll är den uppsättning regler som tillåter enheter att kommunicera och utbyta data. Dessa protokoll är mycket betydelsefulla i Arduino-kommunikation eftersom Arduino ständigt skickar och tar emot data. Att använda dessa protokoll hjälper Arduino att täcka feldetektering och möjliga felåterställningsmetoder. Dessa protokoll sammanför analoga och digitala enheter och gör det möjligt att designa flera projekt.

Arduinos kommunikationsprotokoll

Genom att använda kommunikationsprotokoll kan vi skicka och ta emot alla sensordata i Arduino.

Vissa enkla sensorer som infraröd (IR) kan kommunicera direkt med Arduino men vissa av de komplexa sensorerna som Wi-Fi-modul, SD-kortmodul och Gyroscope kan inte kommunicera direkt med Arduino utan några kommunikationsprotokoll. Så det är därför dessa protokoll är en integrerad del av Arduino-kommunikation.







Arduino har flera kringutrustning ansluten till den; bland dem finns det tre kommunikationstillägg som används i Arduino-kort.



Arduinos kommunikationsprotokoll

Kommunikation mellan olika elektroniska enheter som Arduino är standardiserad bland dessa tre protokoll; det gör det möjligt för designers att enkelt kommunicera mellan olika enheter utan några kompatibilitetsproblem. Arbetet med dessa tre protokoll är desamma eftersom de tjänar samma syfte med kommunikation, men de skiljer sig i implementeringen inuti en krets. Ytterligare beskrivning av dessa protokoll diskuteras nedan.







UART

UART är känt som Universal asynkron mottagaresändare. UART är ett seriellt kommunikationsprotokoll som innebär att databitar överförs i sekventiell form efter varandra. För att ställa in UART-kommunikation behöver vi två linjer. Det ena är Tx (D1)-stiftet på Arduino-kortet och det andra är Rx(D0)-stiftet på Arduino-kortet. Tx-stift används för att överföra data till enheter och Rx-stift används för att ta emot data. Olika Arduino-kort har flera UART-stift.

Arduino Digital Pin UART Pin
D1 Tx
D0 Rx

För att upprätta seriell kommunikation med UART-port måste vi ansluta två enheter i nedanstående konfiguration:



På Arduino Uno är en seriell port dedikerad för kommunikation som vanligtvis kallas USB-port. Som namnet antyder Universal Serial Bus, så det är en seriell port. Genom att använda USB-porten kan Arduino upprätta kommunikation med datorer. USB-porten är ansluten till de inbyggda stiften Tx och Rx på Arduino. Med dessa stift kan vi ansluta vilken extern hårdvara som helst förutom dator via USB. Arduino IDE tillhandahåller SoftwareSerial-bibliotek (SoftwareSerial.h) som tillåter användare att använda GPIO-stift som Serial Tx och Rx-stift.

  • UART är enkel att använda med Arduino
  • UART behöver ingen klocksignal
  • Baudhastigheten måste ställas in inom 10 %-gränsen för kommunicerande enheter för att förhindra dataförlust
  • Flera enheter med Arduino i Master Slave-konfiguration är inte möjliga med UART
  • UART är halvduplex, vilket innebär att enheter inte kan sända och ta emot data samtidigt
  • Endast två enheter åt gången kan kommunicera med UART-protokollet

Serial Peripheral Interface (SPI)

SPI är en förkortning av seriellt perifert gränssnitt som är speciellt utformat för att mikrokontroller ska kunna kommunicera med dem. SPI arbetar i full-duplex-läge vilket innebär att SPI kan skicka och ta emot data samtidigt. Jämfört med UART och I2C är det den snabbaste kommunikationsutrustningen i Arduino-kort. Det används ofta där hög datahastighet krävs som i LCD-skärm och Micro SD-kortapplikationer.

SPI digitala stift på Arduino är fördefinierade. För Arduino Uno SPI-stiftkonfigurationen är följande:

SPI linje GPIO ICSP Header Pin
SCK 13 3
MISO 12 1
RÖK elva 4
SS 10
  • MOSI står för Master Out Slave In , MOSI är dataöverföringslinje för master till slav.
  • SCK är en Klocklinje som definierar överföringshastighet och startslutegenskaper.
  • SS står för Välj slav ; SS-linje tillåter Master att välja en viss slavenhet när den arbetar i multipel slavkonfiguration.
  • MISO står för Mästare i Slave Out ; MISO är slav till master överföringsledning för data.

En av huvudhöjdpunkterna i SPI-protokollet är Master-Slave-konfigurationen. Genom att använda SPI kan en enhet definieras som Master för att styra flera slavenheter. Master har full kontroll över slavenheter genom SPI-protokoll.

SPI är ett synkront protokoll, vilket innebär att kommunikation är länkad med en gemensam klocksignal mellan Master och Slave. SPI kan styra flera enheter som slav över en enda sändnings- och mottagningslinje. Alla slavar är anslutna till Master med hjälp av common MISO ta emot linje tillsammans med RÖK en gemensam sändningslinje. SCK är också den vanliga klocklinjen bland master- och slavenheter. Den enda skillnaden mellan slavenheter är att varje slavenhet styrs separat SS välj rad. Detta innebär att varje slav behöver en extra GPIO-pin från Arduino-kortet som kommer att fungera som en vallinje för just den slavenheten.

Några av de viktigaste höjdpunkterna i SPI-protokollet listas nedan:

  • SPI är det snabbaste protokollet än I2C och UART
  • Inga start- och stoppbitar krävs som i UART vilket innebär att kontinuerlig dataöverföring är möjlig
  • Slave kan enkelt adresseras tack vare enkel Master Slave-konfiguration
  • För varje slav är en extra pin ockuperad på Arduino-kortet. Praktiskt taget 1 Master kan styra 4 slavenheter
  • Databekräftelse saknas som används i UART
  • Multiple Master-konfiguration är inte möjlig

I2C kommunikationsprotokoll

Inter Integrated Circuit (I2C) är ett annat kommunikationsprotokoll som används av Arduino-kort. I2C är det svåraste och mest komplicerade protokollet att implementera med Arduino och andra enheter. Trots dess komplikation erbjuder den flera funktioner som saknas i andra protokoll som flera Master- och multipla Slaves-konfigurationer. I2C tillåter anslutning av upp till 128 enheter till Arduino-kortet. Detta är bara möjligt eftersom I2C delar en tråd mellan alla slavenheter. I2C i Arduino använder ett adresssystem, vilket innebär att innan han skickar data till slavenhet måste Arduino först välja slavenhet genom att skicka en unik adress. I2C använder bara två ledningar vilket minskar det totala antalet Arduino-stift, men den dåliga sidan med det är att I2C är långsammare än SPI-protokollet.

Arduino Analog Pin I2C-stift
A4 SDA
A5 SCL

På hårdvarunivå är I2C begränsad till endast två ledningar, en för en datalinje känd som SDA (Serial Data) och andra för Clock line SCL (Serial Clock). Vid viloläge dras både SDA och SCL högt. När data behöver överföras dras dessa linjer lågt med hjälp av MOSFET-kretsar. Genom att använda I2C i projekt är det obligatoriskt att använda pull-up-motstånd, normalt ett värde på 4,7 Kohm. Dessa pull up-motstånd säkerställer att både SDA- och SCL-linjerna förblir höga i sin vilostart.

Några av de viktigaste höjdpunkterna i I2C-protokoll är:

  • Antalet stift som krävs är mycket lågt
  • Flera Master Slaves-enheter kan anslutas
  • Använder endast 2 trådar
  • Hastigheten är långsammare jämfört med SPI på grund av uppdragningsmotstånd
  • Motstånd behöver mer utrymme i kretsen
  • Projektets komplexitet ökar med ökningen av antalet enheter

Jämförelse mellan UART vs I2C vs SPI

Protokoll UART SPI 2C
Fart Långsammast Snabbast Snabbare än UART
Antal enheter Upp till 2 4 enheter Upp till 128 enheter
Kablar krävs 2(Tx,Rx) 4(SCK,SMOKE,EYES,SS) 2(SDA,SCL)
Duplexläge Full Duplex-läge Full Duplex-läge Halv duplex
Antal Master-slavar möjligt Enkel Master-Singel Slave Single Master-Flera slavar Flera mästare-flera slavar
Komplexitet Enkel Kan enkelt styra flera enheter Komplext med ökning av enheter
Bekräftelsebit Nej Nej Ja

Slutsats

I den här artikeln har vi täckt en omfattande jämförelse av alla de tre protokollen UART, SPI och I2C som används i Arduino. Att känna till alla protokoll är viktigt eftersom det ger oändliga möjligheter att integrera flera enheter. Att förstå all kommunikationsutrustning sparar tid och hjälper till att optimera projekt enligt rätt protokoll.