Seriel kommunikation gør det muligt for din Arduino at tale med andre enheder. Opdag, hvordan du forbinder og koder dem ved hjælp af en af ​​fire protokoller.

Når du arbejder på store Arduino-projekter, er det ret almindeligt at løbe tør for tilgængelige stifter til at tilslutte komponenter. Lad os sige, at du ønsker at tilslutte flere sensorer/aktuatorer med det presserende behov for stadig at bevare ekstra stifter for at fodre et stifthungrende displaymodul.

Medmindre du arbejder med noget magi, er det nogle gange svært at håndtere alle disse forbindelser på et enkelt Arduino-bræt – især når du beslutter dig for at bruge mindre boards, fordi du er presset på plads. Det er, når seriel kommunikation kommer i spil.

Lad os undersøge, hvad seriel kommunikation er, og hvordan du kan konfigurere den med Arduino til opgaver som distribueret behandling og generel integration.

Hvad er seriel kommunikation?

Seriel kommunikation er en metode til at sende og modtage data mellem to eller flere elektroniske enheder, en bit ad gangen over en enkelt kommunikationslinje. Som navnet antyder, bliver data sendt i "serier

".

Selv blot det at kunne uploade skitser til dit foretrukne Arduino-kort bruger seriel kommunikation over USB.

Seriel kommunikationsprotokoller på Arduino

Arduino boards er utroligt alsidige og kan kommunikere med en lang række enheder. De understøtter fire serielle kommunikationsprotokoller: Soft Serial, SPI (Serial Peripheral Interface), standard UART (Universal Asynchronous Receiver-Transmitter) og I2C (Inter-Integrated Circuit). For flere detaljer, tjek vores omfattende vejledning om hvordan UART, SPI og I2C seriel kommunikation fungerer.

Denne vejledning bruger grundlæggende skitser til at vise, hvordan du kan opsætte en seriel forbindelse mellem to Arduino Uno-kort ved hjælp af forskellige protokoller. Tilpas koden, så den opfylder dine specifikke krav.

SPI (Serial Peripheral Interface)

SPI er en synkron seriel kommunikationsprotokol, der giver mulighed for højhastighedskommunikation mellem mikrocontrollere og perifere enheder. Denne protokol kræver fire ledninger til kommunikation: SCK (Serielt ur), MOSI (Master Out Slave In), MISO (Master In Slave Out), og SS (Slave Select).

Det SPI.h bibliotek er meget praktisk til denne type kommunikation og skal medtages øverst på din skitse.

#omfatte

Her er SPI-stifterne på Arduino Uno-kortet:

Fungere

Pinnummer (digitalt)

Pinnummer (ICSP-header)

MOS

11

4

MISO

12

1

SCK

13

3

SS

10 (standard)

1 (alternativ)

Efter initialisering af seriel kommunikation skal du konfigurere kommunikationsstifterne.

ugyldigOpsætning(){
SPI.begynde(115200);
// Indstil pin-tilstande for SS, MOSI, MISO og SCK
pinMode(SS, PRODUKTION);
pinMode(MOSI, PRODUKTION);
pinMode(MISO, INPUT);
pinMode(SCK, PRODUKTION);

// Indstil slavevælger (SS) pin høj for at deaktivere slaveenheden
digitalSkriv(SS, HØJ);
}

SS-signalet bruges til at fortælle slaveenheden, når data overføres.

// Vælg slaven
digitalSkriv(SS, LAV);

// Send data til slaveenheden
SPI.overførsel(data);

// Fravælg slaveenheden
digitalSkriv(SS, HØJ);

Sådan forbinder du to Arduino-kort ved hjælp af SPI.

Kode til masterboardet:

#omfatte
konstint slaveSelectPin = 10;
ugyldigOpsætning(){
SPI.begynde(115200);
pinMode(slaveSelectPin, PRODUKTION);
}

ugyldigsløjfe(){
digitalSkriv(slaveSelectPin, LAV);
SPI.overførsel('H');
digitalSkriv(slaveSelectPin, HØJ);
forsinke(1000);
}

