Nuoseklus ryšys leidžia jūsų Arduino bendrauti su kitais įrenginiais. Sužinokite, kaip juos prijungti ir koduoti naudodami bet kurį iš keturių protokolų.

Dirbant su dideliais „Arduino“ projektais, gana dažnai pritrūksta galimų kaiščių komponentams prijungti. Tarkime, kad norite prijungti kelis jutiklius/pavaras, nes skubiai reikia išsaugoti papildomus kaiščius, kad padėtų smeigtukų ištroškusiam ekrano moduliui.

Jei nedirbate šiek tiek magijos, kartais sunku sutvarkyti visas šias jungtis vienoje Arduino plokštėje, ypač kai nuspręsite naudoti mažesnes plokštes, nes jums trūksta vietos. Štai tada atsiranda serijinis ryšys.

Panagrinėkime, kas yra nuoseklusis ryšys ir kaip galite jį nustatyti naudodami „Arduino“ tokioms užduotims kaip paskirstytas apdorojimas ir bendra integracija.

Kas yra serijinis ryšys?

Nuoseklus ryšys yra duomenų siuntimo ir priėmimo tarp dviejų ar daugiau elektroninių įrenginių, po vieną bitą per vieną ryšio liniją, būdas. Kaip rodo pavadinimas, duomenys siunčiami serijomis".

instagram viewer

Netgi norint įkelti eskizus į mėgstamą „Arduino“ plokštę, naudojamas nuoseklusis ryšys per USB.

Serijinio ryšio protokolai „Arduino“.

Arduino plokštės yra neįtikėtinai universalios ir gali bendrauti su įvairiais įrenginiais. Jie palaiko keturis nuosekliojo ryšio protokolus: Soft Serial, SPI (Serial Peripheral Interface), standartinį UART (universalų asinchroninį imtuvą-siųstuvą) ir I2C (integruotą grandinę). Norėdami gauti daugiau informacijos, peržiūrėkite mūsų išsamų vadovą kaip veikia UART, SPI ir I2C nuoseklusis ryšys.

Šioje pamokoje naudojami pagrindiniai eskizai, rodantys, kaip galite nustatyti nuoseklųjį ryšį tarp dviejų Arduino Uno plokščių naudojant įvairius protokolus. Pritaikykite kodą, kad jis atitiktų jūsų konkrečius reikalavimus.

SPI (nuoseklioji periferinė sąsaja)

SPI yra sinchroninis nuosekliojo ryšio protokolas, leidžiantis sparčiai palaikyti ryšį tarp mikrovaldiklių ir periferinių įrenginių. Šiam protokolui palaikyti reikalingi keturi laidai: SCK (Serijos laikrodis), MOSI (Master Out Slave In), MISO (Master In Slave Out) ir SS (Slave Select).

The SPI.h biblioteka yra labai patogi tokio tipo bendravimui ir turi būti įtraukta į eskizo viršuje.

#įtraukti

Štai Arduino Uno plokštės SPI kaiščiai:

Funkcija

PIN numeris (skaitmeninis)

PIN numeris (ICSP antraštė)

MOS

11

4

MISO

12

1

SCK

13

3

SS

10 (numatytasis)

1 (alternatyva)

Pradėję nuoseklųjį ryšį, turėsite sukonfigūruoti ryšio kaiščius.

tuštumasąranka(){
SPI.pradėti(115200);
// Nustatykite SS, MOSI, MISO ir SCK kaiščio režimus
pinMode(SS, IŠVADA);
pinMode(MOSI, IŠVADA);
pinMode(MISO, ĮVESTIS);
pinMode(SCK, IŠVADA);

// Nustatykite vergo pasirinkimo (SS) kaištį aukštai, kad išjungtumėte pavaldų įrenginį
skaitmeninis rašymas(SS, AUKŠTAS);
}

SS signalas naudojamas informuoti pavaldinį įrenginį, kada duomenys perduodami.

// Pasirinkite vergą
skaitmeninis rašymas(SS, MAŽAS);

// Siųsti duomenis į pagalbinį įrenginį
SPI.perkėlimas(duomenys);

// Panaikinkite pagalbinio įrenginio pasirinkimą
skaitmeninis rašymas(SS, AUKŠTAS);

Štai kaip prijungti dvi Arduino plokštes naudojant SPI.

Pagrindinės plokštės kodas:

#įtraukti
konsttarpt slaveSelectPin = 10;
tuštumasąranka(){
SPI.pradėti(115200);
pinMode(slaveSelectPin, IŠVADA);
}

tuštumakilpa(){
skaitmeninis rašymas(slaveSelectPin, MAŽAS);
SPI.perkėlimas("H");
skaitmeninis rašymas(slaveSelectPin, AUKŠTAS);
delsimas(1000);
}

