SPI (Antara Muka Periferal Bersiri) dalam ESP32 Menggunakan Arduino IDE

Spi Antara Muka Periferal Bersiri Dalam Esp32 Menggunakan Arduino Ide



Papan ESP32 mempunyai sokongan untuk pelbagai protokol komunikasi. Protokol ini termasuk USART bersiri, I2C (IIC) dan SPI. Bersama-sama papan ESP32 ini terdapat juga protokol komunikasi wayarles yang tersedia seperti WiFi, dwi Bluetooth, ESP-Now, LoRa dan banyak lagi. Hari ini kita akan menumpukan pada protokol ESP32 SPI (Serial Peripheral interface).

SPI (Antara Muka Peranti Bersiri) dalam ESP32

SPI atau antara muka persisian bersiri ialah protokol komunikasi jarak dekat yang digunakan dalam berbilang peranti mikropengawal seperti ESP32. Ia ialah protokol komunikasi segerak yang digunakan terutamanya oleh mikropengawal untuk berkomunikasi dengan perantinya, supaya kita boleh menggunakan protokol ini untuk membaca dan mengawal peranti yang menyokong protokol SPI.







Komunikasi SPI menyokong konfigurasi hamba induk sentiasa ada a satu tuan yang mengawal berbilang hamba. Ia adalah dupleks penuh komunikasi supaya data boleh ditukar secara serentak dari tuan kepada hamba dan hamba kepada tuan.




Komunikasi SPI dalam keperluan ESP32 empat pin yang berbeza untuk menghantar dan menerima data ke peranti. Berikut ialah empat pin tersebut:



  1. SCK: Garis jam menentukan kelajuan penghantaran
  2. MISO: Master in slave out ialah pin penghantaran dari hamba ke tuan
  3. ASAP: Kuasai hamba masuk ialah talian penghantaran untuk data induk kepada hamba
  4. SS: Talian pilih hamba membantu ESP32 memilih hamba tertentu dan menghantar atau menerima data daripada hamba tersebut

Catatan: Sesetengah peranti yang hanya hamba dan tidak boleh bertindak sebagai induk penamaan pin mereka adalah berbeza seperti:





    • MISO digantikan dengan SDO (Data Bersiri Keluar)
    • ASAP digantikan dengan SDI (Data Bersiri Masuk)

Pin SPI dalam ESP32

Papan ESP32 disertakan dengan 4 peranti SPI yang berbeza disepadukan dengan mikropengawalnya.

    • SPI0: Untuk komunikasi memori dalaman sahaja- tidak boleh digunakan dengan peranti SPI luaran
    • SPI1: Untuk komunikasi memori dalaman sahaja- tidak boleh digunakan dengan peranti SPI luaran
    • SPI2: (HSPI) mempunyai isyarat bas bebas. Setiap bas boleh turun 3 peranti hamba
    • SPI3: (VSPI) isyarat bas adalah bebas. Setiap bas boleh turun 3 peranti hamba

Kebanyakan papan ESP32 disertakan dengan pin SPI yang telah ditetapkan untuk kedua-dua SPI2 dan SPI3. Walau bagaimanapun, jika tidak diberikan, kami sentiasa boleh menetapkan pin SPI dalam kod. Berikut ialah pin SPI yang terdapat dalam kebanyakan papan ESP32 yang telah ditetapkan:



Antaramuka SPI ASAP MISO SCLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Pin SPI yang disebutkan di atas boleh berbeza-beza bergantung pada jenis papan. Sekarang kami akan menulis kod untuk menyemak pin ESP32 SPI menggunakan Arduino IDE.

Cara Mencari Pin SPI Lalai ESP32

Kod yang ditulis di bawah akan membantu mencari pin SPI lalai dalam papan ESP32. Buka Arduino IDE sambungkan ESP32 dengan PC, pilih port yang betul dan muat naik kod. Kemudian tunggu output. Itu sahaja! begitulah mudahnya

Kod untuk Cari Pin SPI Lalai ESP32

Kod yang diberikan di bawah akan mencetak pin SPI lalai ESP32 pada monitor bersiri.

persediaan kosong ( ) {
Bersiri.mulakan ( 115200 ) ;
Bersiri.cetak ( 'PIN MOSI GPIO: ' ) ;
Serial.println ( ASAP ) ;
Bersiri.cetak ( 'Pin MISO GPIO: ' ) ;
Serial.println ( MISO ) ;
Bersiri.cetak ( 'Pin SCK GPIO: ' ) ;
Serial.println ( SCK ) ;
Bersiri.cetak ( 'Pin SS GPIO: ' ) ;
Serial.println ( SS ) ;
}
gelung kosong ( ) {
}


