SPI (Serial Peripheral Interface) w ESP32 przy użyciu Arduino IDE

Spi Serial Peripheral Interface W Esp32 Przy Uzyciu Arduino Ide



Płyty ESP32 obsługują wiele protokołów komunikacyjnych. Protokoły te obejmują szeregowe USART, I2C (IIC) i SPI. Wraz z płytami ESP32 dostępne są również protokoły komunikacji bezprzewodowej, takie jak WiFi, podwójny Bluetooth, ESP-Now, LoRa i wiele innych. Dzisiaj skupimy się na protokole ESP32 SPI (Serial Peripheral Interface).

SPI (szeregowy interfejs peryferyjny) w ESP32

SPI lub szeregowy interfejs urządzeń peryferyjnych to protokół komunikacji na niewielką odległość używany w wielu urządzeniach mikrokontrolerowych, takich jak ESP32. Jest to synchroniczny protokół komunikacyjny używany głównie przez mikrokontrolery do komunikacji z urządzeniami peryferyjnymi, dzięki czemu możemy używać tego protokołu do odczytu i sterowania urządzeniami obsługującymi protokół SPI.







Komunikacja SPI obsługuje konfigurację master slave, zawsze jest jeden gospodarz który kontroluje wielu niewolników. To jest pełny dupleks komunikacji, dzięki czemu dane mogą być wymieniane jednocześnie od urządzenia nadrzędnego do urządzenia podrzędnego i od urządzenia podrzędnego do urządzenia nadrzędnego.




Komunikacja SPI w potrzebach ESP32 cztery różne piny do przesyłania i odbierania danych do urządzeń. Oto te cztery piny:



  1. SKK: Linia zegara określa prędkość transmisji
  2. MISO: Master in slave out to pin transmisyjny od slave do mastera
  3. PALIĆ: Master out slave in to linia transmisyjna dla danych master do slave
  4. SS: Linia wyboru niewolnika pomaga ESP32 wybrać konkretnego niewolnika i przesyłać lub odbierać dane z tego niewolnika

Notatka: Niektóre urządzenia, które są tylko urządzeniami podrzędnymi i nie mogą działać jako urządzenia nadrzędne, mają inne nazwy pinów, na przykład:





    • MISO zostaje zastąpiony przez SDO (Wyjście danych szeregowych)
    • PALIĆ zostaje zastąpiony przez SDI (Dane szeregowe w)

Piny SPI w ESP32

Płyta ESP32 jest dostarczana z 4 różne urządzenia peryferyjne SPI zintegrowane z mikrokontrolerem.

    • SPI0: Tylko do komunikacji z pamięcią wewnętrzną — nie można używać z zewnętrznymi urządzeniami SPI
    • SPI1: Tylko do komunikacji z pamięcią wewnętrzną — nie można używać z zewnętrznymi urządzeniami SPI
    • SPI2: (HSPI) mają niezależne sygnały magistrali. Każda magistrala może wyprowadzić 3 urządzenia podrzędne
    • SPI3: Sygnał magistrali (VSPI) jest niezależny. Każda magistrala może wyprowadzić 3 urządzenia podrzędne

Większość płyt ESP32 ma wstępnie przypisane piny SPI zarówno dla SPI2, jak i SPI3. Jeśli jednak nie zostanie to przypisane, zawsze możemy przypisać piny SPI w kodzie. Poniżej przedstawiono piny SPI znajdujące się na większości płyt ESP32, które są wstępnie przypisane:



Interfejs SPI PALIĆ MISO SCLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Wyżej wymienione piny SPI mogą się różnić w zależności od typu płyty. Teraz napiszemy kod, aby sprawdzić piny ESP32 SPI za pomocą Arduino IDE.

Jak znaleźć domyślne piny SPI ESP32

Poniższy kod pomoże znaleźć domyślne piny SPI na płytce ESP32. Otwórz Arduino IDE, połącz ESP32 z komputerem, wybierz odpowiedni port i wgraj kod. Następnie poczekaj na dane wyjściowe. Otóż ​​to! jakie to proste

Kod do znalezienia domyślnych pinów SPI ESP32

Kod podany poniżej wydrukuje domyślne piny SPI ESP32 na monitorze szeregowym.

unieważnić konfigurację ( ) {
Serial.początek ( 115200 ) ;
Wydruk.seryjny ( 'PIN MOSI GPIO: ' ) ;
Serial.println ( PALIĆ ) ;
Wydruk.seryjny ( 'PIN MISO GPIO: ' ) ;
Serial.println ( MISO ) ;
Wydruk.seryjny ( 'Styk GPIO SCK: ' ) ;
Serial.println ( SCK ) ;
Wydruk.seryjny ( 'Styk SS GPIO: ' ) ;
Serial.println ( SS ) ;
}
pusta pętla ( ) {
}


