Serijska komunikacija omogućuje vašem Arduinu da komunicira s drugim uređajima. Otkrijte kako ih povezati i kodirati pomoću bilo kojeg od četiri protokola.

Kada radite na velikim Arduino projektima, uobičajeno je da vam ponestane dostupnih pinova za spajanje komponenti. Recimo da želite spojiti više senzora/aktuatora s hitnom potrebom za očuvanjem dodatnih pinova za napajanje modula zaslona koji je gladan igala.

Osim ako ne radite neku čaroliju, ponekad je teško rukovati svim tim vezama na jednoj Arduino ploči - pogotovo kada odlučite koristiti manje ploče jer ste u stiski s prostorom. Tada na scenu stupa serijska komunikacija.

Istražimo što je serijska komunikacija i načine na koje je možete postaviti s Arduinom za zadatke kao što su distribuirana obrada i opća integracija.

Što je serijska komunikacija?

Serijska komunikacija je metoda slanja i primanja podataka između dva ili više elektroničkih uređaja, jedan bit po jedan preko jedne komunikacijske linije. Kao što naziv sugerira, podaci se šalju u "serijama".

Čak i samo mogućnost učitavanja skica na vašu omiljenu Arduino ploču koristi serijsku komunikaciju preko USB-a.

Protokoli serijske komunikacije na Arduinu

Arduino ploče su nevjerojatno svestrane i mogu komunicirati sa širokim rasponom uređaja. Podržavaju četiri serijska komunikacijska protokola: Soft Serial, SPI (Serial Peripheral Interface), standardni UART (Universal Asynchronous Receiver-Transmitter) i I2C (Inter-Integrated Circuit). Za više pojedinosti pogledajte naš sveobuhvatni vodič o kako funkcioniraju serijske komunikacije UART, SPI i I2C.

Ovaj vodič koristi osnovne skice kako bi pokazao kako možete postaviti serijsku vezu između dvije Arduino Uno ploče koristeći različite protokole. Prilagodite kôd svojim specifičnim zahtjevima.

SPI (Serial Peripheral Interface)

SPI je sinkroni serijski komunikacijski protokol koji omogućuje komunikaciju velike brzine između mikrokontrolera i perifernih uređaja. Ovaj protokol zahtijeva četiri žice za komunikaciju: SCK (Serijski sat), MOSI (Master Out Slave In), MISO (Master In Slave Out), i SS (Odabir podređenog).

The SPI.h Biblioteka je vrlo zgodna za ovu vrstu komunikacije i mora biti uključena na vrh vaše skice.

#uključiti

Ovdje su SPI pinovi na Arduino Uno ploči:

Funkcija

Pin broj (digitalni)

Pin broj (ICSP zaglavlje)

MOS

11

4

MISO

12

1

SCK

13

3

SS

10 (zadano)

1 (alternativno)

Nakon pokretanja serijske komunikacije morat ćete konfigurirati komunikacijske pinove.

poništitipostaviti(){
SPI.početi(115200);
// Postavite načine pinova za SS, MOSI, MISO i SCK
pinMode(SS, IZLAZ);
pinMode(MOSI, IZLAZ);
pinMode(MISO, ULAZNI);
pinMode(SCK, IZLAZ);

// Postavite podređeni odabir (SS) pin na visoko mjesto da onemogućite pomoćni uređaj
digitalWrite(SS, VISOKO);
}

SS signal se koristi za obavještavanje podređenog uređaja kada se podaci prenose.

// Odaberite roba
digitalWrite(SS, NISKO);

// Pošalji podatke podređenom uređaju
SPI.prijenos(podaci);

// Poništi odabir podređenog uređaja
digitalWrite(SS, VISOKO);

Evo kako spojiti dvije Arduino ploče koristeći SPI.

Kod za glavnu ploču:

#uključiti
konstint slaveSelectPin = 10;
poništitipostaviti(){
SPI.početi(115200);
pinMode(slaveSelectPin, IZLAZ);
}

poništitipetlja(){
digitalWrite(slaveSelectPin, NISKO);
SPI.prijenos('H');
digitalWrite(slaveSelectPin, VISOKO);
odgoditi(1000);
}

