SPI (Serial Peripheral Interface) in ESP32 met behulp van Arduino IDE

Spi Serial Peripheral Interface In Esp32 Met Behulp Van Arduino Ide



ESP32-kaarten hebben ondersteuning voor meerdere communicatieprotocollen. Deze protocollen omvatten seriële USART, I2C (IIC) en SPI. Naast deze ESP32-kaarten zijn er ook draadloze communicatieprotocollen beschikbaar, zoals WiFi, dubbele Bluetooth, ESP-Now, LoRa en nog veel meer. Vandaag zullen we ons concentreren op het ESP32 SPI-protocol (Serial Peripheral Interface).

SPI (Seriële Perifere Interface) in ESP32

SPI of seriële perifere interface is een korteafstandscommunicatieprotocol dat wordt gebruikt in meerdere microcontroller-apparaten zoals ESP32. Het is een synchroon communicatieprotocol dat voornamelijk wordt gebruikt door microcontrollers om te communiceren met zijn randapparatuur, zodat we dit protocol kunnen gebruiken om apparaten te lezen en te besturen die het SPI-protocol ondersteunen.







SPI-communicatie ondersteunt master-slave-configuratie, er is altijd een een meester die meerdere slaven bestuurt. Het is een volledig duplex communicatie zodat gegevens gelijktijdig kunnen worden uitgewisseld van master naar slave en slave naar master.




SPI-communicatie in ESP32-behoeften vier verschillende pinnen om gegevens naar apparaten te verzenden en te ontvangen. Hieronder volgen die vier pinnen:



  1. SCK: Kloklijn bepaalt de transmissiesnelheid
  2. MISO: Master in slave out is de overdrachtspin van slave naar master
  3. ROOK: Master out slave in is een transmissielijn voor mastergegevens naar slave
  4. SS: Slave-selectielijn helpt ESP32 om een ​​bepaalde slaaf te selecteren en gegevens van die slaaf te verzenden of te ontvangen

Opmerking: Sommige apparaten die alleen slave zijn en niet als master kunnen fungeren, hebben een andere pincode, zoals:





    • MISO wordt vervangen door SDO (Seriële gegevens uit)
    • ROOK wordt vervangen door SDI (Seriële gegevens in)

SPI-pinnen in ESP32

ESP32-bord wordt meegeleverd 4 verschillende SPI-randapparatuur geïntegreerd met zijn microcontroller.

    • SPI0: Alleen voor interne geheugencommunicatie - kan niet worden gebruikt met externe SPI-apparaten
    • SPI1: Alleen voor interne geheugencommunicatie - kan niet worden gebruikt met externe SPI-apparaten
    • SPI2: (HSPI) hebben onafhankelijke bussignalen. Elke bus kan afleiden 3 slave apparaten
    • SPI3: (VSPI) bussignaal is onafhankelijk. Elke bus kan afleiden 3 slave apparaten

De meeste ESP32-kaarten worden geleverd met vooraf toegewezen SPI-pinnen voor zowel SPI2 als SPI3. Indien niet toegewezen, kunnen we echter altijd SPI-pinnen in code toewijzen. Hieronder volgen de SPI-pinnen die op het grootste deel van het ESP32-bord te vinden zijn en die vooraf zijn toegewezen:



SPI-interface ROOK MISO SCLK CS
VSPI GPI 23 GPIO 19 GPIO 18 GPIO5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Bovengenoemde SPI-pinnen kunnen variëren, afhankelijk van het bordtype. Nu zullen we een code schrijven om ESP32 SPI-pinnen te controleren met behulp van Arduino IDE.

Hoe ESP32 standaard SPI-pinnen te vinden

De onderstaande code helpt bij het vinden van de standaard SPI-pinnen op het ESP32-bord. Open Arduino IDE, verbind ESP32 met pc, selecteer de juiste poort en upload de code. Wacht vervolgens op de uitvoer. Dat is het! zo simpel is het

Code om ESP32 standaard SPI-pinnen te vinden

De onderstaande code drukt de ESP32 standaard SPI-pinnen af ​​op de seriële monitor.

ongeldige opstelling ( ) {
Serieel.begin ( 115200 ) ;
Serieel.afdrukken ( 'MOSI GPIO-pin: ' ) ;
Serial.println ( ROOK ) ;
Serieel.afdrukken ( 'MISO GPIO-pin: ' ) ;
Serial.println ( MISO ) ;
Serieel.afdrukken ( 'SCK GPIO-pin: ' ) ;
Serial.println ( SCK ) ;
Serieel.afdrukken ( 'SS GPIO-pin: ' ) ;
Serial.println ( SS ) ;
}
lege lus ( ) {
}