Verginės plokštės kodas:

#įtraukti
konsttarpt slaveSelectPin = 10;
tuštumasąranka(){
SPI.pradėti(115200);
pinMode(slaveSelectPin, IŠVADA);
}

tuštumakilpa(){
jeigu (skaitmeninis skaitymas(slaveSelectPin) == MAŽAS) {
char gautiDuomenys = SPI.perkėlimas("L");
Serijinis.println(gauti duomenys);
}
}

Įsitikinkite, kad jūsų įrenginiai turi bendrą pagrindą tinkamai konfigūruoti.

UART (universalus asinchroninis imtuvas-siųstuvas)

UART yra asinchroninis nuosekliojo ryšio protokolas, leidžiantis palaikyti ryšį tarp įrenginių naudojant tik du laidus: TX (perdavimo) ir RX (priėmimo). UART dažniausiai naudojamas ryšiui su įrenginiais, tokiais kaip GPS moduliai, Bluetooth moduliai ir kiti mikrovaldikliai. Kiekvienoje Arduino plokštėje yra bent vienas UART prievadas.

Populiarių Arduino plokščių UART kaiščiai apima:

Lenta

Serijiniai kaiščiai

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)

Visą lentelę galite gauti iš Arduino internetinė dokumentacija apie serijinį ryšį.

Pirmiausia prijunkite plokštes taip:

Tada naudokite šį kodą siuntėjo lentai:

tuštumasąranka(){
Serijinis.pradėti(9600);
}

tuštumakilpa(){
// Siųsti žinutę per seriją kas sekundę
Serijinis.println("Sveiki iš siuntėjų lentos!");
delsimas(1000);
}

Imtuvo plokštės kodas:

tuštumasąranka(){
Serijinis.pradėti(9600);
}

tuštumakilpa(){
// Patikrinkite, ar nėra gaunamų duomenų
jeigu (Serijinis.prieinama() > 0) {
// Perskaitykite gaunamus duomenis ir išspausdinkite juos į serijinį monitorių
Styga incomingData = Serijinis.skaitymo eilutė();
Serijinis.println(incomingData);
}
}

„Arduino Uno“ veikia 5 V loginiu lygiu, o kompiuterio RS232 prievadas naudoja +/-12 V loginį lygį.

Tiesioginis Arduino Uno prijungimas prie RS232 prievado gali ir sugadins jūsų plokštę.

I2C (integruota grandinė)

I2C yra sinchroninis nuosekliojo ryšio protokolas, leidžiantis palaikyti ryšį tarp kelių įrenginių naudojant tik du laidus: SDA (Serial Data) ir SCL (Serial Clock). I2C dažniausiai naudojamas ryšiui su jutikliais, EEPROM ir kitais įrenginiais, kuriems reikia perduoti duomenis nedideliais atstumais.

Arduino Uno I2C kaiščiai yra SDA (A4) ir SCL (A5).

Sukursime paprastą programą, skirtą užmegzti ryšį tarp dviejų Arduino plokščių naudojant I2C ryšį. Bet pirmiausia prijunkite plokštes taip:

Pagrindinės plokštės kodas:

#įtraukti
tuštumasąranka(){
Viela.pradėti(); // prisijungti prie I2C magistralės kaip pagrindinis
Serijinis.pradėti(9600);
}

tuštumakilpa(){
Viela.pradėtiPerdavimas(9); // perduoti į pavaldų įrenginį 9 adresu
Viela.rašyti('a'); // siunčia „a“ baitą į pavaldų įrenginį
Viela.pabaiga Perdavimas(); // sustabdyti siuntimą

delsimas(500);
}

Verginės plokštės kodas:

#įtraukti
tuštumasąranka(){
Viela.pradėti(9); // prisijungti prie I2C magistralės kaip vergas su 9 adresu
Viela.onGauti(receiveEvent);
Serijinis.pradėti(9600);
}

tuštumakilpa(){
delsimas(100);
}

tuštumagautiEvent(tarpt baitai){
kol(Viela.prieinama()) { // kilpa per visus gautus baitus
char gautas baitas = Viela.skaityti(); // perskaityti kiekvieną gautą baitą
Serijinis.println(gautas baitas); // spausdinti gautą baitą serijiniame monitoriuje
}
}

Kas yra SoftwareSerial?

„Arduino SoftwareSerial“ biblioteka buvo sukurta imituoti UART ryšį, leidžiantį nuoseklųjį ryšį per bet kuriuos du skaitmeninius „Arduino“ plokščių kaiščius. Tai naudinga, kai aparatinę UART jau naudoja kiti įrenginiai.

