繁体   English   中英

如何将 SPI 与 ESP32 和 Arduino 一起使用

[英]How to use SPI with ESP32 and Arduino

我正在尝试从 SPI 发送数据,但无法正常工作。 SPI 端口(D12、13、14;用示波器检查)上似乎没有数据,ESP32 似乎挂起。 我想使用 HSPI 端口。

我还想知道我是否需要 SPI 的特殊驱动程序才能在 ESP32 上工作,如果需要,我如何检查我是否已经拥有它以及如何安装它。 当我查看库管理器时,我看不到特殊的 SPI 驱动程序。

我试过使用这个程序(从https://diyi0t.com/spi-tutorial-for-arduino-and-esp8266/复制)。 它显然是为 esp8266 而设计的。 它是否也适用于 ESP32?

#include "SPI.h"
char buff[]="Hello Slave\n";

void setup() {
 SPI.begin();
}

void loop() {
 for(int i=0; i<sizeof buff; i++)
 {
  SPI.transfer(buff[i]);
 }
 delay(1000);  
}

还有这个程序:

#include "SPI.h"
char buff[]="Hello Slave\n";
SPIClass SPI1(HSPI);

void setup() {
 SPI1.begin();
 SPI1.setClockDivider(80);
}

void loop() {
 for(int i=0; i<sizeof buff; i++)
 {
  SPI1.transfer(buff[i]);
 }
 delay(1000);  
}

我使用的是 30 针 ESP32 开发板,Arduino 版本 1.8.13。 在 preferences-->more board managers 中,它说:

http://arduino.esp8266.com/stable/package_esp8266com_index.json, https://dl.espressif.com/dl/package_esp32_index.json

对于 ESP32,您需要声明要使用的 SPI 实例,如下所示:

#include <SPI.h>

SPIClass SPI1(HSPI);

SPI1.begin();
// Optional
// SPI1.beginTransaction(SPISettings(3000000, MSBFIRST, SPI_MODE2));

rest 与 ESP8266 相同

#include <SPI.h>

#define HSPI_MISO 12
#define HSPI_MOSI 13
#define HSPI_SCLK 14
#define HSPI_CS   15
static const int spiClk = 240000000; // 1 MHz
SPIClass * hspi = NULL;

char buff[]="Hello Slave\n";

//byte buff[] = {0xAA, 0xBB, 0xAA, 0x01,
                  0x89, 0xAB, 0xCD, 0xEF};



void setup() {
Serial.begin(9600);
hspi = new SPIClass(HSPI);
hspi->begin();
hspi->begin(HSPI_SCLK, HSPI_MISO, HSPI_MOSI, HSPI_CS); //SCLK, MISO, MOSI, SS
pinMode(HSPI_CS, OUTPUT); //HSPI SS
}

void loop() {
 for(int i=0; i<sizeof buff; i++)
 {
  SPI.transfer(buff[i]);
  Serial.println(buff[i]);

 }
 delay(1000);  
}

假设您使用ESP32 Arduino Core ,在文档下写道SPI 具有受支持的 Arduino API 实现。 因此使用Arduino SPI API ,它应该像所有其他设备一样工作(ESP32 Arduino Core 实现符合 Arduino 定义的 API,当然我会检查你的板的引出线是否与 Espressif 定义的 ESP32 引出线一致)。

如果您想查看一些示例,可以在此处找到一个。 所有支持的 API 在 GitHub 上的 ESP32 Arduino Core repo 上都有示例。

我还想指出,在 Arduino IDE(或 VSCode 插件)中,您可以找到 SPI 的示例,我也会看一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM