首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ESP32 RFID RC522 -固件版本0x0 +通信错误

ESP32 RFID RC522 -固件版本0x0 +通信错误
EN

Stack Overflow用户
提问于 2020-04-05 04:38:51
回答 1查看 2.3K关注 0票数 0

所以我使用的是带有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引脚用于我们不需要的中断,所以它没有连接到任何东西。

代码语言:javascript
运行
复制
#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));
}

这会在串行监视器中产生几个随机符号,然后是以下内容:

代码语言:javascript
运行
复制
Firmware Version: 0x0 = (unknown)
WARNING: Communication failure, is the MFRC522 properly connected?
Scan PICC to see UID, SAK, type, and data blocks...

正如我提到的,这是一种最后的手段。我希望有人遇到过同样的情况,并能提供一些有用的信息,我希望这些信息我还没有在哪里读到。

EN

Stack Overflow用户

发布于 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)上那样传递参数是必需的。

我使用的是不同的密码,这是我的工作代码和你的唯一不同之处。下面是我的定义:

代码语言:javascript
运行
复制
#define RST_PIN   22  
#define SS_PIN    21  
#define MISO_PIN  19 
#define MOSI_PIN  23 
#define SCK_PIN   18 

我知道你一定没有读到这篇文章,但我希望我能像你帮助我一样帮助别人。谢谢!

布鲁诺

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61034469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档