Arduino uno 与esp32的spi通信
时间: 2025-04-26 12:48:36 浏览: 37
### Arduino Uno 和 ESP32 SPI 通信教程
#### 设备配置
在构建SPI通信时,NodeMCU-ESP32担任主机角色而Arduino Uno则作为从机参与工作[^1]。为了确保两者间的数据交换顺畅无阻,需按照特定方式连接相应引脚。
对于硬件连线部分,通常遵循如下原则:
| 功能 | NodeMCU-ESP32 (Master) Pin | Arduino Uno (Slave) Pin |
| --- | -------------------------- | ---------------------- |
| MOSI | GPIO23 | D11 |
| MISO | GPIO19 | D12 |
| SCK | GPIO18 | D13 |
| SS | GPIO5 | D10 |
#### 软件设置
##### 主设备(ESP32)
```cpp
#include <SPI.h>
void setup() {
Serial.begin(115200);
pinMode(SS, OUTPUT); // 设置片选信号线为输出模式
digitalWrite(SS, HIGH); // 初始化状态设为高电平
SPI.begin(); // 启动SPI总线服务
}
void loop() {
const char* message = "Hello from Master";
int length = strlen(message);
digitalWrite(SS, LOW); // 开始一次传输前拉低SS引脚激活从器件
delayMicroseconds(10);
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
for(int i=0; i<length;i++){
SPI.transfer(message[i]);
}
SPI.endTransaction();
digitalWrite(SS,HIGH); // 结束此次通讯后恢复高电平释放从器件
}
```
此段代码展示了如何利用`SPI`库来初始化并操作ESP32上的SPI接口向Arduino发送字符串消息。
##### 从设备(Arduino Uno)
```cpp
#include <SPI.h>
char receivedChar;
void setup(){
Serial.begin(115200);
pinMode(SS, INPUT_PULLUP); // 配置SS管脚为输入上拉模式
SPCR |= _BV(SPE); // 手动开启SPI中断使能位
}
ISR(SPI_STC_vect){
receivedChar = SPDR;
Serial.print(receivedChar);
}
void loop(){}
```
上述代码片段实现了Arduino Uno作为SPI从站接收来自ESP32的消息,并通过串口监视器打印接收到的内容。
阅读全文
相关推荐


