Norėdami nustatyti SoftwareSerial, pirmiausia į eskizą įtraukite SoftwareSerial biblioteką.

#įtraukti

Tada sukurkite SoftwareSerial objekto egzempliorių nurodydami RX ir TX smeigtukai, naudojami bendravimui.

Serijinė programinė įrangamySerial(2, 3); // RX, TX kaiščiai

Čia yra „Arduino“ kodo pavyzdys, rodantis „SoftwareSerial“ naudojimą:

#įtraukti
Serijinė programinė įrangamySerial(2, 3); // RX, TX kaiščiai
tuštumasąranka(){
Serijinis.pradėti(9600); // paleisti aparatūros seriją
mySerial.pradėti(9600); // paleisti minkštą serialą
}

tuštumakilpa(){
jeigu (mano serija.prieinama()) {
Serijinis.rašyti(mano serija.skaityti()); // siųsti gautus duomenis į aparatūros seriją
}
jeigu (Serijinis.prieinama()) {
mySerial.rašyti(Serijinis.skaityti()); // siųsti duomenis iš aparatinės įrangos serijos į minkštąją seriją
}
}

Serijinė biblioteka

Serijinė biblioteka yra galingas Arduino įrankis, leidžiantis palaikyti ryšį tarp mikrovaldiklio ir kompiuterio ar kitų įrenginių per nuoseklųjį ryšį. Kai kurios bendros funkcijos apima:

Funkcija

apibūdinimas

Serial.begin (greitis)

Inicijuoja nuoseklųjį ryšį su nurodyta duomenų perdavimo sparta.

Serial.print (duomenys)

Siunčia duomenis į nuoseklųjį prievadą, kad jie būtų perduoti kaip ASCII tekstas.

Serial.write (duomenys)

Per nuoseklųjį prievadą siunčia neapdorotus dvejetainius duomenis.

Serial.available()

Grąžina baitų, kuriuos galima nuskaityti iš nuosekliojo buferio, skaičių.

Serial.flush()

Prieš tęsdami, laukiama, kol siunčiami serijiniai duomenys bus perduoti.

Serial.read()

Nuskaito pirmąjį gaunamų serijinių duomenų baitą ir grąžina jį kaip sveikąjį skaičių.

Perdavimo sparta ir serijos duomenų formatas

Perdavimo sparta reiškia duomenų perdavimo greitį nuosekliuoju ryšiu. Tai rodo per sekundę perduodamų bitų skaičių. Bodų sparta turi būti nustatyta vienoda tiek siuntėjo, tiek imtuvo įrenginiuose, kitaip ryšys gali būti iškraipytas arba visai neveikti. Įprasti Arduino perdavimo spartai yra 9600, 19200, 38400 ir 115200.

Serijos duomenų formatas reiškia duomenų, siunčiamų per nuoseklųjį ryšį, struktūrą. Yra trys pagrindiniai nuoseklaus duomenų formato komponentai: pradžios bitai, duomenų bitai ir pabaigos bitai.

  • Duomenų bitai: bitų, naudojamų vienam duomenų baitui, skaičius.
  • Paritetas: pasirenkamas bitas, naudojamas klaidoms tikrinti. Priklausomai nuo ryšio kanalo reikalavimų, jis gali būti nustatytas kaip nėra, lyginis arba nelyginis.
  • Stop Bits: bitų, naudojamų signalizuoti apie duomenų baito pabaigą, skaičius.

Duomenų formatas turi būti vienodas tiek siunčiančiame, tiek priimančiame įrenginiuose, kad būtų užtikrintas tinkamas ryšys. Štai pavyzdys, kaip galite nustatyti konkrečius duomenų formatus:

tuštumasąranka(){
// Nustatyti nuoseklųjį ryšį su 9600 bodų sparta, 8 duomenų bitais, be pariteto ir 1 sustabdymo bitu
Serijinis.pradėti(9600, SERIAL_8N1);
}

Čia SERIAL_8N1 reiškia duomenų formatą su 8 duomenų bitai, nėra pariteto ir 1 sustok truputi. Kiti variantai, pvz SERIAL_7E1, SERIAL_8O2, ir tt, gali būti naudojami atsižvelgiant į konkrečius projekto reikalavimus.

Serialinis pokalbis

Arduino plokštės suteikia įvairias nuosekliojo ryšio galimybes, kurios leidžia efektyviai ir patikimai keistis duomenimis tarp įrenginių. Suprasdami, kaip nustatyti nuosekliojo ryšio protokolus Arduino IDE, galite panaudoti paskirstyto apdorojimo galią arba žymiai sumažinti projektuose naudojamų laidų skaičių.