SPI (serijinė periferinė sąsaja) ESP32 naudojant Arduino IDE

Spi Serijine Periferine Sasaja Esp32 Naudojant Arduino Ide



ESP32 plokštės palaiko kelis ryšio protokolus. Šie protokolai apima serijinį USART, I2C (IIC) ir SPI. Kartu su šiomis ESP32 plokštėmis taip pat yra belaidžio ryšio protokolai, tokie kaip WiFi, dvigubas Bluetooth, ESP-Now, LoRa ir daugelis kitų. Šiandien daugiausia dėmesio skirsime ESP32 SPI (serijinės periferinės sąsajos) protokolui.

SPI (nuoseklioji periferinė sąsaja) ESP32

SPI arba nuoseklioji periferinė sąsaja yra trumpo nuotolio ryšio protokolas, naudojamas keliuose mikrovaldiklių įrenginiuose, pvz., ESP32. Tai sinchroninio ryšio protokolas, kurį pirmiausia naudoja mikrovaldikliai, kad galėtų bendrauti su periferiniais įrenginiais, kad galėtume naudoti šį protokolą SPI protokolą palaikančių įrenginių skaitymui ir valdymui.







SPI komunikacija palaiko pagrindinio vergo konfigūraciją, visada yra a vienas meistras kuri valdo kelis vergus. Tai yra pilnas dvipusis ryšys, todėl duomenimis vienu metu galima keistis iš šeimininko į pavaldinį ir iš pavaldinio į pagrindinį.




SPI ryšio reikia ESP32 keturi skirtingi kaiščiai duomenims į įrenginius perduoti ir priimti. Štai šie keturi kaiščiai:



  1. SCK: Laikrodžio linija nustato perdavimo greitį
  2. MISO: Master in slave out yra perdavimo kaištis iš pavaldinio į pagrindinį
  3. DŪMAI: Master out slave in yra pagrindinių duomenų perdavimo linija į pavaldų
  4. SS: Slave pasirinkimo linija padeda ESP32 pasirinkti tam tikrą pavaldinį ir perduoti arba gauti duomenis iš to vergo

Pastaba: Kai kurie įrenginiai, kurie yra tik pavaldūs ir negali veikti kaip pagrindiniai, jų kontaktų pavadinimai skiriasi, pavyzdžiui:





    • MISO pakeičiamas į SDO (Serijos duomenys išvesti)
    • DŪMAI pakeičiamas į SDI (Serijos duomenys įvesti)

SPI kaiščiai ESP32

Yra ESP32 plokštė 4 skirtingi SPI periferiniai įrenginiai, integruoti su jo mikrovaldikliu.

    • SPI0: Tik vidinės atminties ryšiui – negalima naudoti su išoriniais SPI įrenginiais
    • SPI1: Tik vidinės atminties ryšiui – negalima naudoti su išoriniais SPI įrenginiais
    • SPI2: (HSPI) turi nepriklausomus magistralės signalus. Kiekvienas autobusas gali kilti 3 vergais įrenginiais
    • SPI3: (VSPI) magistralės signalas yra nepriklausomas. Kiekvienas autobusas gali kilti 3 vergais įrenginiais

Daugumoje ESP32 plokščių yra iš anksto priskirti SPI kaiščiai tiek SPI2, tiek SPI3. Tačiau jei jie nepriskirti, visada galime priskirti SPI kaiščius kode. Toliau pateikiami SPI kaiščiai, esantys daugumoje ESP32 plokštės, kurie yra iš anksto priskirti:



SPI sąsaja DŪMAI MISO SCLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Pirmiau minėti SPI kaiščiai gali skirtis priklausomai nuo plokštės tipo. Dabar mes parašysime kodą, kad patikrintume ESP32 SPI kaiščius naudodami Arduino IDE.

Kaip rasti numatytuosius ESP32 SPI kaiščius

Žemiau parašytas kodas padės rasti numatytuosius SPI kaiščius ESP32 plokštėje. Atidarykite Arduino IDE, prijunkite ESP32 su kompiuteriu, pasirinkite tinkamą prievadą ir įkelkite kodą. Tada palaukite išvesties. Viskas! štai kaip paprasta

Kodas, skirtas rasti ESP32 numatytuosius SPI kaiščius

Toliau pateiktas kodas išspausdins ESP32 numatytuosius SPI kaiščius serijiniame monitoriuje.

tuščias nustatymas ( ) {
Serialas.begin ( 115 200 ) ;
Serial.print ( 'MOSI GPIO Pin:' ) ;
Serial.println ( DŪMAI ) ;
Serial.print ( 'MISO GPIO Pin:' ) ;
Serial.println ( MISO ) ;
Serial.print ( 'SCK GPIO Pin:' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'SS GPIO PIN kodas:' ) ;
Serial.println ( SS ) ;
}
tuščia kilpa ( ) {
}


