SPI (Serial Peripheral Interface) i ESP32 med Arduino IDE

Spi Serial Peripheral Interface I Esp32 Med Arduino Ide



ESP32-kort har stöd för flera kommunikationsprotokoll. Dessa protokoll inkluderar seriell USART, I2C (IIC) och SPI. Tillsammans med dessa ESP32-kort finns det även trådlösa kommunikationsprotokoll tillgängliga såsom WiFi, dual Bluetooth, ESP-Now, LoRa och många fler. Idag kommer vi att fokusera på ESP32 SPI (Serial Peripheral interface) protokoll.

SPI (Serial Peripheral Interface) i ESP32

SPI eller seriellt perifert gränssnitt är ett kortdistanskommunikationsprotokoll som används i flera mikrokontrollerenheter som ESP32. Det är ett synkront kommunikationsprotokoll som främst används av mikrokontroller för att kommunicera med dess kringutrustning, så att vi kan använda detta protokoll för att läsa och styra enheter som stöder SPI-protokoll.







SPI-kommunikation stöder masterslav-konfiguration, det finns alltid en ett bemästra som styr flera slavar. Det är en full duplex kommunikation så att data kan utbytas samtidigt från master till slav och slav till master.




SPI-kommunikation i ESP32-behov fyra olika stift för att överföra och ta emot data till enheter. Följande är de fyra stiften:



  1. SCK: Klocklinjen bestämmer överföringshastigheten
  2. MISO: Master in slav ut är överföringsstift från slav till master
  3. RÖK: Master ut slav in är överföringsledning för masterdata till slav
  4. SS: Slavvalslinjen hjälper ESP32 att välja en viss slav och sända eller ta emot data från den slaven

Notera: Vissa enheter som endast är slav och inte kan fungera som master. Namnet på pinnarna är annorlunda, t.ex.:





    • MISO ersätts med SDO (Serial Data Out)
    • RÖK ersätts med SDI (Serial Data In)

SPI-stift i ESP32

ESP32-kort medföljer 4 olika SPI kringutrustning integrerade med dess mikrokontroller.

    • SPI0: Endast för internminneskommunikation - kan inte användas med externa SPI-enheter
    • SPI1: Endast för internminneskommunikation - kan inte användas med externa SPI-enheter
    • SPI2: (HSPI) har oberoende busssignaler. Varje buss kan härleda 3 slavenheter
    • SPI3: (VSPI) busssignalen är oberoende. Varje buss kan härleda 3 slavenheter

De flesta ESP32-kort kommer med förtilldelade SPI-stift för både SPI2 och SPI3. Men om den inte tilldelas kan vi alltid tilldela SPI-stift i kod. Följande är SPI-stiften som finns i de flesta av ESP32-kortet som är förtilldelade:



SPI-gränssnitt RÖK MISO SCLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Ovan nämnda SPI-stift kan variera beroende på korttyp. Nu kommer vi att skriva en kod för att kontrollera ESP32 SPI-stift med Arduino IDE.

Hur man hittar ESP32 Standard SPI Pins

Koden som skrivits nedan hjälper till att hitta standard SPI-stiften i ESP32-kortet. Öppna Arduino IDE connect ESP32 med PC, välj rätt port och ladda upp koden. Vänta sedan på utgången. Det är allt! så enkelt är det

Kod för att hitta ESP32 Default SPI Pins

Koden nedan kommer att skriva ut ESP32 standard SPI-stiften på den seriella monitorn.

ogiltig installation ( ) {
Serial.begin ( 115200 ) ;
Serial.print ( 'MOSI GPIO Pin: ' ) ;
Serial.println ( RÖK ) ;
Serial.print ( 'MISO GPIO Pin: ' ) ;
Serial.println ( MISO ) ;
Serial.print ( 'SCK GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'SS GPIO Pin: ' ) ;
Serial.println ( SS ) ;
}
tom slinga ( ) {
}


Koden börjar med att definiera överföringshastigheten och fortsätter med att anropa standard GPIO-stiftet för kommunikationsprotokollet ESP32 SPI.

Produktion

Här i vårt fall visade den seriella monitorn stift 23, 19, 18 och 5 för MOSI, MISO, SCK respektive SS.

Hur man använder anpassade SPI-stift i ESP32

Tack vare ESP32-multiplexfunktioner är det möjligt att konfigurera vilket stift som helst på ESP32-kortet som UART, I2C, SPI och PWM. Man behöver bara tilldela dem i kod. Nu kommer vi att definiera nya SPI-stift och skriva ut dem på den seriella monitorn för att bekräfta.

Skriv in koden nedan i Arduino IDE-redigerare.

#inkludera
ogiltig installation ( ) {
Serial.begin ( 115200 ) ;
Serial.print ( 'Standard MOSI GPIO Pin: ' ) ;
Serial.println ( RÖK ) ;
Serial.print ( 'Standard MISO GPIO Pin: ' ) ;
Serial.println ( MISO ) ;
Serial.print ( 'Standard SCK GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'Standard SS GPIO Pin: ' ) ;
Serial.println ( SS ) ;
#definiera SCK 25
#define MISO 32
#define MOSI 26
#define CS 33
/* Library_Name Sensor_name ( CS, MOSI, MISO, SCK ) ; // ring nya SPI-stift */
Serial.print ( 'MOSI NEW GPIO Pin: ' ) ;
Serial.println ( RÖK ) ;
Serial.print ( 'MISO NEW GPIO Pin: ' ) ;
Serial.println ( MISO ) ;
Serial.print ( 'SCK NEW GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'SS NEW GPIO Pin: ' ) ;
Serial.println ( SS ) ;
}
tom slinga ( ) {
}


Här i ovanstående kod inkluderar vi SPI seriellt bibliotek och skriv sedan ut standard SPI-stiften på seriell monitor. Man kan hoppa över denna del av koden om det inte behövs. Därefter tilldelar vi nya stift till SPI och skriver ut dem en efter en på seriell monitor.

Produktion

Utdata som visas på den seriella monitorn skriver ut alla nya SPI-stift för ESP32-kortet.

ESP32 med flera SPI-enheter

ESP32 har två SPI-bussar, och varje buss kan styra 3 enheter vilket innebär att totalt 6 enheter kan styras med SPI av ESP32. För att styra fler enheter kan vi använda olika multiplexeringstekniker.

Medan styrning av flera slavenheter kommer ESP32 att fungera som en master för dem alla tre linjerna MISO, MOSI SCLK kommer att vara samma för dem enda skillnaden är CS klocksignallinje. För att skicka data till en slavenhet bör CS-stiftet på den slavenheten ställas in på låg.


Följande syntax kommer att följas om vi vill ställa in CS till LÅG.

digitalWrite ( CS, LÅG ) ;


Anta att vi vill läsa data från vilken annan enhet som helst, så vi måste ställa in CS-stiftet på den första slavenheten som HÖG för att inaktivera den.

digitalWrite ( CS_1, HÖG ) ; // inaktivera CS-stift för SLAVE 1
digitalWrite ( CS_2, LÅG ) ; // Aktivera CS-stift för SLAVE två

Slutsats

Seriellt perifert gränssnitt är ett trådbundet kommunikationsprotokoll som används av ESP32 mikrokontroller för att utbyta data mellan flera slavenheter. ESP32 SPI stöder två olika bussar för kommunikation med varje buss förmåga att styra 3 slavenheter. Som standard kommer ESP32 med SPI-stift; men vi kan också definiera och använda anpassade pins med hjälp av kod.