A soros kommunikáció lehetővé teszi az Arduino számára, hogy kommunikáljon más eszközökkel. Fedezze fel, hogyan csatlakoztathatja és kódolhatja őket a négy protokoll bármelyikével.

Amikor nagy Arduino-projekteken dolgozunk, meglehetősen gyakori, hogy kifogynak az alkatrészek csatlakoztatásához rendelkezésre álló érintkezők. Tegyük fel, hogy több érzékelőt/működtetőt szeretne csatlakoztatni, mivel sürgősen meg kell őriznie az extra tűket a tűre éhes kijelzőmodul táplálásához.

Hacsak nem varázsol, néha nehéz kezelni ezeket a kapcsolatokat egyetlen Arduino kártyán – különösen akkor, ha úgy dönt, hogy kisebb táblákat használ, mert szűk a hely. Ekkor jön képbe a soros kommunikáció.

Vizsgáljuk meg, mi az a soros kommunikáció, és hogyan állíthatja be az Arduinóval olyan feladatokhoz, mint az elosztott feldolgozás és az általános integráció.

Mi a soros kommunikáció?

A soros kommunikáció két vagy több elektronikus eszköz közötti adatok küldésének és fogadásának módja, egy-egy kommunikációs vonalon egy-egy bitet. Ahogy a neve is sugallja, az adatokat "sorozatban" küldik".

Még az is, hogy vázlatokat tölthet fel kedvenc Arduino kártyájára, soros kommunikációt használ USB-n keresztül.

Soros kommunikációs protokollok az Arduino-n

Az Arduino táblák hihetetlenül sokoldalúak, és számos eszközzel képesek kommunikálni. Négy soros kommunikációs protokollt támogatnak: Soft Serial, SPI (Serial Peripheral Interface), szabványos UART (Universal Asynchronous Receiver-Transmitter) és I2C (Inter-Integrated Circuit). További részletekért tekintse meg átfogó útmutatónkat a hogyan működik az UART, SPI és I2C soros kommunikáció.

Ez az oktatóanyag alapvető vázlatokat használ annak bemutatására, hogyan hozhat létre soros kapcsolatot két Arduino Uno kártya között különböző protokollok használatával. Módosítsa a kódot az Ön egyedi követelményeinek megfelelően.

SPI (soros periféria interfész)

Az SPI egy szinkron soros kommunikációs protokoll, amely nagy sebességű kommunikációt tesz lehetővé a mikrokontrollerek és a perifériás eszközök között. Ez a protokoll négy vezetéket igényel a kommunikációhoz: SCK (Soros óra), MOSI (Master Out Slave In), MISO (Master In Slave Out), és SS (Slave Select).

A SPI.h A könyvtár nagyon hasznos az ilyen típusú kommunikációhoz, és a vázlat tetején kell szerepelnie.

#tartalmazza

Íme az Arduino Uno kártyán lévő SPI-csapok:

Funkció

PIN-kód (digitális)

PIN-kód (ICSP fejléc)

MOS

11

4

MISO

12

1

SCK

13

3

SS

10 (alapértelmezett)

1 (Alternatív)

A soros kommunikáció inicializálása után konfigurálnia kell a kommunikációs érintkezőket.

üresbeállít(){
SPI.kezdődik(115200);
// Pin módok beállítása az SS, MOSI, MISO és SCK számára
pinMode(SS, KIMENET);
pinMode(MOSI, KIMENET);
pinMode(MISO, BEMENET);
pinMode(SCK, KIMENET);

// Állítsa magasra a slave kiválasztási (SS) pin magasra a slave eszköz letiltásához
digitalWrite(SS, MAGAS);
}

Az SS jel arra szolgál, hogy közölje a slave eszközzel, amikor adatátvitel folyik.

// Válassza ki a slave-t
digitalWrite(SS, ALACSONY);

// Adatok küldése a slave eszközre
SPI.átruházás(adat);

// Törölje a slave eszköz kijelölését
digitalWrite(SS, MAGAS);

Így csatlakoztathat két Arduino kártyát SPI segítségével.

A főtábla kódja:

#tartalmazza
constint slaveSelectPin = 10;
üresbeállít(){
SPI.kezdődik(115200);
pinMode(slaveSelectPin, KIMENET);
}

