SPI (Serial Peripheral Interface) sa ESP32 Gamit ang Arduino IDE

Spi Serial Peripheral Interface Sa Esp32 Gamit Ang Arduino Ide



Ang mga ESP32 board ay may suporta para sa maramihang mga protocol ng komunikasyon. Kasama sa mga protocol na ito ang serial USART, I2C (IIC) at SPI. Kasama ng mga ESP32 board na ito ay mayroon ding mga wireless na protocol ng komunikasyon na magagamit tulad ng WiFi, dual Bluetooth, ESP-Now, LoRa at marami pa. Ngayon kami ay tumutuon sa ESP32 SPI (Serial Peripheral interface) protocol.

SPI (Serial Peripheral Interface) sa ESP32

Ang SPI o serial peripheral interface ay isang short distance communication protocol na ginagamit sa maraming microcontroller device gaya ng ESP32. Ito ay isang synchronous na protocol ng komunikasyon na pangunahing ginagamit ng mga microcontroller upang makipag-ugnayan sa mga peripheral nito, upang magamit natin ang protocol na ito upang basahin at kontrolin ang mga device na sumusuporta sa SPI protocol.







Sinusuportahan ng komunikasyon ng SPI ang pagsasaayos ng master slave na palaging mayroong a isa master na kumokontrol sa maraming alipin. Ito ay isang buong duplex komunikasyon upang ang data ay maaaring palitan ng sabay-sabay mula sa panginoon sa alipin at alipin sa panginoon.




Ang komunikasyon ng SPI sa mga pangangailangan ng ESP32 apat iba't ibang mga pin upang magpadala at tumanggap ng data sa mga device. Ang mga sumusunod ay ang apat na pin:



  1. SCK: Tinutukoy ng linya ng orasan ang bilis ng paghahatid
  2. MISO: Ang master in slave out ay transmission pin mula sa alipin patungo sa master
  3. Usok: Master out slave in ay transmission line para sa master data sa slave
  4. SS: Ang Slave select line ay tumutulong sa ESP32 na pumili ng isang partikular na alipin at magpadala o tumanggap ng data mula sa aliping iyon

Tandaan: Ang ilang device na slave lang at hindi maaaring gumanap bilang master ang kanilang pin name ay iba gaya ng:





    • MISO ay pinapalitan ng SDO (Serial Data Out)
    • Usok ay pinapalitan ng SDI (Serial Data In)

Mga SPI Pin sa ESP32

Kasama ang ESP32 board 4 iba't ibang mga peripheral ng SPI na isinama sa microcontroller nito.

    • SPI0: Para sa komunikasyon sa panloob na memorya lamang- hindi maaaring gamitin sa mga panlabas na SPI device
    • SPI1: Para sa komunikasyon sa panloob na memorya lamang- hindi maaaring gamitin sa mga panlabas na SPI device
    • SPI2: (HSPI) ay may mga independiyenteng signal ng bus. Ang bawat bus ay maaaring kunin 3 mga kagamitang alipin
    • SPI3: (VSPI) bus signal ay independyente. Ang bawat bus ay maaaring kunin 3 mga kagamitang alipin

Karamihan sa mga ESP32 board ay may mga nakatalagang SPI pin para sa parehong SPI2 at SPI3. Gayunpaman, kung hindi itinalaga maaari kaming palaging magtalaga ng mga SPI pin sa code. Ang mga sumusunod ay ang mga SPI pin na matatagpuan sa karamihan ng ESP32 board na paunang itinalaga:



Interface ng SPI Usok MISO SCLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Ang mga nabanggit na SPI pin ay maaaring mag-iba depende sa uri ng board. Ngayon ay magsusulat kami ng isang code upang suriin ang mga ESP32 SPI pin gamit ang Arduino IDE.

Paano Maghanap ng ESP32 Default na SPI Pins

Ang code na nakasulat sa ibaba ay makakatulong upang mahanap ang mga default na SPI pin sa ESP32 board. Buksan ang Arduino IDE ikonekta ang ESP32 sa PC, piliin ang tamang port at i-upload ang code. Pagkatapos ay maghintay para sa output. Ayan yun! ganoon kasimple ito

Code para Maghanap ng ESP32 Default na SPI Pins

Ang code na ibinigay sa ibaba ay magpi-print ng mga ESP32 default na SPI pin sa serial monitor.

