Arduino Spi, NodeMCU SPI con Arduino IDE
Arduino Spi, qué es
El Serial Peripheral Interface (SPI) es un protocolo de conexión de interfaz de bus iniciado originalmente por Motorola Corp.
- La interfaz SPI utiliza cuatro cables para la comunicación. Por lo tanto, también se le conoce como protocolo de comunicación serie de cuatro hilos.
- SPI es un protocolo de comunicación maestro-esclavo full duplex. Esto significa que sólo un único maestro y un único esclavo pueden comunicarse en el bus de interfaz al mismo tiempo.
- Los dispositivos habilitados para SPI funcionan en dos modos básicos de funcionamiento de SPI, es decir, el Modo Maestro SPI y el Modo Esclavo SPI.
- El dispositivo maestro es responsable de la iniciación de la comunicación. El dispositivo maestro genera un Serial Clock para la transferencia de datos sincrónica. El Dispositivo Maestro puede manejar múltiples dispositivos esclavos en el bus seleccionándolos uno por uno.
El ESP8266 basado en NodeMCU tiene Hardware SPI con cuatro pines disponibles para la comunicación SPI. Con esta interfaz SPI, podemos conectar cualquier dispositivo habilitado para SPI con NodeMCU y hacer posible la comunicación con él.
El ESP8266 tiene pines SPI (SD1, CMD, SD0, CLK) que se utilizan exclusivamente para la comunicación Quad-SPI con memoria flash en el ESP-12E, por lo que no se pueden utilizar para aplicaciones SPI. Podemos utilizar la interfaz Hardware SPI para aplicaciones de usuario final.
La siguiente figura muestra los pines de la interfaz SPI cuádruple que se utilizan internamente para el flash. Consiste en cuatro señales de datos bidireccionales (i/o (i/p y o/p) con reloj sincronizado (SDIO_CLK) y pin de selección de chip (SDIO_CMD). Se utiliza principalmente para obtener más ancho de banda/transmisión que la interfaz dual i/o (bus de datos de 2 bits).
NodeMCU SPI Pins
- MISO (Master In Slave Out) El maestro recibe los datos y el esclavo los transmite a través de este pin.
- MOSI (Master Out Slave In) El maestro transmite los datos y el esclavo recibe los datos a través de este pin.
- SCLK (Reloj Serial) El maestro genera este reloj para la comunicación, que es utilizado por el esclavo. Sólo el maestro puede iniciar el reloj en serie.
- CS (Selección de chip) El maestro puede seleccionar el dispositivo esclavo a través de este pin para iniciar la comunicación con él.
Ejemplo de uso de este SPI
Vamos a escribir el sketch de Arduino de la comunicación SPI para NodeMCU. Aquí NodeMCU está actuando como dispositivo maestro y estamos usando Arduino uno como dispositivo esclavo.
En este ejemplo, estamos enviando una cadena «Hello Slave» con’\n’ como final de cadena desde el dispositivo maestro NodeMCU. El dispositivo esclavo recibe esta cadena y la imprime en un monitor de serie.
Código de Arduino para NodeMCU Master SPI
#include
char buff[]="Hello Slave\n";
void setup() {
Serial.begin(9600); /* begin serial with 9600 baud */
SPI.begin(); /* begin SPI */
}
void loop() {
for(inti=0; i SPI.transfer(buff[i]);
delay(1000);
}
Arduino Sketch para SPI esclavo de Arduino Uno
#include
char buff [100];
volatile byte index;
volatile bool receivedone; /* use reception complete flag */
void setup (void)
{
Serial.begin (9600);
SPCR |= bit(SPE); /* Enable SPI */
pinMode(MISO, OUTPUT); /* Make MISO pin as OUTPUT */
index = 0;
receivedone = false;
SPI.attachInterrupt(); /* Attach SPI interrupt */
}
void loop (void)
{
if (receivedone) /* Check and print received buffer if any */
{
buff[index] = 0;
Serial.println(buff);
index = 0;
receivedone = false;
}
}
// SPI interrupt routine
ISR (SPI_STC_vect)
{
uint8_t oldsrg = SREG;
cli();
char c = SPDR;
if (index {
buff [index++] = c;
if (c == '\n'){ /* Check for newline character as end of msg */
receivedone = true;
}
}
SREG = oldsrg;
}
Ventana de salida del esclavo
Esta salida se recibe en el dispositivo esclavo que se transmite desde el dispositivo maestro.
Debe estar conectado para enviar un comentario.