Sériová komunikácia umožňuje vášmu Arduinu komunikovať s inými zariadeniami. Zistite, ako ich pripojiť a kódovať pomocou ktoréhokoľvek zo štyroch protokolov.

Pri práci na veľkých projektoch Arduino je celkom bežné, že sa minú dostupné kolíky na pripojenie komponentov. Povedzme, že chcete pripojiť viacero senzorov/akčných členov s naliehavou potrebou zachovať ďalšie kolíky, aby ste mohli napájať modul displeja, ktorý je náročný na piny.

Pokiaľ nevykonáte nejakú mágiu, je niekedy ťažké zvládnuť všetky tieto pripojenia na jednej Arduino doske – najmä keď sa rozhodnete použiť menšie dosky, pretože vás tlačí priestor. Vtedy prichádza do hry sériová komunikácia.

Poďme preskúmať, čo je sériová komunikácia a spôsoby, ako ju môžete nastaviť s Arduino pre úlohy, ako je distribuované spracovanie a všeobecná integrácia.

Čo je sériová komunikácia?

Sériová komunikácia je spôsob odosielania a prijímania údajov medzi dvoma alebo viacerými elektronickými zariadeniami, po jednom bite cez jedinú komunikačnú linku. Ako už názov napovedá, údaje sa odosielajú v „sériách".

instagram viewer

Dokonca aj možnosť nahrať náčrty na vašu obľúbenú dosku Arduino využíva sériovú komunikáciu cez USB.

Protokoly sériovej komunikácie na Arduine

Dosky Arduino sú neuveriteľne všestranné a dokážu komunikovať so širokou škálou zariadení. Podporujú štyri sériové komunikačné protokoly: Soft Serial, SPI (Serial Peripheral Interface), štandardný UART (Universal Asynchrónny prijímač-Vysielač) a I2C (Inter-Integrated Circuit). Ďalšie podrobnosti nájdete v našom komplexnom sprievodcovi na ako funguje sériová komunikácia UART, SPI a I2C.

Tento tutoriál používa základné náčrty, aby ukázal, ako môžete nastaviť sériové pripojenie medzi dvoma doskami Arduino Uno pomocou rôznych protokolov. Upravte kód tak, aby vyhovoval vašim špecifickým požiadavkám.

SPI (sériové periférne rozhranie)

SPI je synchrónny sériový komunikačný protokol, ktorý umožňuje vysokorýchlostnú komunikáciu medzi mikrokontrolérmi a periférnymi zariadeniami. Tento protokol vyžaduje na komunikáciu štyri vodiče: SCK (Sériové hodiny), MOSI (Master Out Slave In), MISO (Master In Slave Out), a SS (Slave Select).

The SPI.h knižnica je veľmi užitočná pre tento typ komunikácie a musí byť zahrnutá v hornej časti náčrtu.

#zahŕňajú

Tu sú kolíky SPI na doske Arduino Uno:

Funkcia

Číslo PIN (digitálne)

Číslo PIN (hlavička ICSP)

MOS

11

4

MISO

12

1

SCK

13

3

SS

10 (predvolené)

1 (alternatíva)

Po inicializácii sériovej komunikácie budete musieť nakonfigurovať komunikačné kolíky.

neplatnénastaviť(){
SPI.začať(115200);
// Nastavenie režimov pinov pre SS, MOSI, MISO a SCK
pinMode(SS, VÝKON);
pinMode(MOSI, VÝKON);
pinMode(MISO, VSTUP);
pinMode(SCK, VÝKON);

// Nastavte kolík výberu slave (SS) na vysokú hodnotu, aby ste deaktivovali podriadené zariadenie
digitalWrite(SS, VYSOKÝ);
}

Signál SS sa používa na informovanie podriadeného zariadenia o prenose údajov.

// Vyberte slave
digitalWrite(SS, NÍZKA);

// Odoslanie údajov do podriadeného zariadenia
SPI.prevod(údaje);

// Zrušte výber podriadeného zariadenia
digitalWrite(SS, VYSOKÝ);

Tu je návod, ako pripojiť dve dosky Arduino pomocou SPI.

Kód pre hlavnú dosku:

#zahŕňajú
konštint slaveSelectPin = 10;
neplatnénastaviť(){
SPI.začať(115200);
pinMode(slaveSelectPin, VÝKON);
}

