目录
原创不易,点个赞或者点个关注激励笔者分享更多优质原创内容吧!
问题描述
在ArduinoIDE上使用Adafruit_PN532库,编译官方示例文件中的iso14443a_uid文件到ESP32板子中,串口监视器提示无法找到PN532(Can't find board PN532)
出现问题的环境
Arduino IDE V2.0.0-rc9.2
ESP32-Wroom-DA Module
Adafruit_PN532库 V1.2.2
PN532与ESP32使用SPI通信
问题出现的原因
Adafruit_PN532库本身是适配于Adafruit的PN532开发板,虽然从其库的github上可以看到ESP32通过了使用测试,但是在issues问题页上可以看到有很多用户也困扰于这个库用于ESP32提示Can't find board PN532的问题,从评论区可以看到,问题的原因应该是:
Adafruit_PN532库中设定的SPI通信速度过快,导致找不到PN532
此处附上该Issues页
ESP32 SPI · Issue #80 · adafruit/Adafruit-PN532 · GitHub
解决方法
修改库文件中.c文件的SPI通信速度配置
具体步骤如下
- 点击文件->首选项
- 找到项目文件夹地址并在文件夹中打开
- 点进libraries文件夹,这里就是你下载的库的存放位置
- 点进你要查看的库,这里我们点击Adafruit_PN532
- 打开Adafruit_PN532.cpp文件
- 在Adafruit_PN532.cpp文件的第1行添加下列代码用于SPI速度的宏定义配置
#ifdef ESP32
#define SPI_FREQ 100000
#else
#define SPI_FREQ 1000000
#endif
这里解释一下,因为如果使用了Arduino IDE环境来对ESP32进行编程,且使用了官方提供的开发板包,那么就会define ESP32标识符,这里通过这一点来进行SPI速度的选择
- 然后将Adafruit_PN532.cpp文件第128行的函数修改为下面的函数
Adafruit_PN532::Adafruit_PN532(uint8_t clk, uint8_t miso, uint8_t mosi,
uint8_t ss) {
spi_dev = new Adafruit_SPIDevice(ss, clk, miso, mosi, SPI_FREQ,
SPI_BITORDER_LSBFIRST, SPI_MODE0);
}
- 155行的函数修改为下面的函数
Adafruit_PN532::Adafruit_PN532(uint8_t ss) {
spi_dev = new Adafruit_SPIDevice(ss, SPI_FREQ, SPI_BITORDER_LSBFIRST, SPI_MODE0);
}
这里其实就是将库文件中本来写死的SPI频率改成刚刚宏定义的SPI频率
修改后记得保存Adafruit_PN532.cpp文件
修改后再次编译官方示例,发现PN532在ESP32上正常工作了!
资源下载
下面是修改好的库,直接替换原来的文件就行
已经设置为免费下载
可适用于ESP32的Adafruit_PN532库-嵌入式文档类资源-CSDN下载