SPI in Esptop 10 usando Arduino IDE

SPI in Esptop 10 usando Arduino IDE

Le schede ESP32 hanno supporto per più protocolli di comunicazione. Questi protocolli includono USART seriale, I2C (IIC) e SPI. Insieme a queste schede ESP32 ci sono anche protocolli di comunicazione wireless disponibili come WiFi, Dual Bluetooth, ESP-Now, Lora e molti altri. Oggi ci concentreremo sul protocollo ESP32 SPI (Serial Peripheral Interface).

SPI (interfaccia periferica seriale) in ESP32

L'interfaccia periferica SPI o seriale è un protocollo di comunicazione a breve distanza utilizzato in più dispositivi di microcontrollore come ESP32. È un protocollo di comunicazione sincrono utilizzato principalmente dai microcontrollori per comunicare con le sue periferiche, in modo tale che possiamo usare questo protocollo per leggere e controllare dispositivi che supportano il protocollo SPI.

La comunicazione SPI supporta la configurazione di slave master c'è sempre un uno maestro che controlla più schiavi. È un Duplex completo Comunicazione Quindi i dati possono essere scambiati contemporaneamente da Master a Slave e Slave a Master.


Comunicazione SPI nelle esigenze ESP32 quattro Pin diversi per trasmettere e ricevere dati sui dispositivi. Di seguito sono riportati quei quattro pin:

  1. SCK: La linea di clock determina la velocità di trasmissione
  2. MISO: Master in Slave Out è il perno di trasmissione dallo schiavo al padrone
  3. MOSI: Master Out Slave in è la linea di trasmissione per i dati anagrafici a slave
  4. SS: La riga di selezione slave aiuta ESP32 a selezionare un particolare slave e trasmettere o ricevere dati da quello slave

Nota: Alcuni dispositivi che sono solo schiavi e non possono agire come padroneggiare la loro denominazione dei pin sono diversi come:

    • MISO è sostituito con SDO (Dati seriali usciti)
    • MOSI è sostituito con SDI (Dati seriali in)

Pin SPI in ESP32

La scheda ESP32 arriva con 4 diverse periferiche SPI integrate con il suo microcontrollore.

    • SPI0: Solo per la comunicazione di memoria interna, non può essere utilizzato con dispositivi SPI esterni
    • SPI1: Solo per la comunicazione di memoria interna, non può essere utilizzato con dispositivi SPI esterni
    • SPI2: (HSPI) hanno segnali di autobus indipendenti. Ogni autobus può derivare 3 dispositivi slave
    • SPI3: (VSPI) Il segnale del bus è indipendente. Ogni autobus può derivare 3 dispositivi slave

La maggior parte delle schede ESP32 sono dotate di pin SPI preassegnati sia per SPI2 che per SPI3. Tuttavia, se non assegnato possiamo sempre assegnare pin SPI nel codice. Di seguito sono riportati i pin SPI che si trovano nella maggior parte della scheda ESP32 che sono prevalenti:

Interfaccia SPI MOSI MISO SCLK Cs
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



I pin SPI sopra menzionati possono variare a seconda del tipo di scheda. Ora scriveremo un codice per controllare i pin SPI ESP32 usando Arduino IDE.

Come trovare pin SPI predefiniti ESP32

Il codice scritto di seguito aiuterà a trovare i pin SPI predefiniti nella scheda ESP32. Apri Arduino IDE Connect ESP32 con PC, seleziona la porta destra e carica il codice. Quindi attendere l'output. Questo è tutto! Ecco quanto è semplice

Codice per trovare pin SPI predefiniti ESP32

Il codice indicato di seguito stamperà i pin SPI predefiniti ESP32 sul monitor seriale.

void setup ()
Seriale.Inizia (115200);
Seriale.print ("Pin MOSI GPIO:");
Seriale.println (MOSI);
Seriale.print ("Miso gpiio pin:");
Seriale.println (miso);
Seriale.print ("SCK GPIO PIN:");
Seriale.println (SCK);
Seriale.print ("pin ss gpiio:");
Seriale.println (ss);