Kode til slavekortet:

#omfatte
konstint slaveSelectPin = 10;
ugyldigOpsætning(){
SPI.begynde(115200);
pinMode(slaveSelectPin, PRODUKTION);
}

ugyldigsløjfe(){
hvis (digitallæs(slaveSelectPin) == LAV) {
char modtagetData = SPI.overførsel('L');
Seriel.println(receivedData);
}
}

Sørg for, at dine enheder deler et fælles grundlag for korrekt konfiguration.

UART (Universal Asynchronous Receiver-Transmitter)

UART er en asynkron seriel kommunikationsprotokol, der tillader kommunikation mellem enheder ved hjælp af kun to ledninger: TX (Transmit) og RX (Receive). UART bruges almindeligvis til kommunikation med enheder såsom GPS-moduler, Bluetooth-moduler og andre mikrocontrollere. Hvert Arduino-bræt er udstyret med mindst én port til UART.

UART-stifterne på populære Arduino-plader inkluderer:

Bestyrelse

Seriel Pins

Serial1 Pins

Serial2 Pins

Serial3 Pins

Uno, Nano, Mini

0 (RX), 1 (TX)

N/A

N/A

N/A

Mega

0 (RX), 1 (TX)

19 (RX), 18 (TX)

17 (RX), 16 (TX)

15 (RX), 14 (TX)

Du kan få det fulde bord fra Arduinos online dokumentation om seriel kommunikation.

Forbind først dine boards sådan her:

Brug derefter denne kode til afsendertavlen:

ugyldigOpsætning(){
Seriel.begynde(9600);
}

ugyldigsløjfe(){
// Send en besked over seriel hvert sekund
Seriel.println("Hej fra afsendertavlen!");
forsinke(1000);
}

Kode til modtagertavlen:

ugyldigOpsætning(){
Seriel.begynde(9600);
}

ugyldigsløjfe(){
// Tjek om der er indgående data
hvis (Seriel.ledig() > 0) {
// Læs de indgående data og udskriv dem til den serielle monitor
Snor indgående Data = Seriel.læsestreng();
Seriel.println(indgående Data);
}
}

Arduino Uno fungerer på et 5V logisk niveau, mens en computers RS232-port bruger et +/-12V logikniveau.

Direkte tilslutning af en Arduino Uno til en RS232-port kan og vil beskadige dit board.

I2C (Inter-Integrated Circuit)

I2C er en synkron seriel kommunikationsprotokol, der tillader kommunikation mellem flere enheder ved hjælp af kun to ledninger: SDA (Serial Data) og SCL (Serial Clock). I2C bruges almindeligvis til kommunikation med sensorer, EEPROM'er og andre enheder, der skal overføre data over korte afstande.

I2C-stifter på Arduino Uno er SDA (A4) og SCL (A5).

Vi vil lave et simpelt program til at etablere en forbindelse mellem to Arduino-kort ved hjælp af I2C-kommunikation. Men først skal du forbinde dine boards sådan her:

Kode til masterboardet:

#omfatte
ugyldigOpsætning(){
Tråd.begynde(); // join I2C bus som master
Seriel.begynde(9600);
}

ugyldigsløjfe(){
Tråd.begynde Transmission(9); // send til slaveenhed med adresse 9
Tråd.skrive('en'); // sender 'a' byte til slaveenhed
Tråd.endTransmission(); // stop med at sende

forsinke(500);
}

Kode til slavekortet:

#omfatte
ugyldigOpsætning(){
Tråd.begynde(9); // join I2C bus som slave med adresse 9
Tråd.på Modtag(modtag Begivenhed);
Seriel.begynde(9600);
}

ugyldigsløjfe(){
forsinke(100);
}

ugyldigmodtage Begivenhed(int bytes){
mens(Tråd.ledig()) { // sløjfe gennem alle modtagne bytes
char modtagetByte = Tråd.Læs(); // læs hver modtaget byte
Seriel.println(receivedByte); // udskriv modtaget byte på seriel skærm
}
}

Hvad er SoftwareSerial?

