Sarjaviestinnän avulla Arduinosi voi puhua muiden laitteiden kanssa. Opi yhdistämään ja koodaamaan ne käyttämällä mitä tahansa neljästä protokollasta.

Kun työskentelet suurissa Arduino-projekteissa, on melko yleistä, että käytettävissä olevat nastat loppuvat komponenttien kytkemiseen. Oletetaan, että haluat liittää useita antureita/toimilaitteita, sillä sinun on kiireellisesti säilytettävä ylimääräiset nastat nastanälkäisen näyttömoduulin syöttämiseksi.

Jos et tee taikuutta, on joskus vaikeaa käsitellä kaikkia näitä liitäntöjä yhdellä Arduino-levyllä – varsinkin kun päätät käyttää pienempiä levyjä, koska sinulla on tilantarve. Silloin sarjaviestintä tulee peliin.

Tutkitaan, mitä sarjaviestintä on ja miten voit määrittää sen Arduinon kanssa tehtäviä, kuten hajautettua käsittelyä ja yleistä integrointia, varten.

Mitä on sarjaviestintä?

Sarjaliikenne on tapa lähettää ja vastaanottaa dataa kahden tai useamman elektronisen laitteen välillä bitti kerrallaan yhden tietoliikennelinjan kautta. Kuten nimestä voi päätellä, tiedot lähetetään "sarjassa".

instagram viewer

Jopa pelkkä luonnosten lataaminen suosikki Arduino-levyllesi käyttää sarjaliikennettä USB: n kautta.

Sarjaliikenneprotokollat ​​Arduinossa

Arduino-levyt ovat uskomattoman monipuolisia ja voivat kommunikoida monenlaisten laitteiden kanssa. Ne tukevat neljää sarjaliikenneprotokollaa: Soft Serial, SPI (Serial Peripheral Interface), standardi UART (Universal Asynchronous Receiver-Transmitter) ja I2C (Inter-Integrated Circuit). Katso lisätietoja kattavasta oppaastamme kuinka UART-, SPI- ja I2C-sarjaviestintä toimii.

Tämä opetusohjelma käyttää perusluonnoksia, jotka osoittavat, kuinka voit muodostaa sarjayhteyden kahden Arduino Uno -levyn välille käyttämällä erilaisia ​​protokollia. Mukauta koodi vastaamaan erityisvaatimuksiasi.

SPI (Serial Peripheral Interface)

SPI on synkroninen sarjaliikenneprotokolla, joka mahdollistaa nopean tiedonsiirron mikro-ohjainten ja oheislaitteiden välillä. Tämä protokolla vaatii neljä johtoa tiedonsiirtoon: SCK (Sarjakello), MOSI (Master Out Slave In), MISO (Master In Slave Out) ja SS (Slave Select).

The SPI.h kirjasto on erittäin kätevä tämäntyyppiseen viestintään, ja se on sisällytettävä luonnoksesi yläosaan.

#sisältää

Tässä ovat Arduino Uno -levyn SPI-nastat:

Toiminto

Pin-numero (digitaalinen)

Pin-numero (ICSP-otsikko)

MOS

11

4

MISO

12

1

SCK

13

3

SS

10 (oletus)

1 (Vaihtoehto)

Sarjaliikenteen alustamisen jälkeen sinun on määritettävä tietoliikennenastat.

mitätönperustaa(){
SPI.alkaa(115200);
// Aseta pin-tilat SS: lle, MOSI: lle, MISO: lle ja SCK: lle
pinMode(SS, OUTPUT);
pinMode(MOSI, OUTPUT);
pinMode(MISO, INPUT);
pinMode(SCK, OUTPUT);

// Aseta orjavalinnan (SS) pin korkeaksi poistaaksesi orjalaitteen käytöstä
digitalWrite(SS, KORKEA);
}

SS-signaalia käytetään kertomaan orjalaitteelle, kun dataa siirretään.

// Valitse orja
digitalWrite(SS, MATALA);

// Lähetä tiedot orjalaitteeseen
SPI.siirtää(tiedot);

// Poista orjalaitteen valinta
digitalWrite(SS, KORKEA);

Näin liität kaksi Arduino-levyä SPI: n avulla.

Päälevyn koodi:

#sisältää
konstint slaveSelectPin = 10;
mitätönperustaa(){
SPI.alkaa(115200);
pinMode(slaveSelectPin, OUTPUT);
}

mitätönsilmukka(){
digitalWrite(slaveSelectPin, MATALA);
SPI.siirtää("H");
digitalWrite(slaveSelectPin, KORKEA);
viive(1000);
}

Slavekortin koodi:

#sisältää
konstint slaveSelectPin = 10;
mitätönperustaa(){
SPI.alkaa(115200);
pinMode(slaveSelectPin, OUTPUT);
}

mitätönsilmukka(){
jos (digitaalinen luku(slaveSelectPin) == MATALA) {
hiiltyä vastaanotettuData = SPI.siirtää('L');
Sarja.println(vastaanotetut tiedot);
}
}

Varmista, että laitteillasi on yhteinen maa oikeaa konfigurointia varten.

UART (Universal Asynchronous Receiver-Transmitter)

UART on asynkroninen sarjaliikenneprotokolla, joka mahdollistaa viestinnän laitteiden välillä käyttämällä vain kahta johtoa: TX (Transmit) ja RX (Receive). UART-tekniikkaa käytetään yleisesti viestintään laitteiden, kuten GPS-moduulien, Bluetooth-moduulien ja muiden mikro-ohjainten kanssa. Jokainen Arduino-kortti on varustettu vähintään yhdellä UART-portilla.

Suosittujen Arduino-levyjen UART-nastat sisältävät:

hallitus

Sarja Pins

Serial1 Pins

Serial2 Pins

Serial3 Pins

Uno, Nano, Mini

0 (RX), 1 (TX)

Ei käytössä

Ei käytössä

Ei käytössä

Mega

0 (RX), 1 (TX)

19 (RX), 18 (TX)

17 (RX), 16 (TX)

15 (RX), 14 (TX)

Täyden pöydän saat osoitteesta Arduinon verkkodokumentaatio sarjaviestinnästä.

Yhdistä ensin levyt seuraavasti:

Käytä sitten tätä koodia lähetyskortille:

mitätönperustaa(){
Sarja.alkaa(9600);
}

mitätönsilmukka(){
// Lähetä viesti sarjana joka sekunti
Sarja.println("Terveisiä lähettäjätaululta!");
viive(1000);
}

Vastaanotinkortin koodi:

mitätönperustaa(){
Sarja.alkaa(9600);
}

mitätönsilmukka(){
// Tarkista, onko saapuvia tietoja
jos (Sarja.saatavilla() > 0) {
// Lue saapuvat tiedot ja tulosta ne sarjanäytölle
merkkijono incomingData = Sarja.readString();
Sarja.println(incomingData);
}
}

Arduino Uno toimii 5 V: n logiikkatasolla, kun taas tietokoneen RS232-portti käyttää +/-12 V logiikkatasoa.

Arduino Unon liittäminen suoraan RS232-porttiin voi vahingoittaa levyäsi.

I2C (Inter-Integrated Circuit)

I2C on synkroninen sarjaliikenneprotokolla, joka mahdollistaa viestinnän useiden laitteiden välillä käyttämällä vain kahta johdinta: SDA (Serial Data) ja SCL (Serial Clock). I2C: tä käytetään yleisesti viestintään antureiden, EEPROM-muistien ja muiden laitteiden kanssa, jotka tarvitsevat tiedonsiirtoa lyhyitä matkoja pitkin.

Arduino Unon I2C-nastat ovat SDA (A4) ja SCL (A5).

Luomme yksinkertaisen ohjelman yhteyden muodostamiseksi kahden Arduino-levyn välille I2C-viestinnän avulla. Mutta ensin, yhdistä levyt seuraavasti:

Päälevyn koodi:

#sisältää
mitätönperustaa(){
Lanka.alkaa(); // Liity I2C-väylään isäntänä
Sarja.alkaa(9600);
}

mitätönsilmukka(){
Lanka.aloitaTransmission(9); // lähetä orjalaitteeseen, jonka osoite on 9
Lanka.kirjoittaa('a'); // lähettää "a"-tavun orjalaitteeseen
Lanka.End Transmission(); // lopeta lähetys

viive(500);
}

Slavekortin koodi:

#sisältää
mitätönperustaa(){
Lanka.alkaa(9); // liity I2C-väylään orjaksi osoitteella 9
Lanka.onReceive(receiveEvent);
Sarja.alkaa(9600);
}

mitätönsilmukka(){
viive(100);
}

mitätönvastaanota Tapahtuma(int tavua){
sillä aikaa(Lanka.saatavilla()) { // kiertää kaikki vastaanotetut tavut
hiiltyä ReceivedByte = Lanka.lukea(); // lue jokainen vastaanotettu tavu
Sarja.println(receivedByte); // tulostaa vastaanotettu tavu sarjanäytölle
}
}

Mikä SoftwareSerial on?

Arduino SoftwareSerial -kirjasto kehitettiin emuloimaan UART-viestintää, mikä mahdollistaa sarjaviestinnän minkä tahansa kahden Arduino-levyjen digitaalisen nastan kautta. Se on hyödyllinen, kun laitteisto-UART on jo muiden laitteiden käytössä.