üreshurok(){
digitalWrite(slaveSelectPin, ALACSONY);
SPI.átruházás('H');
digitalWrite(slaveSelectPin, MAGAS);
késleltetés(1000);
}

A slave tábla kódja:

#tartalmazza
constint slaveSelectPin = 10;
üresbeállít(){
SPI.kezdődik(115200);
pinMode(slaveSelectPin, KIMENET);
}

üreshurok(){
ha (digitalRead(slaveSelectPin) == ALACSONY) {
char kapottAdat = SPI.átruházás('L');
Sorozatszám.println(receivedData);
}
}

Győződjön meg arról, hogy az eszközök közös alapon vannak a megfelelő konfigurációhoz.

UART (Universal Asynchronous Receiver-Transmitter)

Az UART egy aszinkron soros kommunikációs protokoll, amely lehetővé teszi az eszközök közötti kommunikációt mindössze két vezeték használatával: TX (Transmit) és RX (fogadás). Az UART-ot általában olyan eszközökkel való kommunikációra használják, mint a GPS-modulok, Bluetooth-modulok és más mikrokontrollerek. Minden Arduino kártya legalább egy porttal rendelkezik az UART számára.

A népszerű Arduino kártyákon található UART érintkezők a következők:

Tábla

Soros tűk

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)

A teljes táblázatot innen szerezheti be Az Arduino online dokumentációja a soros kommunikációról.

Először csatlakoztassa a táblákat a következőképpen:

Ezután használja ezt a kódot a küldő táblához:

üresbeállít(){
Sorozatszám.kezdődik(9600);
}

üreshurok(){
// Üzenet küldése a sorozaton keresztül másodpercenként
Sorozatszám.println(– Üdvözlet a feladó fórumról!);
késleltetés(1000);
}

A vevőkártya kódja:

üresbeállít(){
Sorozatszám.kezdődik(9600);
}

üreshurok(){
// Ellenőrizze, hogy vannak-e bejövő adatok
ha (Sorozatszám.elérhető() > 0) {
// Olvassa be a bejövő adatokat és nyomtassa ki a soros monitorra
Húr incomingData = Sorozatszám.readString();
Sorozatszám.println(incomingData);
}
}

Az Arduino Uno 5 V-os logikai szinten működik, míg a számítógép RS232 portja +/-12 V logikai szintet használ.

Az Arduino Uno közvetlen csatlakoztatása egy RS232 porthoz károsíthatja és károsíthatja a kártyát.

I2C (Inter-Integrated Circuit)

Az I2C egy szinkron soros kommunikációs protokoll, amely lehetővé teszi több eszköz közötti kommunikációt mindössze két vezetékkel: SDA (soros adat) és SCL (soros óra) használatával. Az I2C-t általában érzékelőkkel, EEPROM-okkal és egyéb olyan eszközökkel való kommunikációra használják, amelyeknek rövid távolságra kell adatot továbbítaniuk.

Az Arduino Uno I2C érintkezői SDA (A4) és SCL (A5).

Létrehozunk egy egyszerű programot két Arduino kártya közötti kapcsolat létrehozásához I2C kommunikáció segítségével. De először csatlakoztassa a táblákat a következőképpen:

A főtábla kódja:

#tartalmazza
üresbeállít(){
Huzal.kezdődik(); // kapcsolódjon az I2C buszhoz masterként
Sorozatszám.kezdődik(9600);
}

üreshurok(){
Huzal.startTransmission(9); // továbbítás a 9-es címmel rendelkező slave eszközre
Huzal.ír("a"); // 'a' bájtot küld a slave eszköznek
Huzal.end Transmission(); // az átvitel leállítása

késleltetés(500);
}

A slave tábla kódja:

#tartalmazza
üresbeállít(){
Huzal.kezdődik(9); // csatlakozzon az I2C buszhoz slaveként 9-es címmel
Huzal.onReceive(receiveEvent);
Sorozatszám.kezdődik(9600);
}

üreshurok(){
késleltetés(100);
}

üresgetEvent(int bájt){
míg(Huzal.elérhető()) { // ciklus az összes fogadott bájton
char ReceiveByte = Huzal.olvas(); // minden fogadott bájt beolvasása
Sorozatszám.println(receivedByte); // fogadott bájt nyomtatása soros monitorra
}
}

Mi az a SoftwareSerial?