void loop ()


Il codice inizia definendo il tasso di baud e continua chiamando il pin GPIO predefinito per il protocollo di comunicazione SPI ESP32.

Produzione

Qui nel nostro caso il monitor seriale ha mostrato rispettivamente il pin 23, 19, 18 e 5 per MOSI, Miso, SCK e SS.

Come utilizzare i pin SPI personalizzati in ESP32

Grazie alle caratteristiche multiplexing ESP32 è possibile configurare qualsiasi pin della scheda ESP32 come UART, I2C, SPI e PWM. Bisogna solo assegnarli nel codice. Ora definiremo nuovi pin SPI e li stamperemo sul monitor seriale per confermare.

Digita il codice indicato di seguito in Arduino IDE Editor.

#includere
void setup ()
Seriale.Inizia (115200);
Seriale.print ("Pin MOSI GPIO predefinito:");
Seriale.println (MOSI);
Seriale.print ("Pin GPIO MISO predefinito:");
Seriale.println (miso);
Seriale.print ("Pin GPIO SCK predefinito:");
Seriale.println (SCK);
Seriale.print ("Pin GPIO SS predefinito:");
Seriale.println (ss);
#define SCK 25
#define miso 32
#define MOSI 26
#define CS 33
/*Library_name sensor_name (CS, MOSI, MISO, SCK); // chiama nuovi pin SPI*/
Seriale.print ("MOSI nuovo pin GPIO:");
Seriale.println (MOSI);
Seriale.print ("Miso nuovo pin GPIO:");
Seriale.println (miso);
Seriale.print ("SCK new GPIO PIN:");
Seriale.println (SCK);
Seriale.print ("ss nuovo pin gpiio:");
Seriale.println (ss);

void loop ()


Qui nel codice sopra, includiamo la libreria seriale SPI, quindi stampiamo i pin SPI predefiniti sul monitor seriale. Si può saltare questa parte del codice se non necessario. Successivamente, usando Define assegniamo nuovi pin a SPI e stampiamoli uno per uno sul monitor seriale.

Produzione

L'output visualizzato sul monitor seriale stampica tutti i nuovi pin SPI per la scheda ESP32.

ESP32 con più dispositivi SPI

ESP32 ha due autobus SPI e ogni bus può controllare 3 Dispositivi che significa che un totale di 6 dispositivi possono essere controllati usando SPI di ESP32. Per controllare più dispositivi, possiamo utilizzare diverse tecniche multiplexing.

Mentre il controllo di più dispositivi di schiavi ESP32 fungerà da maestro per loro tutte e tre le linee miso, MOSI SCLK sarà lo stesso per loro solo la differenza è la linea del segnale di clock CS. Per inviare i dati a un dispositivo slave, il pin CS di quel dispositivo slave dovrebbe essere impostato su basso.


Seguirà la sintassi seguente se vogliamo impostare CS su Basso.

DigitalWrite (CS, basso);


Supponiamo di voler leggere i dati da qualsiasi altro dispositivo, quindi dobbiamo impostare il pin CS del primo dispositivo slave in alto per disabilitarlo.

DigitalWrite (CS_1, High); // Disabilita il pin CS di Slave 1
DigitalWrite (CS_2, basso); // Abilita il pin CS di Slave 2

Conclusione

L'interfaccia periferica seriale è un protocollo di comunicazione cablato utilizzato dal microcontrollore ESP32 per scambiare dati tra più dispositivi slave. ESP32 SPI supporta due diversi autobus per la comunicazione con ciascuna capacità del bus di controllare 3 dispositivi slave. Per impostazione predefinita, ESP32 viene fornito con pin SPI; Tuttavia, possiamo anche definire e utilizzare i pin personalizzati usando il codice.