SPI (Serial Peripheral Interface) i ESP32 ved hjælp af Arduino IDE

Spi Serial Peripheral Interface I Esp32 Ved Hjaelp Af Arduino Ide



ESP32-kort har understøttelse af flere kommunikationsprotokoller. Disse protokoller omfatter seriel USART, I2C (IIC) og SPI. Sammen med disse ESP32-kort er der også tilgængelige trådløse kommunikationsprotokoller såsom WiFi, dual Bluetooth, ESP-Now, LoRa og mange flere. I dag vil vi fokusere på ESP32 SPI (Serial Peripheral interface) protokol.

SPI (Serial Peripheral Interface) i ESP32

SPI eller serielt perifert interface er en kortdistancekommunikationsprotokol, der bruges i flere mikrocontrollerenheder såsom ESP32. Det er en synkron kommunikationsprotokol, der primært bruges af mikrocontrollere til at kommunikere med dens perifere enheder, således at vi kan bruge denne protokol til at læse og styre enheder, der understøtter SPI-protokollen.







SPI-kommunikation understøtter master-slave-konfiguration, der er altid en en mestre der styrer flere slaver. Det er en Fuld duplex kommunikation, så data kan udveksles samtidigt fra master til slave og slave til master.




SPI kommunikation i ESP32 behov fire forskellige ben til at sende og modtage data til enheder. Følgende er de fire stifter:



  1. SCK: Urlinje bestemmer transmissionshastigheden
  2. MISO: Master in slave out er transmissionsstift fra slave til master
  3. RØG: Master ud slave ind er transmissionslinje for master data til slave
  4. SS: Slavevalgslinje hjælper ESP32 med at vælge en bestemt slave og sende eller modtage data fra denne slave

Bemærk: Nogle enheder, der kun er slaver og ikke kan fungere som master, er forskellige, f.eks.:





    • MISO er erstattet med SDO (Serielle data ud)
    • RØG er erstattet med SDI (Serielle data ind)

SPI-stifter i ESP32

ESP32-kort medfølger 4 forskellige SPI-ydre enheder integreret med sin mikrocontroller.

    • SPI0: Kun til intern hukommelseskommunikation - kan ikke bruges med eksterne SPI-enheder
    • SPI1: Kun til intern hukommelseskommunikation - kan ikke bruges med eksterne SPI-enheder
    • SPI2: (HSPI) har uafhængige bussignaler. Hver bus kan udlede 3 slave enheder
    • SPI3: (VSPI) bussignal er uafhængigt. Hver bus kan udlede 3 slave enheder

De fleste ESP32-kort kommer med forudtildelte SPI-ben til både SPI2 og SPI3. Men hvis det ikke er tildelt, kan vi altid tildele SPI-stifter i kode. Følgende er de SPI-stifter, der findes i det meste af ESP32-kortet, som er forudtildelt:



SPI grænseflade RØG MISO SCLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Ovennævnte SPI-stifter kan variere afhængigt af kortets type. Nu vil vi skrive en kode for at kontrollere ESP32 SPI pins ved hjælp af Arduino IDE.

Sådan finder du ESP32-standard SPI-pins

Koden skrevet nedenfor hjælper med at finde standard SPI-stifterne i ESP32-kortet. Åbn Arduino IDE connect ESP32 med PC, vælg den rigtige port og upload koden. Vent derefter på udgangen. Det er det! så enkelt er det

Kode til at finde ESP32 standard SPI-stifter

Koden givet nedenfor vil udskrive ESP32 standard SPI pins på den serielle monitor.

