所以我使用的是带有TTGO显示屏的ESP32 (见下图的引脚),并且我想使用RC522 RFID模块,但是,我得到了一个通信错误,并且固件版本未知。我使用的是Arduino IDE、SPI库和MFRC522库。
我花了一整天的时间在互联网上搜索,我阅读了论坛上的许多帖子,并尝试了提供的解决方案(例如:焊接引脚,再次检查布线...)。我也读过无数的教程,但都无济于事。当我尝试在Arduino UNO上使用RFID模块时,一切都工作得很好,但我必须使用ESP32。我觉得我已经尝试了所有的方法,所以我只是希望有人也遇到了同样的问题,并找到了解决方案。
下面是我的代码,这是MFRC522库的DumpInfo示例,稍作修改,因为-正如我所说-我已经尝试了一堆“解决方案”。RC522有8个引脚: 3.3V、接地、RST、RQ、MOSI、MISO、SCK和SDA。3.3V连接到ESP32的3.3V,ESP32的接地到接地。RST是连接到GPIO22 (定义为RST_PIN)的复位引脚。SDA是连接到GPIO21 (定义为SS_PIN)的从机选择引脚。然后是分别连接到GPIO25、GPIO26和GPIO27 (定义为SCK_PIN、MOSI_PIN和MISO_PIN)的SCK、MOSI和MISO引脚。RQ引脚用于我们不需要的中断,所以它没有连接到任何东西。
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 22 //GPIO22
#define SS_PIN 21 //GPIO21
#define MISO_PIN 27 //GPIO27
#define MOSI_PIN 26 //GPIO26
#define SCK_PIN 25 //GIPO25
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
SPIClass spi(HSPI);
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
spi.begin(SCK_PIN, MISO_PIN, MOSI_PIN);
spi.setDataMode(SPI_MODE3);
mfrc522.PCD_Init(); // Init MFRC522
delay(5000); // Optional delay. Some board do need more time after init to be ready, see Readme
mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details
Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
}
void loop() {
// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Dump debug info about the card; PICC_HaltA() is automatically called
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}
这会在串行监视器中产生几个随机符号,然后是以下内容:
Firmware Version: 0x0 = (unknown)
WARNING: Communication failure, is the MFRC522 properly connected?
Scan PICC to see UID, SAK, type, and data blocks...
正如我提到的,这是一种最后的手段。我希望有人遇到过同样的情况,并能提供一些有用的信息,我希望这些信息我还没有在哪里读到。
发布于 2020-11-25 13:00:08
我和你的情况完全一样:我的MFRC-522在Uno上工作得很好,但在ESP32上就不行了。我来这里寻求帮助,你的问题把我引向了正确的方向。在我的代码中,SPI.begin()调用的参数丢失了: SCK_PIN、MISO_PIN和MOSI_PIN。如果没有这些参数,我的ESP32就无法读取数据。我已经测试并确认了pinMode(SS_PIN,OUTPUT)和spi.setDataMode(SPI_MODE3)调用不是它工作所必需的,但是像在SPI.begin(SCK_PIN,MISO_PIN,MOSI_PIN)上那样传递参数是必需的。
我使用的是不同的密码,这是我的工作代码和你的唯一不同之处。下面是我的定义:
#define RST_PIN 22
#define SS_PIN 21
#define MISO_PIN 19
#define MOSI_PIN 23
#define SCK_PIN 18
我知道你一定没有读到这篇文章,但我希望我能像你帮助我一样帮助别人。谢谢!
布鲁诺
https://stackoverflow.com/questions/61034469
复制相似问题