neplatnéslučka(){
digitalWrite(slaveSelectPin, NÍZKA);
SPI.prevod('H');
digitalWrite(slaveSelectPin, VYSOKÝ);
meškanie(1000);
}

Kód pre podriadenú dosku:

#zahŕňajú
konštint slaveSelectPin = 10;
neplatnénastaviť(){
SPI.začať(115200);
pinMode(slaveSelectPin, VÝKON);
}

neplatnéslučka(){
ak (digitalRead(slaveSelectPin) == NÍZKA) {
char prijaté údaje = SPI.prevod('L');
Serial.println(prijaté údaje);
}
}

Pre správnu konfiguráciu sa uistite, že vaše zariadenia zdieľajú spoločnú zem.

UART (univerzálny asynchrónny prijímač-vysielač)

UART je asynchrónny sériový komunikačný protokol, ktorý umožňuje komunikáciu medzi zariadeniami iba pomocou dvoch vodičov: TX (vysielanie) a RX (prijímanie). UART sa bežne používa na komunikáciu so zariadeniami, ako sú moduly GPS, moduly Bluetooth a ďalšie mikrokontroléry. Každá doska Arduino je vybavená aspoň jedným portom pre UART.

Piny UART na populárnych doskách Arduino zahŕňajú:

rady

Sériové kolíky

Sériové 1 piny

Sériové 2 piny

Sériové 3 piny

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)

Môžete získať celý stôl z Online dokumentácia Arduina o sériovej komunikácii.

Najprv pripojte dosky takto:

Potom použite tento kód pre dosku odosielateľa:

neplatnénastaviť(){
Serial.začať(9600);
}

neplatnéslučka(){
// Každú sekundu odošlete správu cez seriál
Serial.println("Dobrý deň z nástenky odosielateľa!");
meškanie(1000);
}

Kód pre dosku prijímača:

neplatnénastaviť(){
Serial.začať(9600);
}

neplatnéslučka(){
// Skontrolujte, či existujú nejaké prichádzajúce údaje
ak (Serial.k dispozícii() > 0) {
// Prečítajte si prichádzajúce údaje a vytlačte ich na sériový monitor
Reťazec prichádzajúce údaje = Serial.readString();
Serial.println(prichádzajúce údaje);
}
}

Arduino Uno pracuje na logickej úrovni 5V, zatiaľ čo port RS232 počítača používa logickú úroveň +/-12V.

Priame pripojenie Arduino Uno k portu RS232 môže a môže poškodiť vašu dosku.

I2C (Inter-Integrated Circuit)

I2C je synchrónny sériový komunikačný protokol, ktorý umožňuje komunikáciu medzi viacerými zariadeniami iba pomocou dvoch káblov: SDA (Serial Data) a SCL (Serial Clock). I2C sa bežne používa na komunikáciu so senzormi, EEPROM a inými zariadeniami, ktoré potrebujú prenášať dáta na krátke vzdialenosti.

I2C kolíky na Arduino Uno sú SDA (A4) a SCL (A5).

Vytvoríme jednoduchý program na vytvorenie spojenia medzi dvoma Arduino doskami pomocou I2C komunikácie. Najprv však pripojte dosky takto:

Kód pre hlavnú dosku:

#zahŕňajú
neplatnénastaviť(){
Drôt.začať(); // pripojiť sa k zbernici I2C ako hlavný
Serial.začať(9600);
}

neplatnéslučka(){
Drôt.začaťPrenos(9); // prenos do slave zariadenia s adresou 9
Drôt.písať('a'); // odošle bajt 'a' podriadenému zariadeniu
Drôt.koniecPrenos(); // zastavenie vysielania

meškanie(500);
}

Kód pre podriadenú dosku:

#zahŕňajú
neplatnénastaviť(){
Drôt.začať(9); // pripojiť sa k I2C zbernici ako slave s adresou 9
Drôt.onReceive(receiveEvent);
Serial.začať(9600);
}

neplatnéslučka(){
meškanie(100);
}

neplatnépríjemUdalosť(int bajtov){
zatiaľ čo(Drôt.k dispozícii()) { // prechádza cez všetky prijaté bajty
char prijatýByte = Drôt.čítať(); // prečíta každý prijatý bajt
Serial.println(receivedByte); // vypíše prijatý bajt na sériový monitor
}
}

Čo je SoftwareSerial?

Knižnica Arduino SoftwareSerial bola vyvinutá na emuláciu komunikácie UART, ktorá umožňuje sériovú komunikáciu cez ľubovoľné dva digitálne piny na doskách Arduino. Je to užitočné, keď hardvérový UART už používajú iné zariadenia.