ugyldig opsætning ( ) {
Serial.begin ( 115200 ) ;
Seriel.print ( 'MOSI GPIO Pin: ' ) ;
Serial.println ( RØG ) ;
Seriel.print ( 'MISO GPIO Pin: ' ) ;
Serial.println ( MISO ) ;
Seriel.print ( 'SCK GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Seriel.print ( 'SS GPIO Pin: ' ) ;
Serial.println ( SS ) ;
}
ugyldig løkke ( ) {
}


Koden starter med at definere baudhastigheden og fortsætter med at kalde standard GPIO pin til ESP32 SPI kommunikationsprotokol.

Produktion

Her i vores tilfælde viste den serielle monitor pin 23, 19, 18 og 5 for henholdsvis MOSI, MISO, SCK og SS.

Sådan bruges brugerdefinerede SPI-stifter i ESP32

Takket være ESP32 multipleksing-funktioner er det muligt at konfigurere enhver pin på ESP32-kort som UART, I2C, SPI og PWM. Man skal bare tildele dem i kode. Nu vil vi definere nye SPI-stifter og udskrive dem på den serielle skærm for at bekræfte.

Indtast koden nedenfor i Arduino IDE editor.

#include
ugyldig opsætning ( ) {
Serial.begin ( 115200 ) ;
Seriel.print ( 'Standard MOSI GPIO Pin: ' ) ;
Serial.println ( RØG ) ;
Seriel.print ( 'Standard MISO GPIO Pin: ' ) ;
Serial.println ( MISO ) ;
Seriel.print ( 'Standard SCK GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Seriel.print ( 'Standard SS GPIO Pin: ' ) ;
Serial.println ( SS ) ;
#define SCK 25
#define MISO 32
#define MOSI 26
#define CS 33
/* Library_Name Sensor_name ( CS, MOSI, MISO, SCK ) ; // kalde nye SPI-stifter */
Seriel.print ( 'MOSI NEW GPIO Pin: ' ) ;
Serial.println ( RØG ) ;
Seriel.print ( 'MISO NEW GPIO Pin: ' ) ;
Serial.println ( MISO ) ;
Seriel.print ( 'SCK NEW GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Seriel.print ( 'SS NEW GPIO Pin: ' ) ;
Serial.println ( SS ) ;
}
ugyldig løkke ( ) {
}


Her i ovenstående kode inkluderer vi SPI seriel bibliotek og udskriv derefter standard SPI pins på seriel skærm. Man kan springe denne del af koden over, hvis det ikke er nødvendigt. Dernæst ved at bruge define tildeler vi nye stifter til SPI og udskriver dem en efter en på seriel skærm.

Produktion

Output vist på den serielle monitor udskriver alle de nye SPI-ben til ESP32-kortet.

ESP32 med flere SPI-enheder

ESP32 har to SPI-busser, og hver bus kan styre 3 enheder, hvilket betyder, at i alt 6 enheder kan styres ved hjælp af SPI af ESP32. For at styre flere enheder kan vi bruge forskellige multipleksingteknikker.

Mens styring af flere slaveenheder vil ESP32 fungere som en master for dem alle tre linjer MISO, vil MOSI SCLK være den samme for dem, eneste forskel er CS clock signal linje. For at sende data til en slaveenhed skal CS-pinden på den slaveenhed indstilles til lav.


Følgende syntaks vil blive fulgt, hvis vi ønsker at sætte CS til LOW.

digitalSkriv ( CS, LAV ) ;


Antag, at vi vil læse data fra en hvilken som helst anden enhed, så vi skal indstille CS-pinden på den første slaveenhed som HØJ for at deaktivere den.

digitalSkriv ( CS_1, HØJ ) ; // deaktiver CS-pin af SLAVE 1
digitalSkriv ( CS_2, LAV ) ; // Aktiver CS-pin for SLAVE to

Konklusion

Seriel perifert interface er kablet kommunikationsprotokol, der bruges af ESP32 mikrocontroller til at udveksle data mellem flere slaveenheder. ESP32 SPI understøtter to forskellige busser til kommunikation med hver bus evne til at styre 3 slave-enheder. Som standard leveres ESP32 med SPI-stifter; dog kan vi også definere og bruge brugerdefinerede pins ved hjælp af kode.