Az Arduino SoftwareSerial könyvtárat az UART kommunikáció emulálására fejlesztették ki, lehetővé téve a soros kommunikációt az Arduino kártyák két digitális érintkezőjén keresztül. Akkor hasznos, ha a hardveres UART-ot más eszközök már használják.

A SoftwareSerial beállításához először vegye fel a SoftwareSerial könyvtárat a vázlatba.

#tartalmazza

Ezután hozzon létre egy példányt a SoftwareSerial objektumból a következő megadásával RX és TX kommunikációhoz használható csapok.

SzoftversorozatmySerial(2, 3); // RX, TX tűk

Íme egy példakód az Arduino számára, amely bemutatja a SoftwareSerial használatát:

#tartalmazza
SzoftversorozatmySerial(2, 3); // RX, TX tűk
üresbeállít(){
Sorozatszám.kezdődik(9600); // hardver soros indítása
mySerial.kezdődik(9600); // soft serial indítása
}

üreshurok(){
ha (mySerial.elérhető()) {
Sorozatszám.ír(mySerial.olvas()); // fogadott adatok küldése hardveres soros eszközre
}
ha (Sorozatszám.elérhető()) {
mySerial.ír(Sorozatszám.olvas()); // adatok küldése a soros hardverről a soft sorosra
}
}

A soros könyvtár

A soros könyvtár egy hatékony eszköz az Arduino-ban, amely lehetővé teszi a kommunikációt a mikrokontroller és a számítógép vagy más eszközök között soros kapcsolaton keresztül. Néhány gyakori funkció a következőket tartalmazza:

Funkció

Leírás

Serial.begin (sebesség)

Meghatározott adatsebességgel inicializálja a soros kommunikációt.

Serial.print (adatok)

Adatokat küld a soros portra ASCII szövegként történő továbbítás céljából.

Serial.write (adatok)

Nyers bináris adatokat küld a soros porton keresztül.

Serial.available()

A soros pufferből kiolvasható bájtok számát adja vissza.

Serial.flush()

Megvárja, amíg a kimenő soros adatok befejezik az átvitelt, mielőtt folytatná.

Serial.read()

Beolvassa a bejövő soros adatok első bájtját, és egész számként adja vissza.

Adatátviteli sebesség és soros adatformátum

Az adatátviteli sebesség az adatátvitel sebességére utal a soros kapcsolaton keresztül. A másodpercenként továbbított bitek számát jelenti. Az adatátviteli sebességet ugyanarra kell beállítani mind a küldő, mind a vevő eszközön, különben a kommunikáció torz lehet, vagy egyáltalán nem működik. Az Arduino általános adatátviteli sebessége a 9600, 19200, 38400 és 115200.

A soros adatformátum a soros kapcsolaton keresztül küldött adatok szerkezetére utal. A soros adatformátumnak három fő összetevője van: kezdőbitek, adatbitek és leállító bitek.

  • Adatbitek: Az egyetlen adatbájt megjelenítéséhez használt bitek száma.
  • Paritás: Hibaellenőrzésre használt opcionális bit. A kommunikációs csatorna követelményeitől függően beállítható egy sem, páros vagy páratlan paritásra.
  • Stop Bits: Az adatbájt végének jelzésére használt bitek száma.

Az adatformátumnak azonosnak kell lennie az adó és a vevő eszközökön a megfelelő kommunikáció érdekében. Íme egy példa arra, hogyan állíthat be bizonyos adatformátumokat:

üresbeállít(){
// Soros kommunikáció beállítása 9600 baud sebességgel, 8 adatbittel, paritás nélkül és 1 stopbittel
Sorozatszám.kezdődik(9600, SERIAL_8N1);
}

Itt, SERIAL_8N1 jelképezi az adatformátumot 8 adatbitek, nincs paritás, és 1 megállj kicsit. Egyéb lehetőségek, mint pl SERIAL_7E1, SERIAL_8O2stb., a projekt konkrét követelményeitől függően használhatók.

Soros beszélgetés

Az Arduino kártyák különféle soros kommunikációs lehetőségeket kínálnak, amelyek lehetővé teszik az eszközök közötti hatékony és megbízható adatcserét. Ha megérti, hogyan állíthat be soros kommunikációs protokollokat az Arduino IDE-n, kihasználhatja az elosztott feldolgozás erejét, vagy jelentősen csökkentheti a projektekben használt vezetékek számát.