Jadaside võimaldab teie Arduinol teiste seadmetega rääkida. Avastage, kuidas neid nelja protokolli abil ühendada ja kodeerida.
Suurte Arduino projektidega töötades on üsna tavaline, et komponentide ühendamiseks saadaolevad kontaktid saavad otsa. Oletagem, et soovite ühendada mitu andurit/täiturmehhanismi, kuna on kiireloomuline vajadus säilitada täiendavad tihvtid, et toita nööpnõelanäljas kuvamoodulit.
Kui te just maagiat ei tööta, on mõnikord keeruline kõiki neid ühendusi ühel Arduino plaadil hallata – eriti kui otsustate kasutada väiksemaid plaate, kuna teil on ruumipuudus. Siis tuleb mängu jadasuhtlus.
Uurime, mis on jadasuhtlus ja kuidas saate seda Arduinoga seadistada selliste ülesannete jaoks nagu hajutatud töötlemine ja üldine integreerimine.
Mis on jadasuhtlus?
Jadaside on andmete saatmise ja vastuvõtmise meetod kahe või enama elektroonilise seadme vahel, üks bitt korraga ühe sideliini kaudu. Nagu nimigi ütleb, saadetakse andmeid "seeriana".
Isegi kui saate oma lemmik Arduino plaadile visandeid üles laadida, kasutatakse USB kaudu jadasidet.
Arduino jadakommunikatsiooni protokollid
Arduino plaadid on uskumatult mitmekülgsed ja suudavad suhelda paljude seadmetega. Need toetavad nelja jadaliidese protokolli: Soft Serial, SPI (Serial Peripheral Interface), standardne UART (universaalne asünkroonne vastuvõtja-saatja) ja I2C (Integrated Circuit). Lisateabe saamiseks vaadake meie põhjalikku juhendit kuidas UART, SPI ja I2C jadaside töötavad.
Selles õpetuses kasutatakse põhilisi visandeid, et näidata, kuidas saate erinevate protokollide abil luua jadaühenduse kahe Arduino Uno plaadi vahel. Kohandage kood vastavalt teie konkreetsetele nõuetele.
SPI (Serial Peripheral Interface)
SPI on sünkroonne jadasideprotokoll, mis võimaldab kiiret sidet mikrokontrollerite ja välisseadmete vahel. See protokoll nõuab suhtluseks nelja juhtmestikku: SCK (jadakell), MOSI (Master Out Slave In), MISO (Master In Slave Out) ja SS (Slave Select).
The SPI.h raamatukogu on seda tüüpi suhtluse jaoks väga mugav ja see tuleb lisada visandi ülaossa.
#sisaldama
Siin on Arduino Uno tahvli SPI-tihvtid:
Funktsioon |
PIN-kood (digitaalne) |
PIN-kood (ICSP päis) |
---|---|---|
MOS |
11 |
4 |
MISO |
12 |
1 |
SCK |
13 |
3 |
SS |
10 (vaikimisi) |
1 (alternatiiv) |
Pärast jadaside lähtestamist peate konfigureerima sideviigud.
tühineseadistamine(){
SPI.alustada(115200);
// Määrake SS-, MOSI-, MISO- ja SCK-viigurežiimid
pinMode(SS, VÄLJUND);
pinMode(MOSI, VÄLJUND);
pinMode(MISO, SISEND);
pinMode(SCK, VÄLJUND);
// Alamseadme keelamiseks määrake alamvalimise (SS) pin kõrgeks
digitalWrite(SS, KÕRGE);
}
SS-signaali kasutatakse alamseadme teavitamiseks, millal andmeid edastatakse.
// Valige alam
digitalWrite(SS, MADAL);// Andmete saatmine alamseadmesse
SPI.ülekandmine(andmed);
// Tühista alamseadme valik
digitalWrite(SS, KÕRGE);
Siit saate teada, kuidas ühendada kaks Arduino plaati SPI abil.
Põhiplaadi kood:
#sisaldama
konstint slaveSelectPin = 10;
tühineseadistamine(){
SPI.alustada(115200);
pinMode(slaveSelectPin, VÄLJUND);
}
tühinesilmus(){
digitalWrite(slaveSelectPin, MADAL);
SPI.ülekandmine("H");
digitalWrite(slaveSelectPin, KÕRGE);
viivitus(1000);
}
Oriplaadi kood:
#sisaldama
konstint slaveSelectPin = 10;
tühineseadistamine(){
SPI.alustada(115200);
pinMode(slaveSelectPin, VÄLJUND);
}
tühinesilmus(){
kui (digitaalne lugemine(slaveSelectPin) == MADAL) {
char saadudAndmed = SPI.ülekandmine("L");
Sari.println(receivedData);
}
}
Veenduge, et teie seadmetel oleks õige konfiguratsiooni jaoks ühine alus.
UART (universaalne asünkroonne vastuvõtja-saatja)
UART on asünkroonne jadasideprotokoll, mis võimaldab suhelda seadmete vahel, kasutades ainult kahte juhet: TX (edastus) ja RX (vastuvõtt). UART-i kasutatakse tavaliselt suhtlemiseks selliste seadmetega nagu GPS-moodulid, Bluetooth-moodulid ja muud mikrokontrollerid. Iga Arduino plaat on varustatud vähemalt ühe UART-i pordiga.
Populaarsete Arduino plaatide UART-tihvtide hulka kuuluvad:
juhatus |
Seeriatihvtid |
Serial1 Pins |
Serial2 Pins |
Serial3 Pins |
---|---|---|---|---|
Uno, Nano, Mini |
0 (RX), 1 (TX) |
Ei kehti |
Ei kehti |
Ei kehti |
Mega |
0 (RX), 1 (TX) |
19 (RX), 18 (TX) |
17 (RX), 16 (TX) |
15 (RX), 14 (TX) |
Täieliku tabeli saate aadressilt Arduino veebidokumentatsioon jadakommunikatsiooni kohta.
Esiteks ühendage oma lauad järgmiselt:
Seejärel kasutage saatja tahvli jaoks seda koodi:
tühineseadistamine(){
Sari.alustada(9600);
}
tühinesilmus(){
// Saada sõnum jadateel iga sekundi järel
Sari.println("Tere saatjalaualt!");
viivitus(1000);
}
Vastuvõtjaplaadi kood:
tühineseadistamine(){
Sari.alustada(9600);
}
tühinesilmus(){
// Kontrollige, kas on sissetulevaid andmeid
kui (Sari.saadaval() > 0) {
// Lugege sissetulevad andmed ja printige need jadamonitorile
String incomingData = Sari.readString();
Sari.println(incomingData);
}
}
Arduino Uno töötab 5 V loogikal, samas kui arvuti RS232 port kasutab +/-12 V loogikataset.
Arduino Uno otsene ühendamine RS232 pordiga võib teie plaati kahjustada ja kahjustab seda.
I2C (integreeritud vooluahel)
I2C on sünkroonne jadasideprotokoll, mis võimaldab suhelda mitme seadme vahel, kasutades ainult kahte juhet: SDA (Serial Data) ja SCL (Serial Clock). I2C-d kasutatakse tavaliselt andurite, EEPROM-ide ja muude seadmetega suhtlemiseks, mis vajavad andmeid lühikeste vahemaade tagant.
Arduino Uno I2C tihvtid on SDA (A4) ja SCL (A5).
Loome lihtsa programmi kahe Arduino plaadi vahelise ühenduse loomiseks I2C side abil. Kuid kõigepealt ühendage oma lauad järgmiselt:
Põhiplaadi kood:
#sisaldama
tühineseadistamine(){
Traat.alustada(); // liituda I2C siiniga masterina
Sari.alustada(9600);
}tühinesilmus(){
Traat.alusta ülekannet(9); // edastada alamseadmesse aadressiga 9
Traat.kirjutada('a'); // saadab 'a' baidi alamseadmesse
Traat.end Transmission(); // saatmise lõpetamine
viivitus(500);
}
Oriplaadi kood:
#sisaldama
tühineseadistamine(){
Traat.alustada(9); // liituda I2C siiniga orjana aadressiga 9
Traat.kättesaamisel(receiveEvent);
Sari.alustada(9600);
}tühinesilmus(){
viivitus(100);
}
tühinesaada Sündmus(int baiti){
samal ajal(Traat.saadaval()) { // silmus läbi kõigi vastuvõetud baitide
char ReceiveByte = Traat.lugeda(); // loe iga vastuvõetud bait
Sari.println(vastuvõetud bait); // vastuvõetud baidi printimine jadamonitoril
}
}
Mis on SoftwareSerial?
Arduino SoftwareSerial teek töötati välja UART-suhtluse emuleerimiseks, võimaldades jadasidet kahe Arduino plaatide digitaalse kontakti kaudu. See on kasulik, kui riistvara UART on juba teistes seadmetes kasutuses.
SoftwareSeriali seadistamiseks lisage eskiisisse SoftwareSeriali teek.
#sisaldama
Seejärel looge SoftwareSerial objekti eksemplar, määrates RX ja TX tihvtid, mida kasutatakse suhtlemiseks.
TarkvaraSerialmySerial(2, 3); // RX, TX kontaktid
Siin on Arduino näidiskood, mis demonstreerib SoftwareSeriali kasutamist:
#sisaldama
TarkvaraSerialmySerial(2, 3); // RX, TX kontaktid
tühineseadistamine(){
Sari.alustada(9600); // riistvara seeria käivitamine
mySerial.alustada(9600); // alusta pehmet seeriat
}
tühinesilmus(){
kui (minu seeria.saadaval()) {
Sari.kirjutada(minu seeria.lugeda()); // saadab vastuvõetud andmed riistvaraseeria
}
kui (Sari.saadaval()) {
mySerial.kirjutada(Sari.lugeda()); // saadab andmeid riistvaralt pehmesse jadasse
}
}
Sariraamatukogu
Jadateek on Arduino võimas tööriist, mis võimaldab jadaühenduse kaudu suhelda mikrokontrolleri ja arvuti või muude seadmete vahel. Mõned levinumad funktsioonid hõlmavad järgmist:
Funktsioon |
Kirjeldus |
---|---|
Serial.begin (kiirus) |
Initsialiseerib jadaühenduse määratud andmeedastuskiirusega. |
Serial.print (andmed) |
Saadab andmed jadaporti ASCII tekstina edastamiseks. |
Serial.write (andmed) |
Saadab töötlemata binaarandmeid jadapordi kaudu. |
Serial.available() |
Tagastab jadapuhvrist lugemiseks saadaolevate baitide arvu. |
Serial.flush() |
Enne jätkamist ootab väljaminevate jadaandmete edastamise lõpetamist. |
Serial.read() |
Loeb sissetulevate jadaandmete esimese baidi ja tagastab selle täisarvuna. |
Baadisagedus ja jadaandmete vorming
Baadisagedus viitab kiirusele, millega andmeid jadaühenduse kaudu edastatakse. See tähistab sekundis edastatavate bittide arvu. Boodikiirus peab olema sama nii saatja kui ka vastuvõtja seadmes, vastasel juhul võib side olla segane või üldse mitte töötada. Arduino tavalised edastuskiirused hõlmavad 9600, 19200, 38400 ja 115200.
Jadaandmete vorming viitab jadaühenduse kaudu saadetavate andmete struktuurile. Andmejadavormingus on kolm põhikomponenti: algusbitid, andmebitid ja stoppbitid.
- Andmebitid: bittide arv, mida kasutatakse ühe andmebaidi esitamiseks.
- Pariteet: valikuline bitt, mida kasutatakse vigade kontrollimiseks. Olenevalt sidekanali nõuetest saab selle määrata nulli, paaris või paaritu pariteediks.
- Stop Bits: andmebaidi lõpust märku andvate bittide arv.
Nõuetekohase side tagamiseks peab andmevorming nii edastavatel kui ka vastuvõtvatel seadmetel olema sama. Siin on näide konkreetsete andmevormingute määramisest.
tühineseadistamine(){
// Seadistage jadaühendus 9600 boodikiirusega, 8 andmebitti, paarsus puudub ja 1 stopbitt
Sari.alustada(9600, SERIAL_8N1);
}
Siin SERIAL_8N1 tähistab andmevormingut 8 andmebitid, paarsus puudub ja 1 peatu natuke. Muud võimalused nagu SERIAL_7E1, SERIAL_8O2jne, saab kasutada olenevalt projekti erinõuetest.
Sarivestlus
Arduino plaadid pakuvad erinevaid jadasidevõimalusi, mis võimaldavad tõhusat ja usaldusväärset andmevahetust seadmete vahel. Kui mõistate, kuidas Arduino IDE-s jadasideprotokolle seadistada, saate kasutada hajutatud töötlemise võimsust või oluliselt vähendada oma projektides kasutatavate juhtmete arvu.