De code begint met het definiëren van de baudrate en gaat verder door de standaard GPIO-pin aan te roepen voor het ESP32 SPI-communicatieprotocol.

Uitgang

Hier, in ons geval, gaf de seriële monitor de pin 23, 19, 18 en 5 weer voor respectievelijk MOSI, MISO, SCK en SS.

Aangepaste SPI-pinnen gebruiken in ESP32

Dankzij de ESP32-multiplexfuncties is het mogelijk om elke pin van het ESP32-bord te configureren als UART, I2C, SPI en PWM. Je hoeft ze alleen maar in code toe te wijzen. Nu zullen we nieuwe SPI-pinnen definiëren en deze ter bevestiging op de seriële monitor afdrukken.

Typ de onderstaande code in de Arduino IDE-editor.

#include
ongeldige opstelling ( ) {
Serieel.begin ( 115200 ) ;
Serieel.afdrukken ( 'Standaard MOSI GPIO-pin: ' ) ;
Serial.println ( ROOK ) ;
Serieel.afdrukken ( 'Standaard MISO GPIO-pincode: ' ) ;
Serial.println ( MISO ) ;
Serieel.afdrukken ( 'Standaard SCK GPIO-pincode: ' ) ;
Serial.println ( SCK ) ;
Serieel.afdrukken ( 'Standaard SS GPIO-pincode: ' ) ;
Serial.println ( SS ) ;
#define SCK 25
#definieer MISO 32
#definieer MOSI 26
#define CS 33
/* Bibliotheek_Naam Sensor_naam ( CS, MOSI, MISO, SCK ) ; // bel nieuwe SPI-pinnen */
Serieel.afdrukken ( 'MOSI NIEUWE GPIO-pin: ' ) ;
Serial.println ( ROOK ) ;
Serieel.afdrukken ( 'MISO NIEUWE GPIO-pin: ' ) ;
Serial.println ( MISO ) ;
Serieel.afdrukken ( 'SCK NIEUWE GPIO-pin: ' ) ;
Serial.println ( SCK ) ;
Serieel.afdrukken ( 'SS NIEUWE GPIO-pin: ' ) ;
Serial.println ( SS ) ;
}
lege lus ( ) {
}


Hier in bovenstaande code nemen we de SPI-seriële bibliotheek op en drukken vervolgens de standaard SPI-pinnen op de seriële monitor af. Men kan dit deel van de code overslaan als het niet nodig is. Vervolgens wijzen we met behulp van define nieuwe pinnen toe aan SPI en drukken ze een voor een af ​​op een seriële monitor.

Uitgang

Uitvoer die op de seriële monitor wordt weergegeven, drukt alle nieuwe SPI-pinnen voor het ESP32-bord af.

ESP32 met meerdere SPI-apparaten

ESP32 heeft twee SPI-bussen en elke bus kan worden bestuurd 3 apparaten, wat betekent dat in totaal 6 apparaten kunnen worden bestuurd met behulp van SPI of ESP32. Om meer apparaten aan te sturen, kunnen we verschillende multiplextechnieken gebruiken.

Bij het besturen van meerdere slave-apparaten zal ESP32 fungeren als een master voor alle drie de lijnen MISO, MOSI SCLK zal voor hen hetzelfde zijn, het enige verschil is de CS-kloksignaallijn. Om gegevens naar een slave-apparaat te sturen, moet de CS-pin van dat slave-apparaat op laag worden gezet.


De volgende syntaxis wordt gevolgd als we CS op LOW willen instellen.

digitaalSchrijven ( CS, LAAG ) ;


Stel dat we gegevens van een ander apparaat willen lezen, dus we moeten de CS-pin van het eerste slave-apparaat instellen op HOOG om het uit te schakelen.

digitaalSchrijven ( CS_1, HOOG ) ; // schakel de CS-pin van SLAVE uit 1
digitaalSchrijven ( CS_2, LAAG ) ; // Schakel CS-pin van SLAVE in twee

Conclusie

Seriële perifere interface is een bekabeld communicatieprotocol dat wordt gebruikt door de ESP32-microcontroller om gegevens uit te wisselen tussen meerdere slave-apparaten. ESP32 SPI ondersteunt twee verschillende bussen voor communicatie met elke bus mogelijkheid om 3 slave-apparaten te besturen. ESP32 wordt standaard geleverd met SPI-pinnen; we kunnen echter ook aangepaste pinnen definiëren en gebruiken met behulp van code.