ESP32C3 读取RFID MFRC522模块

使用ESP32C3

硬件连接:

MFRC522  ESP32C3
3.3V3.3V
GND        GND   
RST0
MISO5
MOSI6
SCK4
NSS7

程序:



#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN  7
#define RST_PIN 0

MFRC522 rfid(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin(); // init SPI bus
  rfid.PCD_Init(); // init MFRC522

  Serial.println("Tap an RFID/NFC tag on the RFID-RC522 reader");
}

void loop() {
  if (rfid.PICC_IsNewCardPresent()) { // new tag is available
    if (rfid.PICC_ReadCardSerial()) { // NUID has been readed
      MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
      Serial.print("RFID/NFC Tag Type: ");
      Serial.println(rfid.PICC_GetTypeName(piccType));

      // print UID in Serial Monitor in the hex format
      Serial.print("UID:");
      for (int i = 0; i < rfid.uid.size; i++) {
        Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
        Serial.print(rfid.uid.uidByte[i], HEX);
      }
      Serial.println();

      rfid.PICC_HaltA(); // halt PICC
      rfid.PCD_StopCrypto1(); // stop encryption on PCD
    }
  }
}

直接编译会有问题,出现如下问题。

需要修改MFRC522Extended.cpp文件的内容

找到了一个解决办法:"ordered comparison of pointer with integer zero" error ArduinoIDE / ESP32 · Issue #632 · miguelbalboa/rfid · GitHub

Hey, I had the same issue, I fixed it modifying with if (backData && (backLen != nullptr)) instead of if (backData && (backLen > 0)) for both occurrences. It works great on ESP32 now and I also tested on ESP8266.

Edit: on "MFRC522Extended.cpp" line 824 and 847

这样可以正常编译。

上次后可以读取RFID卡

如果使用这种模块,硬件连接如下

MFRC522  ESP32C3
3.3V3.3V
GND        GND   
RST0
MISO5
MOSI6
SCK4
SDA7
RQ       不接

把SDA接到原来的CS

### ESP32-C3 读取输入电平 为了在ESP32-C3上通过Arduino IDE读取GPIO管脚的输入电平,可以按照如下方法编写程序: ```cpp const int inputPin = 17; // 设置要使用的GPIO编号 void setup() { pinMode(inputPin, INPUT); // 将指定引脚设置为输入模式 Serial.begin(115200); // 初始化串口通信用于调试输出 } void loop() { int val = digitalRead(inputPin); // 读取当前引脚上的逻辑电平 if (val == HIGH) { // 如果检测到高电平 Serial.println("High level detected"); // 输出提示信息至串行监视器 } else { // 否则当低电平时 Serial.println("Low level detected"); } } ``` 上述代码展示了如何定义一个特定的GPIO作为输入端口,并周期性地检查其状态[^3]。 对于可能出现的重启问题,在某些情况下可能是由于电源不稳定或是外部干扰引起的。如果遇到频繁重启的情况,建议采取以下措施来排查和解决问题: - **稳定供电**:确保给微控制器提供足够的电流支持,特别是当连接有额外负载时; - **去耦电容**:靠近芯片VCC与GND之间放置适当大小的陶瓷电容器(通常为0.1uF),有助于减少电压波动; - **软件层面处理异常中断**:利用看门狗定时器(WDT),可以在发生意外死机的情况下自动恢复运行而不必完全断电重置设备; - **硬件设计优化**:检查电路布线是否存在潜在短路风险或其他可能影响正常工作的因素; 另外值得注意的是,ESP32系列MCU内部集成了多种保护机制,比如过流保护、欠压锁定(UVLO)等特性,这些都能够在一定程度上防止因不当操作而导致的损坏或不必要重启现象的发生[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值