SPI (последовательный периферийный интерфейс) в ESP32 с использованием Arduino IDE

Spi Posledovatel Nyj Periferijnyj Interfejs V Esp32 S Ispol Zovaniem Arduino Ide



Платы ESP32 поддерживают несколько протоколов связи. Эти протоколы включают последовательный USART, I2C (IIC) и SPI. Наряду с этими платами ESP32 также доступны протоколы беспроводной связи, такие как WiFi, двойной Bluetooth, ESP-Now, LoRa и многие другие. Сегодня мы сосредоточимся на протоколе ESP32 SPI (Serial Peripheral interface).

SPI (последовательный периферийный интерфейс) в ESP32

SPI или последовательный периферийный интерфейс — это протокол связи на короткие расстояния, используемый в нескольких микроконтроллерных устройствах, таких как ESP32. Это протокол синхронной связи, который в основном используется микроконтроллерами для связи со своими периферийными устройствами, поэтому мы можем использовать этот протокол для чтения и управления устройствами, поддерживающими протокол SPI.







Связь SPI поддерживает конфигурацию ведущий-ведомый, всегда есть один мастер который управляет несколькими подчиненными. Это полный дуплекс связь, поэтому данные могут быть одновременно обменены от ведущего к ведомому и от ведомого к ведущему.




Связь SPI в ESP32 нуждается четыре разные контакты для передачи и приема данных на устройства. Ниже приведены эти четыре контакта:



  1. СК: Тактовая линия определяет скорость передачи
  2. МИСО: Мастер в ведомом выходе - это вывод передачи от ведомого к ведущему.
  3. ДЫМ: Мастер из ведомого входа - это линия передачи данных ведущего к ведомому.
  4. SS: Строка выбора ведомого устройства помогает ESP32 выбрать конкретное ведомое устройство и передавать или получать данные от этого ведомого устройства.

Примечание: Некоторые устройства, которые являются только ведомыми и не могут выступать в качестве ведущих, имеют разные имена контактов, например:





    • МИСО заменяется на СДО (последовательный вывод данных)
    • ДЫМ заменяется на СДИ (серийный ввод данных)

Выводы SPI в ESP32

Плата ESP32 поставляется с 4 различные периферийные устройства SPI, интегрированные с его микроконтроллером.

    • SPI0: Только для связи с внутренней памятью — нельзя использовать с внешними устройствами SPI.
    • SPI1: Только для связи с внутренней памятью — нельзя использовать с внешними устройствами SPI.
    • SPI2: (HSPI) имеют независимые сигналы шины. Каждая шина может вывести 3 подчиненные устройства
    • SPI3: Сигнал шины (VSPI) независим. Каждая шина может вывести 3 подчиненные устройства

Большинство плат ESP32 поставляются с предварительно назначенными контактами SPI как для SPI2, так и для SPI3. Однако, если они не назначены, мы всегда можем назначить контакты SPI в коде. Ниже приведены контакты SPI, имеющиеся на большинстве плат ESP32, которые предварительно назначены:



SPI-интерфейс ДЫМ МИСО СКЛК КС
ВСПИ GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Вышеупомянутые контакты SPI могут различаться в зависимости от типа платы. Теперь мы напишем код для проверки выводов SPI ESP32 с помощью Arduino IDE.

Как найти контакты SPI ESP32 по умолчанию

Написанный ниже код поможет найти контакты SPI по умолчанию на плате ESP32. Откройте Arduino IDE, подключите ESP32 к ПК, выберите правильный порт и загрузите код. Затем дождитесь выхода. Вот и все! вот как это просто

Код для поиска контактов SPI ESP32 по умолчанию

Код, приведенный ниже, напечатает контакты SPI ESP32 по умолчанию на последовательном мониторе.

недействительная установка ( ) {
Серийный.начало ( 115200 ) ;
Серийный.печать ( 'Контакт MOSI GPIO: ' ) ;
Серийный.println ( ДЫМ ) ;
Серийный.печать ( «Вывод MISO GPIO:» ) ;
Серийный.println ( МИСО ) ;
Серийный.печать ( 'Контакт SCK GPIO: ' ) ;
Серийный.println ( СКК ) ;
Серийный.печать ( «Контакт SS GPIO:» ) ;
Серийный.println ( SS ) ;
}
пустая петля ( ) {
}


