SPI i esptop 10 ved bruk av Arduino IDE

SPI i esptop 10 ved bruk av Arduino IDE

ESP32 styrer har støtte for flere kommunikasjonsprotokoller. Disse protokollene inkluderer Serial USAart, I2C (IIC) og SPI. Sammen med disse ESP32-tavlene er det også trådløse kommunikasjonsprotokoller tilgjengelig som WiFi, Dual Bluetooth, ESP-Now, Lora og mange flere. I dag skal vi fokusere på ESP32 SPI (seriell perifert grensesnitt) protokoll.

SPI (seriell perifert grensesnitt) i ESP32

SPI eller seriell perifert grensesnitt er en kort avstand kommunikasjonsprotokoll brukt i flere mikrokontrollerenheter som ESP32. Det er en synkron kommunikasjonsprotokoll som hovedsakelig brukes av mikrokontrollere for å kommunisere med periferiutstyr, slik at vi kan bruke denne protokollen til å lese og kontrollere enheter som støtter SPI -protokoll.

SPI -kommunikasjon støtter master slavekonfigurasjon Det er alltid en en herre som kontrollerer flere slaver. Det er en Full duplex Kommunikasjon slik at data kan utveksle samtidig fra master til slave og slave til mester.


SPI -kommunikasjon i ESP32 behov fire forskjellige pinner for å overføre og motta data til enheter. Følgende er de fire pinnene:

  1. SCK: Klokkelinje bestemmer overføringshastigheten
  2. Miso: Master In Slave Out er overføringspinne fra slave til mester
  3. Mosi: Master Out Slave In IS Transmission Line for Master Data to Slave
  4. Ss: Slave Select Line hjelper ESP32 med å velge en bestemt slave og overføre eller motta data fra den slaven

Merk: Noen enheter som bare er slave og ikke kan fungere som å mestre pin -navngivningen, er annerledes, for eksempel:

    • Miso erstattes med Sdo (Seriedata ut)
    • Mosi erstattes med SDI (Seriedata i)

Spi -pinner i ESP32

ESP32 -styret kommer med 4 Ulike SPI -periferiutstyr integrert med mikrokontrolleren.

    • Spi0: Kun for kommunikasjon med intern minn- kan ikke brukes med eksterne SPI-enheter
    • Spi1: Kun for kommunikasjon med intern minn- kan ikke brukes med eksterne SPI-enheter
    • Spi2: (HSPI) har uavhengige bussignaler. Hver buss kan oppnå 3 slaveenheter
    • Spi3: (VSPI) bussignal er uavhengig. Hver buss kan oppnå 3 slaveenheter

De fleste ESP32 -brettene kommer med preasseiged SPI -pinner for både SPI2 og SPI3. Imidlertid, hvis ikke tildelt, kan vi alltid tilordne spi -pinner i kode. Følgende er SPI -pinnene som finnes i de fleste av ESP32 -brettet som er forutsagt:

SPI -grensesnitt Mosi Miso SCLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Ovenfor nevnte spi -pinner kan variere avhengig av styretypen. Nå skal vi skrive en kode for å sjekke ESP32 SPI -pinner ved hjelp av Arduino IDE.

Hvordan finne ESP32 Standard SPI -pinner

Koden skrevet nedenfor vil bidra til å finne standard SPI -pinner i ESP32 -styret. Åpne Arduino IDE Connect ESP32 med PC, velg riktig port og last opp koden. Vent deretter på utgangen. Det er det! Det er hvor enkelt det er

Kode for å finne ESP32 standard SPI -pinner

Kode gitt nedenfor vil skrive ut ESP32 standard SPI -pinner på seriemonitoren.

void setup ()
Serie.Begin (115200);
Serie.print ("mosi gpio pin:");
Serie.println (mosi);
Serie.print ("miso gpio pin:");
Serie.println (miso);
Serie.Print ("SCK GPIO PIN:");
Serie.println (SCK);
Serie.Print ("SS GPIO PIN:");
Serie.println (SS);

void loop ()


Koden starter med å definere baudfrekvens og fortsetter med å ringe standard GPIO PIN for ESP32 SPI -kommunikasjonsprotokoll.

Produksjon

Her i vårt tilfelle viste seriemonitoren PIN 23, 19, 18 og 5 for henholdsvis MOSI, MISO, SCK og SS.

Hvordan bruke tilpassede spi -pinner i ESP32

Takket være ESP32 multiplexing -funksjoner er det mulig å konfigurere enhver pin av ESP32 -brett som UART, I2C, SPI og PWM. En trenger bare å tilordne dem i kode. Nå skal vi definere nye SPI -pinner og skrive dem ut på seriemonitoren for å bekrefte.

Skriv inn koden gitt nedenfor i Arduino IDE -redaktør.

#inkludere
void setup ()
Serie.Begin (115200);
Serie.Print ("Standard MOSI GPIO PIN:");
Serie.println (mosi);
Serie.print ("standard miso gpio pin:");
Serie.println (miso);
Serie.print ("Standard SCK GPIO PIN:");
Serie.println (SCK);
Serie.print ("Standard SS GPIO PIN:");
Serie.println (SS);
#Define SCK 25
#Define Miso 32
#Define MOSI 26
#Define CS 33
/*Library_name Sensor_name (CS, MOSI, MISO, SCK); // Ring nye SPI -pinner*/
Serie.print ("mosi new gpio pin:");
Serie.println (mosi);
Serie.print ("miso new gpio pin:");
Serie.println (miso);
Serie.Print ("SCK New GPIO Pin:");
Serie.println (SCK);
Serie.Print ("SS New GPIO Pin:");
Serie.println (SS);

void loop ()


Her i koden over inkluderer vi SPI Serial Library og skriver deretter ut standard SPI -pinner på seriell skjerm. Man kan hoppe over denne delen av koden hvis ikke nødvendig. Neste ved hjelp av Define tilordner vi nye pinner til SPI og trykker dem en etter en på seriell skjerm.

Produksjon

Utgang som vises på seriell monitor, skriver ut alle de nye SPI -pinnene for ESP32 -brettet.

ESP32 med flere SPI -enheter

ESP32 har to SPI -busser, og hver buss kan kontrollere 3 Enheter som betyr totalt 6 enheter kan kontrolleres ved hjelp av SPI av ESP32. For å kontrollere flere enheter, kan vi bruke forskjellige multiplexing -teknikker.

Mens kontrollering av flere slaveenheter ESP32 vil fungere som en mester for dem alle tre linjer miso, vil mosi sclk være den samme for dem bare forskjell er cs klokkesignallinje. For å sende data til en slaveenhet CS -pin til den slaveenheten skal settes til lav.


Følgende syntaks vil bli fulgt hvis vi ønsker å sette CS til lavt.

DigitalWrite (CS, lav);


Anta at vi vil lese data fra alle andre enheter, så vi må angi CS -pinnen til første slaveenhet som høy for å deaktivere den.

DigitalWrite (CS_1, High); // Deaktiver CS -pin av slave 1
DigitalWrite (CS_2, lav); // Aktiver CS -pin av slave 2

Konklusjon

Seriell perifert grensesnitt er kablet kommunikasjonsprotokoll brukt av ESP32 mikrokontroller for å utveksle data mellom flere slaveenheter. ESP32 SPI støtter to forskjellige busser for kommunikasjon med hver bussevne til å kontrollere 3 slaveenheter. Som standard kommer ESP32 med SPI -pinner; Vi kan imidlertid også definere og bruke tilpassede pinner ved hjelp av kode.