SPI w esptop 10 za pomocą Arduino IDE

SPI w esptop 10 za pomocą Arduino IDE

Rady ESP32 mają obsługę wielu protokołów komunikacyjnych. Protokoły te obejmują szereg USART, I2C (IIC) i SPI. Wraz z tymi płytami ESP32 dostępne są również protokoły komunikacji bezprzewodowej, takie jak Wi-Fi, Dual Bluetooth, Esp-Now, Lora i wiele innych. Dzisiaj skupimy się na protokole ESP32 SPI (szeregowy interfejs peryferyjny).

SPI (szeregowy interfejs peryferyjny) w ESP32

SPI lub szeregowy interfejs peryferyjny to protokół komunikacji z krótkimi dystansem stosowany w wielu urządzeniach mikrokontrolerów, takich jak ESP32. Jest to synchroniczny protokół komunikacji stosowany przede wszystkim przez mikrokontrolery do komunikacji z jego peryferyjami, tak że możemy użyć tego protokołu do odczytu i kontroli urządzeń obsługujących protokół SPI.

Komunikacja SPI obsługuje konfigurację niewolników głównych, zawsze jest jeden gospodarz który kontroluje wielu niewolników. To jest Pełny dupleks Komunikacja, dzięki czemu dane mogą być wymiany jednocześnie od mistrza na niewolnika i niewolnika na mistrz.


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

  1. SCK: Linia zegara określa prędkość transmisji
  2. Miso: Master in Slave Out to szpilka transmisyjna od niewolnika do mistrza
  3. MOSI: Master Out Slave IN to linia przesyłowa dla danych głównych do niewolnika
  4. SS: Linia wyboru niewolnika pomaga ESP32 w wyborze konkretnego niewolnika i przesyłania lub odbierania danych od tego niewolnika

Notatka: Niektóre urządzenia, które są niewolnikami i nie mogą działać jako opanowanie nazewnictwa pinów, są różne, takie jak:

    • Miso jest zastąpiony SDO (Dane szeregowe)
    • Mosi jest zastąpiony SDI (Dane szeregowe w)

Piny SPI w ESP32

Płyta ESP32 jest wyposażona w 4 Różne peryferyjne SPI zintegrowane z mikrokontrolerem.

    • SPI0: W przypadku komunikacji pamięci wewnętrznej nie można używać z zewnętrznymi urządzeniami SPI
    • SPI1: W przypadku komunikacji pamięci wewnętrznej nie można używać z zewnętrznymi urządzeniami SPI
    • SPI2: (HSPI) mają niezależne sygnały autobusowe. Każdy autobus może wyprowadzić 3 urządzenia niewolników
    • SPI3: (VSPI) Sygnał magistrali jest niezależny. Każdy autobus może wyprowadzić 3 urządzenia niewolników

Większość tablic ESP32 jest wyposażona w wstępne piny SPI zarówno dla SPI2, jak i SPI3. Jeśli jednak nie zostanie przypisany, zawsze możemy przypisać piny SPI w kodzie. Poniżej znajdują się piny SPI znalezione na większości planszy ESP32, które są wstępnie wypisane:

Interfejs SPI Mosi Miso Sclk Cs
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Powyżej wspomniane piny SPI mogą się różnić w zależności od typu tablicy. Teraz napiszmy kod, aby sprawdzić piny SPI ESP32 za pomocą Arduino IDE.

Jak znaleźć domyślne piny SPI ESP32

Kod napisany poniżej pomoże znaleźć domyślne piny SPI na tablicy ESP32. Otwórz Arduino IDE Connect ESP32 z komputerem, wybierz odpowiedni port i prześlij kod. Następnie poczekaj na wyjście. Otóż ​​to! Tak to jest proste

Kod, aby znaleźć domyślne piny SPI ESP32

Kod podany poniżej wydrukuje domyślne piny SPI ESP32 na monitor szeregowych.

void setup ()
Seryjny.rozpocząć (115200);
Seryjny.Drukuj („Pin Mosi GPIO:”);
Seryjny.println (MOSI);
Seryjny.print („Miso GPIO Pin:”);
Seryjny.println (miso);
Seryjny.print („SCK GPIO Pin:”);
Seryjny.println (SCK);
Seryjny.print („ss gpio pin:”);
Seryjny.println (ss);

void Loop ()


Kod rozpoczyna się od definiowania szybkości BAUD i kontynuowanych od wywołania domyślnego PIN GPIO dla protokołu komunikacji ESP32 SPI.

Wyjście

Tutaj w naszym przypadku monitor szeregowy wyświetlał PIN 23, 19, 18 i 5.

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

Dzięki funkcjom multipleksowania ESP32 Możliwe jest skonfigurowanie dowolnego pinu płyty ESP32 jako UART, I2C, SPI i PWM. Trzeba je po prostu przypisać w kodzie. Teraz zdefiniujemy nowe piny SPI i wydrukujemy je na monitorze szeregowym, aby potwierdzić.

Wpisz kod podany poniżej w Edytorze Arduino IDE.

#włączać
void setup ()
Seryjny.rozpocząć (115200);
Seryjny.print („domyślny pin mosi GPIO:”);
Seryjny.println (MOSI);
Seryjny.print („Domyślny pin miso GPIO:”);
Seryjny.println (miso);
Seryjny.print („domyślny pin SCK GPIO:”);
Seryjny.println (SCK);
Seryjny.print („domyślny pin SS GPIO:”);
Seryjny.println (ss);
#definicja SCK 25
#definicja Miso 32
#definicja Mosi 26
#definicja CS 33
/*Library_name sensor_name (CS, MOSI, MISO, SCK); // Zadzwoń do nowych pinów SPI*/
Seryjny.Drukuj („MOSI New GPIO Pin:”);
Seryjny.println (MOSI);
Seryjny.Drukuj („Miso New GPIO Pin:”);
Seryjny.println (miso);
Seryjny.print („SCK NOWY PIN GPIO:”);
Seryjny.println (SCK);
Seryjny.Drukuj („SS New GPIO Pin:”);
Seryjny.println (ss);

void Loop ()


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 to potrzebne. Następnie za pomocą Zdefiniuj, przypisujemy nowe szpilki do SPI i wydrukujemy je jeden po drugim na monitor szeregowych.

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 dwa autobusy SPI, a każdy autobus może kontrolować 3 Urządzenia, które oznaczają, że w sumie 6 urządzeń można kontrolować za pomocą SPI ESP32. Aby kontrolować więcej urządzeń, możemy użyć różnych technik multipleksowania.

Podczas gdy kontrolowanie wielu urządzeń niewolników ESP32 będzie działać jako mistrz dla nich wszystkie trzy linie MISO, MOSI SCLK będzie dla nich taka sama, że ​​różnica to linia sygnału zegara CS. Aby wysłać dane do urządzenia niewolnika CS PIN tego urządzenia niewolnika, należy ustawić na niski.


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

DigitalWrite (CS, niski);


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

DigitalWrite (CS_1, High); // Wyłącz pin CS Slave 1
DigitalWrite (CS_2, Low); // Włącz pin CS Slave 2

Wniosek

Szeregowy interfejs peryferyjny to przewodowy protokół komunikacyjny używany przez MicroController ESP32 do wymiany danych między wieloma urządzeniami niewolnikami. ESP32 SPI obsługuje dwa różne autobusy do komunikacji z każdym autobusem kontrolowania 3 urządzeń niewolników. Domyślnie ESP32 jest wyposażony w piny SPI; Możemy jednak zdefiniować i używać niestandardowych pinów za pomocą kodu.