Arduino SoftwareSerial-biblioteket blev udviklet til at efterligne UART-kommunikation, hvilket muliggør seriel kommunikation gennem alle to digitale ben på Arduino-kort. Det er nyttigt, når hardwaren UART allerede er i brug af andre enheder.

For at konfigurere SoftwareSerial skal du først inkludere SoftwareSerial-biblioteket i skitsen.

#omfatte

Opret derefter en forekomst af SoftwareSerial-objektet ved at angive RX og TX pins, der skal bruges til kommunikation.

SoftwareSerialmySerial(2, 3); // RX, TX stifter

Her er et eksempel på en kode til Arduino, der demonstrerer brugen af ​​SoftwareSerial:

#omfatte
SoftwareSerialmySerial(2, 3); // RX, TX stifter
ugyldigOpsætning(){
Seriel.begynde(9600); // start hardware seriel
mySerial.begynde(9600); // start blød serie
}

ugyldigsløjfe(){
hvis (mySerial.ledig()) {
Seriel.skrive(mySerial.Læs()); // send modtagne data til hardware-serie
}
hvis (Seriel.ledig()) {
mySerial.skrive(Seriel.Læs()); // send data fra hardware-serie til blød seriel
}
}

Seriebiblioteket

Serielbiblioteket er et kraftfuldt værktøj i Arduino, der tillader kommunikation mellem mikrocontrolleren og en computer eller andre enheder via en seriel forbindelse. Nogle almindelige funktioner omfatter:

Fungere

Beskrivelse

Serial.begin (hastighed)

Initialiserer seriel kommunikation med en specificeret datahastighed.

Serial.print (data)

Sender data til den serielle port til transmission som ASCII-tekst.

Serial.write (data)

Sender rå binære data over den serielle port.

Serial.available()

Returnerer antallet af bytes, der kan læses fra den serielle buffer.

Serial.flush()

Venter på, at udgående serielle data fuldfører transmissionen, før du fortsætter.

Serial.read()

Læser den første byte af indgående serielle data og returnerer den som et heltal.

Baud-hastighed og seriel dataformat

Baudrate refererer til den hastighed, hvormed data overføres via den serielle forbindelse. Det repræsenterer antallet af bits, der transmitteres pr. sekund. Baudraten skal indstilles ens på både afsender- og modtagerenhederne, ellers kan kommunikationen blive forvansket eller slet ikke fungere. Almindelige baudrater for Arduino inkluderer 9600, 19200, 38400 og 115200.

Seriel dataformat refererer til strukturen af ​​de data, der sendes over den serielle forbindelse. Der er tre hovedkomponenter til seriel dataformat: startbits, databits og stopbits.

  • Data bits: Antallet af bit, der bruges til at repræsentere en enkelt databyte.
  • Paritet: En valgfri bit, der bruges til fejlkontrol. Den kan indstilles til ingen, lige eller ulige paritet, afhængigt af kravene til kommunikationskanalen.
  • Stop Bits: Antallet af bit, der bruges til at signalere slutningen af ​​en databyte.

Dataformatet skal være det samme på både sende- og modtageenhederne for at sikre korrekt kommunikation. Her er et eksempel på, hvordan du kan indstille bestemte dataformater:

ugyldigOpsætning(){
// Opsæt seriel kommunikation med 9600 baudhastighed, 8 databit, ingen paritet og 1 stopbit
Seriel.begynde(9600, SERIAL_8N1);
}

Her, SERIAL_8N1 repræsenterer dataformatet med 8 databit, ingen paritet og 1 stop lidt. Andre muligheder som f.eks SERIAL_7E1, SERIAL_8O2osv., kan anvendes afhængigt af projektets specifikke krav.

Seriel snak

Arduino-kort giver forskellige seriel kommunikationsmuligheder, der giver mulighed for effektiv og pålidelig dataudveksling mellem enheder. Ved at forstå, hvordan man opsætter serielle kommunikationsprotokoller på Arduino IDE, kan du udnytte styrken ved distribueret behandling eller i høj grad reducere antallet af ledninger, der bruges i dine projekter.