Kod zaczyna się od zdefiniowania szybkości transmisji i jest kontynuowany przez wywołanie domyślnego pinu GPIO dla protokołu komunikacyjnego ESP32 SPI.

Wyjście

Tutaj w naszym przypadku monitor szeregowy wyświetlał piny 23, 19, 18 i 5 odpowiednio dla MOSI, MISO, SCK i SS.

Jak używać niestandardowych pinów SPI w ESP32

Dzięki funkcjom multipleksowania ESP32 możliwe jest skonfigurowanie dowolnego pinu płytki ESP32 jako UART, I2C, SPI i PWM. Wystarczy przypisać je w kodzie. Teraz zdefiniujemy nowe piny SPI i wydrukujemy je na monitorze szeregowym w celu potwierdzenia.

Wpisz poniższy kod w edytorze Arduino IDE.

#include
unieważnić konfigurację ( ) {
Serial.początek ( 115200 ) ;
Wydruk.seryjny ( „Domyślny pin MOSI GPIO:” ) ;
Serial.println ( PALIĆ ) ;
Wydruk.seryjny ( „Domyślny pin MISO GPIO:” ) ;
Serial.println ( MISO ) ;
Wydruk.seryjny ( „Domyślny pin SCK GPIO:” ) ;
Serial.println ( SCK ) ;
Wydruk.seryjny ( „Domyślny pin SS GPIO:” ) ;
Serial.println ( SS ) ;
#definiuj SCK 25
#definiuj MISO 32
#definiuj MOSI 26
#definiuj CS 33
/* Nazwa_biblioteki Nazwa_czujnika ( CS, MOSI, MISO, SCK ) ; // wywołaj nowe piny SPI */
Wydruk.seryjny ( „MOSI NOWY pin GPIO:” ) ;
Serial.println ( PALIĆ ) ;
Wydruk.seryjny ( „NOWY pin GPIO MISO:” ) ;
Serial.println ( MISO ) ;
Wydruk.seryjny ( „SCK NOWY pin GPIO:” ) ;
Serial.println ( SCK ) ;
Wydruk.seryjny ( „SS NOWY pin GPIO:” ) ;
Serial.println ( SS ) ;
}
pusta pętla ( ) {
}


Tutaj w powyższym kodzie dołączamy bibliotekę szeregową SPI, a następnie drukujemy domyślne piny SPI na monitorze szeregowym. Można pominąć tę część kodu, jeśli nie jest potrzebna. Następnie za pomocą definicji przypisujemy nowe piny do SPI i drukujemy je jeden po drugim na monitorze szeregowym.

Wyjście

Wyjście wyświetlane na monitorze szeregowym drukuje wszystkie nowe piny SPI dla płyty ESP32.

ESP32 z wieloma urządzeniami SPI

ESP32 ma dwie magistrale SPI, a każda magistrala może sterować 3 urządzeń, co oznacza, że ​​za pomocą SPI ESP32 można sterować łącznie 6 urządzeniami. Aby sterować większą liczbą urządzeń, możemy zastosować różne techniki multipleksowania.

Podczas sterowania wieloma urządzeniami podrzędnymi ESP32 będzie działał dla nich jako master dla wszystkich trzech linii MISO, MOSI SCLK będzie dla nich taki sam, jedyną różnicą jest linia sygnału zegara CS. Aby wysłać dane do urządzenia podrzędnego, pin CS tego urządzenia podrzędnego powinien być ustawiony na niski.


Poniższa składnia zostanie zastosowana, jeśli chcemy ustawić CS na LOW.

cyfrowy zapis ( CS, NISKI ) ;


Załóżmy, że chcemy odczytać dane z dowolnego innego urządzenia, więc musimy ustawić pin CS pierwszego urządzenia podrzędnego na WYSOKI, aby je wyłączyć.

cyfrowy zapis ( CS_1, WYSOKI ) ; // wyłącz pin CS SLAVE 1
cyfrowy zapis ( CS_2, NISKI ) ; // Włącz pin CS SLAVE dwa

Wniosek

Szeregowy interfejs peryferyjny to przewodowy protokół komunikacyjny używany przez mikrokontroler ESP32 do wymiany danych między wieloma urządzeniami podrzędnymi. ESP32 SPI obsługuje dwie różne magistrale do komunikacji z każdą magistralą umożliwiającą sterowanie 3 urządzeniami podrzędnymi. Domyślnie ESP32 jest dostarczany z pinami SPI; jednak możemy również definiować i używać niestandardowych pinów za pomocą kodu.