Ohjelmistosarjan määrittämistä varten sisällytä ensin SoftwareSerial-kirjasto luonnokseen.

#sisältää

Luo sitten SoftwareSerial-objektin esiintymä määrittämällä RX ja TX nastat, joita käytetään viestintään.

OhjelmistosarjamySerial(2, 3); // RX, TX-nastat

Tässä on esimerkkikoodi Arduinolle, joka osoittaa SoftwareSerialin käytön:

#sisältää
OhjelmistosarjamySerial(2, 3); // RX, TX-nastat
mitätönperustaa(){
Sarja.alkaa(9600); // Käynnistä laitteistosarja
mySerial.alkaa(9600); // aloita pehmeä sarja
}

mitätönsilmukka(){
jos (mySerial.saatavilla()) {
Sarja.kirjoittaa(mySerial.lukea()); // lähettää vastaanotetut tiedot laitteistosarjaan
}
jos (Sarja.saatavilla()) {
mySerial.kirjoittaa(Sarja.lukea()); // lähettää tietoja laitteistosarjasta pehmeälle sarjalle
}
}

Sarjakirjasto

Sarjakirjasto on tehokas työkalu Arduinossa, joka mahdollistaa viestinnän mikro-ohjaimen ja tietokoneen tai muiden laitteiden välillä sarjayhteyden kautta. Joitakin yleisiä toimintoja ovat:

Toiminto

Kuvaus

Serial.begin (nopeus)

Alustaa sarjaliikenteen tietyllä tiedonsiirtonopeudella.

Serial.print (data)

Lähettää tiedot sarjaporttiin lähetettäväksi ASCII-tekstina.

Serial.write (data)

Lähettää raakaa binaaridataa sarjaportin kautta.

Serial.available()

Palauttaa sarjapuskurista luettavissa olevien tavujen määrän.

Serial.flush()

Odottaa lähtevien sarjatietojen lähettämistä loppuun ennen jatkamista.

Serial.read()

Lukee saapuvan sarjatiedon ensimmäisen tavun ja palauttaa sen kokonaislukuna.

Tiedonsiirtonopeus ja sarjatietomuoto

Tiedonsiirtonopeus tarkoittaa nopeutta, jolla dataa siirretään sarjayhteyden kautta. Se edustaa bittien määrää, jotka lähetetään sekunnissa. Tiedonsiirtonopeus on asetettava samaksi sekä lähettäjä- että vastaanottajalaitteisiin, muuten tiedonsiirto voi olla sekavaa tai ei toimi ollenkaan. Arduinon yleisiä siirtonopeuksia ovat 9600, 19200, 38400 ja 115200.

Sarjadataformaatilla tarkoitetaan sarjayhteyden kautta lähetettävän tiedon rakennetta. Sarjamuotoisessa datamuodossa on kolme pääkomponenttia: aloitusbitit, databitit ja lopetusbitit.

  • Databitit: Yhden datatavun esittämiseen käytettyjen bittien määrä.
  • Pariteetti: valinnainen bitti, jota käytetään virheiden tarkistamiseen. Se voidaan asettaa arvoon ei mitään, parillinen tai pariton, riippuen viestintäkanavan vaatimuksista.
  • Stop Bits: Datatavun lopun signalointiin käytettyjen bittien määrä.

Tietomuodon on oltava sama sekä lähettävässä että vastaanottavassa laitteessa oikean viestinnän varmistamiseksi. Tässä on esimerkki siitä, kuinka voit määrittää tiettyjä tietomuotoja:

mitätönperustaa(){
// Aseta sarjaliikenne 9600 baudin nopeudella, 8 databitillä, ei pariteettia ja 1 stop-bitti
Sarja.alkaa(9600, SERIAL_8N1);
}

Tässä, SERIAL_8N1 edustaa datamuotoa 8 databitit, ei pariteettia ja 1 lopeta vähän. Muita vaihtoehtoja esim SERIAL_7E1, SERIAL_8O2jne., voidaan käyttää projektin erityisvaatimuksista riippuen.

Sarjakeskustelu

Arduino-levyt tarjoavat erilaisia ​​sarjaliikennevaihtoehtoja, jotka mahdollistavat tehokkaan ja luotettavan tiedonsiirron laitteiden välillä. Ymmärtämällä, kuinka sarjaliikenneprotokollat ​​määritetään Arduino IDE: ssä, voit hyödyntää hajautetun käsittelyn tehoa tai vähentää huomattavasti projekteissasi käytettyjen johtojen määrää.