Kod za pomoćnu ploču:

#uključiti
konstint slaveSelectPin = 10;
poništitipostaviti(){
SPI.početi(115200);
pinMode(slaveSelectPin, IZLAZ);
}

poništitipetlja(){
ako (digitalRead(slaveSelectPin) == NISKO) {
char primljeni podaci = SPI.prijenos('L');
Serijski.println(primljeni podaci);
}
}

Provjerite dijele li vaši uređaji zajednički temelj za ispravnu konfiguraciju.

UART (univerzalni asinkroni prijemnik-odašiljač)

UART je asinkroni serijski komunikacijski protokol koji omogućuje komunikaciju između uređaja koristeći samo dvije žice: TX (prijenos) i RX (primanje). UART se obično koristi za komunikaciju s uređajima kao što su GPS moduli, Bluetooth moduli i drugi mikrokontroleri. Svaka Arduino ploča dolazi opremljena s najmanje jednim priključkom za UART.

UART pinovi na popularnim Arduino pločama uključuju:

Odbor

Serijski pinovi

Serijski1 Pinovi

Serial2 Pinovi

Serijski3 pinovi

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)

Punu tablicu možete dobiti kod Arduino online dokumentacija o serijskoj komunikaciji.

Prvo povežite svoje ploče ovako:

Zatim upotrijebite ovaj kod za ploču pošiljatelja:

poništitipostaviti(){
Serijski.početi(9600);
}

poništitipetlja(){
// Slanje poruke serijskim putem svake sekunde
Serijski.println("Pozdrav s ploče pošiljatelja!");
odgoditi(1000);
}

Kod za prijemnu ploču:

poništitipostaviti(){
Serijski.početi(9600);
}

poništitipetlja(){
// Provjerite ima li dolaznih podataka
ako (Serijski.dostupno() > 0) {
// Pročitajte dolazne podatke i ispišite ih na serijski monitor
Niz dolazni podaci = Serijski.readString();
Serijski.println(dolazniPodaci);
}
}

Arduino Uno radi na logičkoj razini od 5V dok RS232 port računala koristi +/-12V logičku razinu.

Izravno spajanje Arduino Uno na RS232 port može i hoće oštetiti vašu ploču.

I2C (Inter-Integrated Circuit)

I2C je sinkroni serijski komunikacijski protokol koji omogućuje komunikaciju između više uređaja koristeći samo dvije žice: SDA (Serial Data) i SCL (Serial Clock). I2C se obično koristi za komunikaciju sa senzorima, EEPROM-ovima i drugim uređajima koji trebaju prenositi podatke na kratke udaljenosti.

I2C pinovi na Arduino Uno su SDA (A4) i SCL (A5).

Napravit ćemo jednostavan program za uspostavljanje veze između dvije Arduino ploče koristeći I2C komunikaciju. Ali prvo povežite svoje ploče ovako:

Kod za glavnu ploču:

#uključiti
poništitipostaviti(){
Žica.početi(); // pridružite se I2C sabirnici kao glavni
Serijski.početi(9600);
}

poništitipetlja(){
Žica.započeti prijenos(9); // odašilje podređenom uređaju s adresom 9
Žica.pisati('a'); // šalje 'a' bajt podređenom uređaju
Žica.endTransmission(); // zaustaviti prijenos

odgoditi(500);
}

Kod za pomoćnu ploču:

#uključiti
poništitipostaviti(){
Žica.početi(9); // pridružite se I2C sabirnici kao slave s adresom 9
Žica.onReceive(primiDogađaj);
Serijski.početi(9600);
}

poništitipetlja(){
odgoditi(100);
}

poništitireceiveEvent(int bajtova){
dok(Žica.dostupno()) { // proći kroz sve primljene bajtove
char primljeni bajt = Žica.čitati(); // pročitati svaki primljeni bajt
Serijski.println(primljeni bajt); // ispis primljenog bajta na serijski monitor
}
}

Što je SoftwareSerial?

Biblioteka Arduino SoftwareSerial razvijena je za oponašanje UART komunikacije, dopuštajući serijsku komunikaciju putem bilo koja dva digitalna pina na Arduino pločama. Korisno je kada hardverski UART već koriste drugi uređaji.

