ESP32-Arduino开发实例-与Arduino之间SPI通信

NodeMCU-ESP32与Arduino之间SPI通信

SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

SPI通信协议使用SCK,MOSI,MISO和SS等四条线路。 SPI总线可以有一个主设备和多个从设备。 主设备是微控制器,而从设备可以是微控制器,ADC,DAC等。在这里对SPI通信协议不做详细描述,在后期的文章中做专门描述。

在前面Ardunio开发实例-两个Arduino之间SPI通信的实例中对SPI已经做了描述,在这里就不再做详细描述了。

本次实例将实现NodeMCU-ESP32与Arduino之间SPI通信,其中NodeMCU-ESP32作为主机,Arduino作为从机。

在这里插入图片描述

1、硬件准备

  • Arduino UNO 开发板一块
  • 杜邦线若干、数据线一条
  • 数据线两条
  • NodeMCU-ESP32-S(38引脚版本)开发板一块
  • Arduino UNO R3开发板一块

本次使用NodeMCU-ESP32-S的引脚如下:

在这里插入图片描述

本次使用的引脚如下:

  • P23(GPIO23):VSPI MOSI
  • P19(GPIO19):VSPI MISO
  • P18(GPIO18):VSPI SCK
  • P5(GPIO5):VSPI SS

Arduino UNO开发板的SPI引脚如下:

在这里插入图片描述

NodeMCU-ESP32-S与Arudino UNO开发板的硬件接线如下:

在这里插入图片描述

2、软件准备

  • Arduino IDE

3、代码实现

NodeMCU-ESP32-S作为SPI主机的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <SPI.h>

void setup() {
Serial.begin(9600);
Serial.println("/-----START ESP32-S-----/");
Serial.println("/----------SPI Master---------/");

SPI.begin();
// 设置频率
SPI.setClockDivider(SPI_CLOCK_DIV2);
// 设置数据模式及数据顺序
SPI.setDataMode(SPI_MODE1);
SPI.setBitOrder(MSBFIRST);

// 将SS引脚拉高
pinMode(SS, OUTPUT);
digitalWrite(SS, HIGH);
}

int knob = 54;
void loop() {
byte rxdata;

knob = 54;
// 传输数据
digitalWrite(SS, LOW);
SPI.transfer(knob);
digitalWrite(SS, HIGH);
delay(1000);

knob = 32;
digitalWrite(SS, LOW);
SPI.transfer(knob);
digitalWrite(SS, HIGH);

Serial.println("tx");

delay(1000);
}

Arduino UNO作为SPI从机的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <SPI.h>

byte rxdata;

void setup() {
Serial.begin(9600);
Serial.println("/-----START Arduino nano-----/");
Serial.println("/----------SPI Slave---------/");

SPCR |= bit(SPE);
pinMode(MISO, OUTPUT);
SPI.attachInterrupt();
}

void loop() {
}

ISR(SPI_STC_vect) {
rxdata = SPDR;
Serial.print("ISR! ");
Serial.println(rxdata);
}

分别将程序烧写到开发板,运行结果如下:

在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/115650495