Kodas prasideda apibrėžiant perdavimo spartą ir tęsiasi iškviečiant numatytąjį ESP32 SPI ryšio protokolo GPIO kaištį.

Išvestis

Mūsų atveju serijinis monitorius rodė atitinkamai MOSI, MISO, SCK ir SS kaiščius 23, 19, 18 ir 5.

Kaip naudoti pasirinktinius SPI kaiščius ESP32

Dėl ESP32 tankinimo funkcijų galima sukonfigūruoti bet kurį ESP32 plokštės kaištį kaip UART, I2C, SPI ir PWM. Tereikia juos priskirti kode. Dabar nustatysime naujus SPI kaiščius ir atspausdinsime juos serijiniame monitoriuje, kad patvirtintume.

Įveskite toliau pateiktą kodą Arduino IDE redaktoriuje.

#include
tuščias nustatymas ( ) {
Serialas.begin ( 115 200 ) ;
Serial.print ( „Numatytasis MOSI GPIO PIN kodas:“ ) ;
Serial.println ( DŪMAI ) ;
Serial.print ( „Numatytasis MISO GPIO PIN kodas: ) ;
Serial.println ( MISO ) ;
Serial.print ( „Numatytasis SCK GPIO PIN kodas:“ ) ;
Serial.println ( SCK ) ;
Serial.print ( „Numatytasis SS GPIO PIN kodas:“ ) ;
Serial.println ( SS ) ;
#define SCK 25
#define MISO 32
#define MOSI 26
#define CS 33
/* Bibliotekos_pavadinimas Jutiklio_pavadinimas ( CS, MOSI, MISO, SCK ) ; // skambinkite naujais SPI kaiščiais */
Serial.print ( „MOSI NEW GPIO Pin:“ ) ;
Serial.println ( DŪMAI ) ;
Serial.print ( „MISO NEW GPIO Pin:“ ) ;
Serial.println ( MISO ) ;
Serial.print ( „SCK NEW GPIO Pin:“ ) ;
Serial.println ( SCK ) ;
Serial.print ( „SS NAUJAS GPIO PIN kodas:“ ) ;
Serial.println ( SS ) ;
}
tuščia kilpa ( ) {
}


Čia, aukščiau esančiame kode, įtraukiame SPI serijinę biblioteką, tada išspausdiname numatytuosius SPI kaiščius serijiniame monitoriuje. Jei nereikia, šią kodo dalį galima praleisti. Toliau naudodami define priskiriame naujus kaiščius SPI ir spausdiname juos po vieną serijiniame monitoriuje.

Išvestis

Serijiniame monitoriuje rodoma išvestis spausdina visus naujus ESP32 plokštės SPI kaiščius.

ESP32 su keliais SPI įrenginiais

ESP32 turi dvi SPI magistrales ir kiekviena magistralė gali valdyti 3 įrenginių, o tai reiškia, kad naudojant ESP32 SPI galima valdyti iš viso 6 įrenginius. Norėdami valdyti daugiau įrenginių, galime naudoti skirtingus tankinimo būdus.

Valdant kelis pagalbinius įrenginius ESP32 veiks kaip pagrindinis jų visų trijų linijų MISO, MOSI SCLK jiems bus vienodas, vienintelis skirtumas yra CS laikrodžio signalo linija. Norint siųsti duomenis į pavaldų įrenginį, to pavaldaus įrenginio CS kaištis turi būti nustatytas kaip žemas.


Jei norime nustatyti CS į LOW, bus laikomasi šios sintaksės.

digitalWrite ( CS, LOW ) ;


Tarkime, kad norime nuskaityti duomenis iš bet kurio kito įrenginio, todėl turime nustatyti pirmojo pavaldinio įrenginio CS kaištį kaip HIGH, kad jį išjungtume.

digitalWrite ( CS_1, AUKŠTAS ) ; // išjungti SLAVE CS kaištį 1
digitalWrite ( CS_2, LOW ) ; // Įgalinti SLAVE CS kaištį du

Išvada

Serijinė periferinė sąsaja yra laidinio ryšio protokolas, kurį naudoja ESP32 mikrovaldiklis, kad galėtų keistis duomenimis tarp kelių pagalbinių įrenginių. ESP32 SPI palaiko dvi skirtingas magistrales ryšiui su kiekviena magistralės galimybe valdyti 3 pavaldinius įrenginius. Pagal numatytuosius nustatymus ESP32 yra su SPI kaiščiais; tačiau mes taip pat galime apibrėžti ir naudoti pasirinktinius kaiščius naudodami kodą.