Da biste postavili SoftwareSerial, prvo uključite biblioteku SoftwareSerial u skicu.

#uključiti

Zatim stvorite instancu objekta SoftwareSerial navođenjem RX i TX pinove koji će se koristiti za komunikaciju.

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

Ovdje je primjer koda za Arduino koji demonstrira korištenje SoftwareSeriala:

#uključiti
SoftwareSerialmySerial(2, 3); // RX, TX pinovi
poništitipostaviti(){
Serijski.početi(9600); // pokretanje hardverske serije
mySerial.početi(9600); // pokretanje meke serije
}

poništitipetlja(){
ako (mySerial.dostupno()) {
Serijski.pisati(mySerial.čitati()); // poslati primljene podatke na hardverski serijski
}
ako (Serijski.dostupno()) {
mySerial.pisati(Serijski.čitati()); // slanje podataka s hardverskog serijskog na meki serijski
}
}

Serijska biblioteka

Serial library je moćan alat u Arduinu koji omogućuje komunikaciju između mikrokontrolera i računala ili drugih uređaja putem serijske veze. Neke uobičajene funkcije uključuju:

Funkcija

Opis

Serial.begin (brzina)

Inicijalizira serijsku komunikaciju s određenom brzinom prijenosa podataka.

Serial.print (podaci)

Šalje podatke na serijski priključak za prijenos kao ASCII tekst.

Serial.write (podaci)

Šalje neobrađene binarne podatke preko serijskog porta.

Serial.available()

Vraća broj bajtova dostupnih za čitanje iz serijskog međuspremnika.

Serial.flush()

Čeka da odlazni serijski podaci završe prijenos prije nastavka.

Serial.read()

Čita prvi bajt dolaznih serijskih podataka i vraća ih kao cijeli broj.

Brzina prijenosa podataka i format serijskih podataka

Brzina prijenosa podataka odnosi se na brzinu kojom se podaci prenose preko serijske veze. Predstavlja broj bitova koji se prenose u sekundi. Brzina prijenosa mora biti postavljena jednako na uređajima pošiljatelja i primatelja, inače bi komunikacija mogla biti iskrivljena ili uopće neće funkcionirati. Uobičajene brzine prijenosa za Arduino uključuju 9600, 19200, 38400 i 115200.

Format serijskih podataka odnosi se na strukturu podataka koji se šalju preko serijske veze. Postoje tri glavne komponente formata serijskih podataka: početni bitovi, podatkovni bitovi i stop bitovi.

  • Bitovi podataka: Broj bitova koji se koriste za predstavljanje jednog bajta podataka.
  • Paritet: Opcijski bit koji se koristi za provjeru grešaka. Može se postaviti na nijedan, parni ili neparni paritet, ovisno o zahtjevima komunikacijskog kanala.
  • Stop bitovi: Broj bitova koji se koriste za signaliziranje kraja podatkovnog bajta.

Format podataka mora biti isti na uređajima za prijenos i prijem kako bi se osigurala ispravna komunikacija. Evo primjera kako možete postaviti određene formate podataka:

poništitipostaviti(){
// Postavljanje serijske komunikacije s brzinom prijenosa od 9600 bauda, ​​8 podatkovnih bitova, bez pariteta i 1 zaustavnim bitom
Serijski.početi(9600, SERIJSKI_8N1);
}

Ovdje, SERIJSKI_8N1 predstavlja format podataka sa 8 bitovi podataka, bez pariteta i 1 stop bit. Ostale opcije kao što su SERIJSKI_7E1, SERIJSKI_8O2, itd., mogu se koristiti ovisno o specifičnim zahtjevima projekta.

Serijski razgovor

Arduino ploče pružaju različite opcije serijske komunikacije koje omogućuju učinkovitu i pouzdanu razmjenu podataka između uređaja. Razumijevanjem kako postaviti serijske komunikacijske protokole na Arduino IDE, možete iskoristiti snagu distribuirane obrade ili uvelike smanjiti broj žica koje se koriste u vašim projektima.