SPI en Esptop 10 usando Arduino IDE

SPI en Esptop 10 usando Arduino IDE

Los tableros ESP32 tienen soporte para múltiples protocolos de comunicación. Estos protocolos incluyen Serial Usart, I2C (IIC) y SPI. Junto con estos tableros ESP32 también hay protocolos de comunicación inalámbricos disponibles como WiFi, Bluetooth dual, ESP-Now, Lora y muchos más. Hoy nos centraremos en el protocolo SPI SPI (interfaz periférica en serie).

SPI (interfaz periférica en serie) en ESP32

SPI o interfaz periférica en serie es un protocolo de comunicación de corta distancia utilizada en múltiples dispositivos de microcontroladores como ESP32. Es un protocolo de comunicación sincrónico utilizado principalmente por los microcontroladores para comunicarse con sus periféricos, de modo que podemos usar este protocolo para leer y controlar dispositivos que admiten el protocolo SPI.

SPI Communication admite la configuración de esclavos maestros siempre hay un uno maestro que controla múltiples esclavos. Es un duplex completo comunicación para que los datos se puedan intercambiar simultáneamente de maestro a esclavo y esclavo a maestro.


SPI Communication en ESP32 necesita cuatro diferentes pines para transmitir y recibir datos a los dispositivos. Los siguientes son esos cuatro alfileres:

  1. SCK: La línea del reloj determina la velocidad de transmisión
  2. MISO: Master in Slave Out es el pasador de transmisión de esclavo a maestro
  3. Mosi: Master Out Slave IN IS Transmission Line for Master Data to Slave
  4. SS: La línea de selección de esclavos ayuda a ESP32 a seleccionar un esclavo en particular y transmitir o recibir datos de ese esclavo

Nota: Algunos dispositivos que son solo esclavos y no pueden actuar como maestro, su nombre de pin es diferente, como:

    • MISO se reemplaza con SDO (Datos en serie)
    • Mosi se reemplaza con IDE (Datos en serie en)

Pins SPI en ESP32

El tablero ESP32 viene con 4 Diferentes periféricos de SPI integrados con su microcontrolador.

    • SPI0: Solo para comunicación de memoria interna, no se puede utilizar con dispositivos SPI externos
    • SPI1: Solo para comunicación de memoria interna, no se puede utilizar con dispositivos SPI externos
    • SPI2: (HSPI) tienen señales de bus independientes. Cada autobús puede derivar 3 dispositivos de esclavos
    • SPI3: (VSPI) La señal de bus es independiente. Cada autobús puede derivar 3 dispositivos de esclavos

La mayoría de los tableros ESP32 vienen con pines SPI preasignados para SPI2 y SPI3. Sin embargo, si no se asigna, siempre podemos asignar pines SPI en el código. Los siguientes son los pines SPI que se encuentran en la mayoría de la placa ESP32 que son preasignadas:

Interfaz SPI Mosi MISO Sclk CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



Los pines SPI mencionados anteriormente pueden variar según el tipo de tablero. Ahora escribiremos un código para verificar los pines SPI ESP32 usando Arduino IDE.

Cómo encontrar pines SPI predeterminados de ESP32

El código escrito a continuación ayudará a encontrar los pines SPI predeterminados en la placa ESP32. Abra Arduino IDE Connect ESP32 con PC, seleccione el puerto correcto y cargue el código. Luego espera la salida. Eso es todo! Así de simple es

Código para encontrar pines SPI predeterminados ESP32

El código que se detalla a continuación imprimirá los pines SPI predeterminados ESP32 en el monitor en serie.

setup () void
De serie.comenzar (115200);
De serie.imprimir ("Pin GPIO MOSI:");
De serie.println (MOSI);
De serie.imprimir ("Pin de GPIO de miso:");
De serie.println (miso);
De serie.imprimir ("SCK GPIO PIN:");
De serie.println (sck);
De serie.imprimir ("SS GPIO Pin:");
De serie.println (ss);

bucle void ()


El código comienza definiendo la tasa de baudios y continúa llamando al PIN GPIO predeterminado para el protocolo de comunicación SPI ESP32.

Producción

Aquí en nuestro caso, el monitor en serie mostró el pin 23, 19, 18 y 5 para MOSI, MISO, SCK y SS respectivamente.

Cómo usar pines SPI personalizados en ESP32

Gracias a las características de multiplexación ESP32, es posible configurar cualquier pin de la placa ESP32 como UART, I2C, SPI y PWM. Uno solo necesita asignarlos en código. Ahora definiremos nuevos pines SPI e imprimiremos en el monitor en serie para confirmar.

Escriba el código que se proporciona a continuación en el editor de Arduino IDE.

#incluir
setup () void
De serie.comenzar (115200);
De serie.imprimir ("Pin de GPIO MOSI predeterminado:");
De serie.println (MOSI);
De serie.imprimir ("Pin GPIO de miso predeterminado:");
De serie.println (miso);
De serie.imprimir ("Pin GPIO SCK predeterminado:");
De serie.println (sck);
De serie.imprimir ("Pin GPIO SS predeterminado:");
De serie.println (ss);
#Define SCK 25
#Define MISO 32
#Define Mosi 26
#Define CS 33
/*Biblioteca_name sensor_name (cs, mosi, miso, sck); // llame a nuevos pines SPI*/
De serie.imprimir ("Mosi New GPIO Pin:");
De serie.println (MOSI);
De serie.imprimir ("MISO New GPIO Pin:");
De serie.println (miso);
De serie.imprimir ("SCK New GPIO Pin:");
De serie.println (sck);
De serie.imprimir ("SS New GPIO Pin:");
De serie.println (ss);

bucle void ()


Aquí en el código anterior, incluimos la biblioteca de serie SPI y luego imprime los pines SPI predeterminados en el monitor de serie. Uno puede omitir esta parte del código si no es necesario. A continuación, Usando Define, asignamos pines nuevos para SPI e imprimimos uno por uno en Serial Monitor.

Producción

La salida que se muestra en el monitor en serie imprime todos los nuevos pasadores SPI para la placa ESP32.

ESP32 con múltiples dispositivos SPI

ESP32 tiene dos autobuses SPI, y cada bus puede controlar 3 dispositivos, lo que significa que se puede controlar un total de 6 dispositivos utilizando SPI de ESP32. Para controlar más dispositivos, podemos usar diferentes técnicas de multiplexación.

Si bien el control de múltiples dispositivos esclavos ESP32 actuará como maestro para ellos las tres líneas miso, Mosi SCLK será la misma para ellos solo la diferencia es la línea de señal de reloj CS. Para enviar datos a un dispositivo CS de dispositivo esclavo de ese dispositivo esclavo debe establecerse en bajo.


Se seguirá la siguiente sintaxis si queremos establecer CS en baja.

DigitalWrite (CS, Low);


Supongamos que queremos leer datos de cualquier otro dispositivo, por lo que debemos establecer el pin CS del primer dispositivo esclavo como alto para deshabilitarlo.

DigitalWrite (CS_1, High); // deshabilitar el pin de esclavo 1
DigitalWrite (CS_2, Low); // habilitar el pin de esclavo 2

Conclusión

La interfaz periférica en serie es un protocolo de comunicación con cable utilizado por el microcontrolador ESP32 para intercambiar datos entre múltiples dispositivos de esclavos. ESP32 SPI admite dos autobuses diferentes para la comunicación con cada capacidad de autobús de controlar 3 dispositivos de esclavos. Por defecto, ESP32 viene con pines SPI; Sin embargo, también podemos definir y usar pines personalizados usando el código.