SPI (Serial Peripheral Interface) ESP32-s, kasutades Arduino IDE-d

Spi Serial Peripheral Interface Esp32 S Kasutades Arduino Ide D



ESP32 plaadid toetavad mitut sideprotokolli. Need protokollid hõlmavad USART, I2C (IIC) ja SPI-d. Koos nende ESP32 plaatidega on saadaval ka traadita side protokollid, nagu WiFi, topelt Bluetooth, ESP-Now, LoRa ja palju muud. Täna keskendume ESP32 SPI (Serial Peripheral interface) protokollile.

SPI (Serial Peripheral Interface) ESP32-s

SPI ehk jadavälisliides on lähisideprotokoll, mida kasutatakse mitmes mikrokontrolleri seadmes, näiteks ESP32. See on sünkroonne sideprotokoll, mida kasutavad peamiselt mikrokontrollerid oma välisseadmetega suhtlemiseks, nii et saame seda protokolli kasutada SPI-protokolli toetavate seadmete lugemiseks ja juhtimiseks.







SPI side toetab ülem alam konfiguratsiooni on alati olemas üks meister mis juhib mitut orja. See on täisdupleks side, nii et andmeid saab samaaegselt vahetada ülem-alam- ja alam-ülemale.




SPI-suhtlus ESP32-s vajab neli erinevad tihvtid andmete edastamiseks ja vastuvõtmiseks seadmetesse. Need neli tihvti on järgmised:



  1. SCK: Kellarida määrab edastuskiiruse
  2. MISO: Master in slave out on edastusviik alluvalt ülemale
  3. SUITS: Master out slave in on ülekandeliin põhiandmete jaoks alam
  4. SS: Slave valikuliin aitab ESP32-l valida konkreetse alamseadme ja edastada või vastu võtta sellelt alluvalt andmeid

Märge: Mõned seadmed, mis on ainult alluvad ja ei saa toimida ülemseadmena, on nende pin-nimetused erinevad, näiteks:





    • MISO asendatakse SDO (Serial Data Out)
    • SUITSU asendatakse SDI (jadaandmed sisse)

SPI-nööpnõelad ESP32-s

ESP32 plaat on kaasas 4 selle mikrokontrolleriga integreeritud erinevad SPI-välisseadmed.

    • SPI0: Ainult sisemäluga suhtlemiseks – ei saa kasutada väliste SPI-seadmetega
    • SPI1: Ainult sisemäluga suhtlemiseks – ei saa kasutada väliste SPI-seadmetega
    • SPI2: (HSPI) omavad sõltumatuid siinisignaale. Iga buss võib tuletada 3 orjaseadmed
    • SPI3: (VSPI) siini signaal on sõltumatu. Iga buss võib tuletada 3 orjaseadmed

Enamikul ESP32 plaatidel on nii SPI2 kui ka SPI3 jaoks eelnevalt määratud SPI tihvtid. Kui aga pole määratud, saame alati koodis SPI-viigud määrata. Järgmised on SPI-tihvtid, mis on enamikul ESP32-plaadil ja mis on eelnevalt määratud:



SPI liides SUITSU MISO SCLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Ülalmainitud SPI-tihvtid võivad olenevalt plaadi tüübist erineda. Nüüd kirjutame koodi ESP32 SPI tihvtide kontrollimiseks Arduino IDE abil.

Kuidas leida ESP32 vaike-SPI tihvte

Allpool kirjutatud kood aitab leida ESP32 plaadil SPI vaikeviigud. Avage Arduino IDE, ühendage ESP32 arvutiga, valige õige port ja laadige kood üles. Seejärel oodake väljundit. See on kõik! nii lihtne see ongi

Kood ESP32 vaike-SPI tihvtide leidmiseks

Allpool antud kood prindib jadamonitorile ESP32 vaike-SPI-tihvtid.

tühine seadistus ( ) {
Serial.begin ( 115 200 ) ;
Serial.print ( 'MOSI GPIO Pin:' ) ;
Serial.println ( SUITSU ) ;
Serial.print ( 'MISO GPIO Pin:' ) ;
Serial.println ( MISO ) ;
Serial.print ( 'SCK GPIO Pin:' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'SS GPIO Pin:' ) ;
Serial.println ( SS ) ;
}
tühi silmus ( ) {
}