Ak chcete nastaviť SoftwareSerial, najprv do náčrtu zahrňte knižnicu SoftwareSerial.

#zahŕňajú

Potom vytvorte inštanciu objektu SoftwareSerial zadaním RX a TX kolíky, ktoré sa majú použiť na komunikáciu.

Software SerialmySerial(2, 3); // RX, TX kolíky

Tu je príklad kódu pre Arduino, ktorý demonštruje použitie SoftwareSerial:

#zahŕňajú
Software SerialmySerial(2, 3); // RX, TX kolíky
neplatnénastaviť(){
Serial.začať(9600); // spustenie hardvérovej série
mySerial.začať(9600); // spustiť soft serial
}

neplatnéslučka(){
ak (mySerial.k dispozícii()) {
Serial.písať(mySerial.čítať()); // odoslanie prijatých údajov do sériového hardvéru
}
ak (Serial.k dispozícii()) {
mySerial.písať(Serial.čítať()); // odošle dáta z hardvérového sériového čísla do soft serialu
}
}

Sériová knižnica

Sériová knižnica je výkonný nástroj v Arduine, ktorý umožňuje komunikáciu medzi mikrokontrolérom a počítačom alebo inými zariadeniami prostredníctvom sériového pripojenia. Niektoré bežné funkcie zahŕňajú:

Funkcia

Popis

Serial.begin (rýchlosť)

Inicializuje sériovú komunikáciu s určenou dátovou rýchlosťou.

Serial.print (údaje)

Posiela údaje na sériový port na prenos ako text ASCII.

Serial.write (údaje)

Posiela nespracované binárne dáta cez sériový port.

Serial.available()

Vráti počet bajtov, ktoré sú k dispozícii na čítanie zo sériovej vyrovnávacej pamäte.

Serial.flush()

Pred pokračovaním čaká na dokončenie prenosu odchádzajúce sériové dáta.

Serial.read()

Prečíta prvý bajt prichádzajúcich sériových údajov a vráti ho ako celé číslo.

Prenosová rýchlosť a formát sériových údajov

Prenosová rýchlosť sa vzťahuje na rýchlosť, ktorou sa dáta prenášajú cez sériové pripojenie. Predstavuje počet bitov, ktoré sa prenesú za sekundu. Prenosová rýchlosť musí byť nastavená rovnako na odosielacom aj prijímacom zariadení, inak môže byť komunikácia skomolená alebo nemusí fungovať vôbec. Bežné prenosové rýchlosti pre Arduino zahŕňajú 9600, 19200, 38400 a 115200.

Formát sériových údajov sa týka štruktúry údajov odosielaných cez sériové pripojenie. Formát sériových údajov má tri hlavné komponenty: štartovacie bity, dátové bity a stop bity.

  • Dátové bity: Počet bitov použitých na reprezentáciu jedného dátového bajtu.
  • Parita: Voliteľný bit používaný na kontrolu chýb. Môže byť nastavená na žiadnu, párnu alebo nepárnu paritu v závislosti od požiadaviek komunikačného kanála.
  • Stop Bits: Počet bitov použitých na signalizáciu konca dátového bajtu.

Formát údajov musí byť rovnaký na vysielacom aj prijímacom zariadení, aby sa zabezpečila správna komunikácia. Tu je príklad, ako môžete nastaviť konkrétne formáty údajov:

neplatnénastaviť(){
// Nastavenie sériovej komunikácie s prenosovou rýchlosťou 9600, 8 dátových bitov, žiadna parita a 1 stop bit
Serial.začať(9600, SERIAL_8N1);
}

Tu, SERIAL_8N1 predstavuje dátový formát s 8 dátové bity, bez parity a 1 zastaviť bit. Ďalšie možnosti ako napr SERIAL_7E1, SERIAL_8O2, atď., môžu byť použité v závislosti od konkrétnych požiadaviek projektu.

Serial Talk

Dosky Arduino poskytujú rôzne možnosti sériovej komunikácie, ktoré umožňujú efektívnu a spoľahlivú výmenu dát medzi zariadeniami. Pochopením toho, ako nastaviť sériové komunikačné protokoly na Arduino IDE, môžete využiť výkon distribuovaného spracovania alebo výrazne znížiť počet káblov používaných vo vašich projektoch.