[英]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.