Kod bermula dengan mentakrifkan kadar baud dan meneruskan dengan memanggil pin GPIO lalai untuk protokol komunikasi ESP32 SPI.

Pengeluaran

Di sini dalam kes kami, monitor bersiri memaparkan pin 23, 19, 18, dan 5 untuk MOSI, MISO, SCK dan SS masing-masing.

Cara Menggunakan Pin SPI Tersuai dalam ESP32

Terima kasih kepada ciri pemultipleksan ESP32, anda boleh mengkonfigurasi sebarang pin papan ESP32 sebagai UART, I2C, SPI dan PWM. Seseorang hanya perlu menetapkannya dalam kod. Sekarang kami akan menentukan pin SPI baharu dan mencetaknya pada monitor bersiri untuk mengesahkan.

Taip kod yang diberikan di bawah dalam editor IDE Arduino.

#include
persediaan kosong ( ) {
Bersiri.mulakan ( 115200 ) ;
Bersiri.cetak ( 'Pin GPIO MOSI lalai: ' ) ;
Serial.println ( ASAP ) ;
Bersiri.cetak ( 'Pin MISO GPIO lalai: ' ) ;
Serial.println ( MISO ) ;
Bersiri.cetak ( 'Pin SCK GPIO lalai: ' ) ;
Serial.println ( SCK ) ;
Bersiri.cetak ( 'Pin SS GPIO lalai: ' ) ;
Serial.println ( SS ) ;
#takrifkan SCK 25
#takrifkan MISO 32
#takrifkan MOSI 26
#define CS 33
/* Library_Name Sensor_name ( CS, MOSI, MISO, SCK ) ; // panggil pin SPI baharu */
Bersiri.cetak ( 'PIN GPIO BAHARU MOSI: ' ) ;
Serial.println ( ASAP ) ;
Bersiri.cetak ( 'Pin GPIO BAHARU MISO: ' ) ;
Serial.println ( MISO ) ;
Bersiri.cetak ( 'Pin GPIO BARU SCK: ' ) ;
Serial.println ( SCK ) ;
Bersiri.cetak ( 'Pin GPIO BARU SS: ' ) ;
Serial.println ( SS ) ;
}
gelung kosong ( ) {
}


Di sini dalam kod di atas, kami memasukkan perpustakaan bersiri SPI kemudian mencetak pin SPI lalai pada monitor bersiri. Seseorang boleh melangkau bahagian kod ini jika tidak diperlukan. Seterusnya menggunakan define kami menetapkan pin baharu kepada SPI dan mencetaknya satu demi satu pada monitor bersiri.

Pengeluaran

Output yang dipaparkan pada monitor bersiri mencetak semua pin SPI baharu untuk papan ESP32.

ESP32 dengan Berbilang Peranti SPI

ESP32 mempunyai dua bas SPI, dan setiap bas boleh mengawal 3 peranti yang bermaksud sejumlah 6 peranti boleh dikawal menggunakan SPI ESP32. Untuk mengawal lebih banyak peranti, kami boleh menggunakan teknik pemultipleksan yang berbeza.

Semasa mengawal berbilang peranti hamba ESP32 akan bertindak sebagai induk bagi ketiga-tiga baris MISO, MOSI SCLK akan sama bagi mereka cuma perbezaannya ialah garis isyarat jam CS. Untuk menghantar data ke peranti hamba, pin CS peranti hamba itu hendaklah ditetapkan kepada rendah.


Sintaks berikut akan diikuti jika kita ingin menetapkan CS kepada LOW.

digitalWrite ( CS, RENDAH ) ;


Katakan kita mahu membaca data daripada mana-mana peranti lain, jadi kita mesti menetapkan pin CS peranti hamba pertama sebagai TINGGI untuk melumpuhkannya.

digitalWrite ( CS_1, TINGGI ) ; // lumpuhkan pin CS HAMBA 1
digitalWrite ( CS_2, RENDAH ) ; // Dayakan pin CS SLAVE dua

Kesimpulan

Antara muka persisian bersiri ialah protokol komunikasi berwayar yang digunakan oleh mikropengawal ESP32 untuk menukar data antara berbilang peranti hamba. ESP32 SPI menyokong dua bas berbeza untuk komunikasi dengan setiap keupayaan bas mengawal 3 peranti hamba. Secara lalai, ESP32 disertakan dengan pin SPI; walau bagaimanapun, kami juga boleh menentukan dan menggunakan pin tersuai menggunakan kod.