Kood algab andmeedastuskiiruse määratlemisega ja jätkub ESP32 SPI sideprotokolli GPIO vaikepistiku väljakutsumisega.

Väljund

Meie puhul näitas jadamonitor vastavalt MOSI, MISO, SCK ja SS tihvte 23, 19, 18 ja 5.

Kuidas kasutada ESP32-s kohandatud SPI-tihvte

Tänu ESP32 multipleksimisfunktsioonidele on võimalik konfigureerida ESP32 plaadi mis tahes viigu UART-, I2C-, SPI- ja PWM-ina. Need tuleb lihtsalt koodis määrata. Nüüd määratleme uued SPI-tihvtid ja prindime need kinnitamiseks seeriamonitorile.

Tippige Arduino IDE redaktorisse alltoodud kood.

#include
tühine seadistus ( ) {
Serial.begin ( 115 200 ) ;
Serial.print ( 'MOSI GPIO vaikepink: ' ) ;
Serial.println ( SUITSU ) ;
Serial.print ( 'MISO GPIO vaikepink: ' ) ;
Serial.println ( MISO ) ;
Serial.print ( 'Vaikimisi SCK GPIO PIN-kood: ' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'SS GPIO vaikepink: ' ) ;
Serial.println ( SS ) ;
#define SCK 25
#define MISO 32
#define MOSI 26
#define CS 33
/* Raamatukogu_nimi Anduri_nimi ( CS, MOSI, MISO, SCK ) ; // helistage uutele SPI tihvtidele */
Serial.print ( 'MOSI UUS GPIO Pin: ' ) ;
Serial.println ( SUITSU ) ;
Serial.print ( 'MISO UUS GPIO Pin:' ) ;
Serial.println ( MISO ) ;
Serial.print ( 'SCK UUS GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'SS UUS GPIO Pin:' ) ;
Serial.println ( SS ) ;
}
tühi silmus ( ) {
}


Siia ülaltoodud koodi lisame SPI jadateegi, seejärel prindime jadamonitoril SPI vaikeviigud. Kui seda pole vaja, võib selle koodiosa vahele jätta. Järgmisena määrame define abil SPI-le uued kontaktid ja prindime need ükshaaval seeriamonitorile.

Väljund

Jadamonitoril kuvatav väljund prindib kõik ESP32 plaadi uued SPI-viigud.

ESP32 mitme SPI-seadmega

ESP32-l on kaks SPI siini ja iga siini saab juhtida 3 seadmeid, mis tähendab, et ESP32 SPI-ga saab juhtida kokku 6 seadet. Rohkemate seadmete juhtimiseks saame kasutada erinevaid multipleksimistehnikaid.

Kui juhtida mitut alamseadet, siis ESP32 toimib nende kõigi kolme MISO liini ülemseadmena, kuid MOSI SCLK on nende jaoks sama, ainus erinevus on CS-kella signaaliliin. Andmete saatmiseks alamseadmesse tuleks selle alamseadme CS-pin seada madalale.


Järgmist süntaksit järgitakse, kui tahame seada CS väärtuseks LOW.

digitalWrite ( CS, LOW ) ;


Oletame, et tahame lugeda andmeid mis tahes muust seadmest, seega peame selle keelamiseks seadma esimese alamseadme CS-pistiku väärtuseks HIGH.

digitalWrite ( CS_1, KÕRGE ) ; // keelake SLAVE CS-pin 1
digitalWrite ( CS_2, MADAL ) ; // Luba SLAVE CS-pin kaks

Järeldus

Välisseadmete jadaliides on juhtmega sideprotokoll, mida ESP32 mikrokontroller kasutab andmete vahetamiseks mitme alamseadme vahel. ESP32 SPI toetab kahte erinevat siini suhtlemiseks iga siini võimalusega juhtida 3 alamseadet. Vaikimisi on ESP32-ga kaasas SPI tihvtid; aga saame koodi abil määratleda ja kasutada ka kohandatud tihvte.