walang bisang setup ( ) {
Serial.magsimula ( 115200 ) ;
Serial.print ( 'MOSI GPIO Pin: ' ) ;
Serial.println ( Usok ) ;
Serial.print ( 'MISO GPIO Pin: ' ) ;
Serial.println ( MISO ) ;
Serial.print ( 'SCK GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'SS GPIO Pin: ' ) ;
Serial.println ( SS ) ;
}
walang laman na loop ( ) {
}


Nagsisimula ang code sa pamamagitan ng pagtukoy ng baud rate at nagpapatuloy sa pamamagitan ng pagtawag sa default na GPIO pin para sa protocol ng komunikasyon ng ESP32 SPI.

Output

Dito sa aming kaso ipinakita ng serial monitor ang pin 23, 19, 18, at 5 para sa MOSI, MISO, SCK at SS ayon sa pagkakabanggit.

Paano Gumamit ng Mga Custom na SPI Pin sa ESP32

Salamat sa mga feature ng ESP32 multiplexing, posibleng i-configure ang anumang pin ng ESP32 board bilang UART, I2C, SPI at PWM. Kailangan lang italaga ng isa ang mga ito sa code. Ngayon ay tutukuyin namin ang mga bagong SPI pin at i-print ang mga ito sa serial monitor upang kumpirmahin.

I-type ang code na ibinigay sa ibaba sa Arduino IDE editor.

#include
walang bisang setup ( ) {
Serial.magsimula ( 115200 ) ;
Serial.print ( 'Default na MOSI GPIO Pin: ' ) ;
Serial.println ( Usok ) ;
Serial.print ( 'Default na MISO GPIO Pin: ' ) ;
Serial.println ( MISO ) ;
Serial.print ( 'Default na SCK GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'Default na 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 ) ; // tumawag ng mga bagong SPI pin */
Serial.print ( 'MOSI BAGONG GPIO Pin: ' ) ;
Serial.println ( Usok ) ;
Serial.print ( 'MISO NEW GPIO Pin: ' ) ;
Serial.println ( MISO ) ;
Serial.print ( 'SCK NEW GPIO Pin: ' ) ;
Serial.println ( SCK ) ;
Serial.print ( 'SS BAGONG GPIO Pin: ' ) ;
Serial.println ( SS ) ;
}
walang laman na loop ( ) {
}


Dito sa code sa itaas, isinama namin ang SPI serial library pagkatapos ay i-print ang default na mga SPI pin sa serial monitor. Maaaring laktawan ng isa ang bahaging ito ng code kung hindi kinakailangan. Susunod gamit ang define, nagtatalaga kami ng mga bagong pin sa SPI at i-print ang mga ito nang paisa-isa sa serial monitor.

Output

Ang output na ipinapakita sa serial monitor ay nagpi-print ng lahat ng bagong SPI pin para sa ESP32 board.

ESP32 na may Maramihang SPI Device

Ang ESP32 ay may dalawang SPI bus, at maaaring kontrolin ng bawat bus 3 mga device na nangangahulugang may kabuuang 6 na device ang makokontrol gamit ang SPI ng ESP32. Para makontrol ang higit pang mga device, maaari kaming gumamit ng iba't ibang diskarte sa multiplexing.

Habang ang pagkontrol sa maramihang mga slave device na ESP32 ay magsisilbing master para sa lahat ng tatlong linyang MISO, ang MOSI SCLK ay magiging pareho para sa kanila ang pagkakaiba lamang ay ang linya ng signal ng orasan ng CS. Upang magpadala ng data sa isang slave device, dapat itakda sa mababa ang CS pin ng slave device na iyon.


Ang pagsunod sa syntax ay susundan kung gusto naming itakda ang CS sa LOW.

digitalWrite ( CS, MABABA ) ;


Ipagpalagay na gusto nating magbasa ng data mula sa anumang iba pang device, kaya dapat nating itakda ang CS pin ng unang slave device bilang HIGH para i-disable ito.

digitalWrite ( CS_1, MATAAS ) ; // huwag paganahin ang CS pin ng SLAVE 1
digitalWrite ( CS_2, LOW ) ; // Paganahin ang CS pin ng SLAVE dalawa

Konklusyon

Ang serial peripheral interface ay wired communication protocol na ginagamit ng ESP32 microcontroller upang makipagpalitan ng data sa pagitan ng maraming slave device. Sinusuportahan ng ESP32 SPI ang dalawang magkaibang mga bus para sa komunikasyon sa bawat kakayahan ng bus na kontrolin ang 3 slave device. Bilang default, ang ESP32 ay may kasamang mga SPI pin; gayunpaman, maaari rin naming tukuyin at gamitin ang mga custom na pin gamit ang code.