Код начинается с определения скорости передачи и продолжается вызовом вывода GPIO по умолчанию для протокола связи ESP32 SPI.

Выход

В нашем случае последовательный монитор отображал контакты 23, 19, 18 и 5 для MOSI, MISO, SCK и SS соответственно.

Как использовать пользовательские выводы SPI в ESP32

Благодаря функциям мультиплексирования ESP32 можно настроить любой вывод платы ESP32 как UART, I2C, SPI и PWM. Нужно просто назначить их в коде. Теперь мы определим новые контакты SPI и напечатаем их на последовательном мониторе для подтверждения.

Введите приведенный ниже код в редакторе Arduino IDE.

#include
недействительная установка ( ) {
Серийный.начало ( 115200 ) ;
Серийный.печать ( «Контакт MOSI GPIO по умолчанию:» ) ;
Серийный.println ( ДЫМ ) ;
Серийный.печать ( «Пин-код MISO GPIO по умолчанию:» ) ;
Серийный.println ( МИСО ) ;
Серийный.печать ( «Контакт SCK GPIO по умолчанию:» ) ;
Серийный.println ( СКК ) ;
Серийный.печать ( «Контакт SS GPIO по умолчанию:» ) ;
Серийный.println ( SS ) ;
# определить SCK 25
#define МИСО 32
#define МОСИ 26
# определить CS 33
/* Имя_библиотеки Имя_датчика ( КС, МОСИ, МИСО, ССК ) ; // вызывать новые контакты SPI */
Серийный.печать ( 'НОВЫЙ вывод GPIO MOSI: ' ) ;
Серийный.println ( ДЫМ ) ;
Серийный.печать ( «MISO NEW GPIO Pin:» ) ;
Серийный.println ( МИСО ) ;
Серийный.печать ( «SCK NEW GPIO Pin:» ) ;
Серийный.println ( СКК ) ;
Серийный.печать ( «SS NEW GPIO Pin:» ) ;
Серийный.println ( SS ) ;
}
пустая петля ( ) {
}


Здесь, в приведенном выше коде, мы включаем последовательную библиотеку SPI, а затем печатаем контакты SPI по умолчанию на последовательном мониторе. Эту часть кода можно пропустить, если она не нужна. Затем с помощью определения мы назначаем новые контакты SPI и печатаем их один за другим на последовательном мониторе.

Выход

Вывод, отображаемый на последовательном мониторе, печатает все новые контакты SPI для платы ESP32.

ESP32 с несколькими устройствами SPI

ESP32 имеет две шины SPI, и каждая шина может управлять 3 устройств, что означает, что с помощью SPI ESP32 можно управлять в общей сложности 6 устройствами. Чтобы управлять большим количеством устройств, мы можем использовать различные методы мультиплексирования.

При управлении несколькими ведомыми устройствами ESP32 будет выступать в качестве ведущего для них по всем трем линиям MISO, MOSI SCLK будет для них одинаковым, разница только в линии тактового сигнала CS. Для отправки данных на ведомое устройство вывод CS этого ведомого устройства должен быть установлен на низкий уровень.


Следующий синтаксис будет использоваться, если мы хотим установить CS на LOW.

цифровойЗапись ( КС, НИЗКИЙ ) ;


Предположим, мы хотим считать данные с любого другого устройства, поэтому мы должны установить вывод CS первого ведомого устройства как ВЫСОКИЙ, чтобы отключить его.

цифровойЗапись ( CS_1, ВЫСОКИЙ ) ; // отключить вывод CS SLAVE 1
цифровойЗапись ( CS_2, НИЗКИЙ ) ; // Включить вывод CS SLAVE два

Вывод

Последовательный периферийный интерфейс — это протокол проводной связи, используемый микроконтроллером ESP32 для обмена данными между несколькими ведомыми устройствами. ESP32 SPI поддерживает две разные шины для связи, при этом каждая шина может управлять тремя ведомыми устройствами. По умолчанию ESP32 поставляется с контактами SPI; однако мы также можем определять и использовать пользовательские контакты с помощью кода.