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:
Nota: Algunos dispositivos que son solo esclavos y no pueden actuar como maestro, su nombre de pin es diferente, como:
Pins SPI en ESP32
El tablero ESP32 viene con 4 Diferentes periféricos de SPI integrados con su microcontrolador.
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.