ESP32C3与RC522模块SPI连接故障求助(MicroPython环境)
解决方案:ESP32C3 + RC522 RFID模块连接问题修复
一、先理清ESP32C3引脚编号对应关系
首先要区分开发板丝印编号和MicroPython GPIO编号:
- Seeed文档标注的D8/D9/D10是开发板丝印,对应的MicroPython GPIO编号为8、9、10,而非SPI(1)默认的6/7/2(默认引脚可重映射)。
- 务必确保RC522的引脚与ESP32C3的GPIO一一对应,不要混淆丝印和GPIO编号。
二、硬件SPI正确初始化(优先推荐)
直接指定实际连线的GPIO初始化SPI1,避免使用默认引脚冲突。假设你的硬件连线为:
- RC522 SCK → ESP32C3 GPIO8(丝印D8)
- RC522 MOSI → ESP32C3 GPIO10(丝印D10)
- RC522 MISO → ESP32C3 GPIO9(丝印D9)
- RC522 RST → ESP32C3 GPIO4
- RC522 SDA(CS) → ESP32C3 GPIO5
对应的初始化代码:
from mfrc522 import MFRC522 from machine import Pin, SPI # 硬件SPI1初始化,指定实际连线的GPIO spi = SPI(1, baudrate=500000, polarity=0, phase=0, sck=Pin(8), mosi=Pin(10), miso=Pin(9)) rdr = MFRC522(spi=spi, gpioRst=4, gpioCs=5) print("Place card") while True: (stat, tag_type) = rdr.request(rdr.REQIDL) if stat == rdr.OK: print('Card detected') (stat, raw_uid) = rdr.anticoll() if stat == rdr.OK: card_id = "uid: 0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]) print(card_id)
三、软件SPI(SoftSPI)备用方案
若硬件SPI仍有问题,改用SoftSPI,可任意选择空闲GPIO:
from mfrc522 import MFRC522 from machine import Pin, SoftSPI # 软件SPI自定义引脚,对应RC522的SCK/MOSI/MISO sck = Pin(8, Pin.OUT) mosi = Pin(10, Pin.OUT) miso = Pin(9, Pin.IN) spi = SoftSPI(baudrate=100000, polarity=0, phase=0, sck=sck, mosi=mosi, miso=miso) rdr = MFRC522(spi=spi, gpioRst=4, gpioCs=5) print("Place card") while True: (stat, tag_type) = rdr.request(rdr.REQIDL) if stat == rdr.OK: print('Card detected') (stat, raw_uid) = rdr.anticoll() if stat == rdr.OK: card_id = "uid: 0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]) print(card_id)
四、RC522库兼容性调整
当前库在ESP32C3上可能存在时序问题,做以下修改:
- 在
_tocard方法中,增加循环等待超时时间,适配ESP32C3的运行速度:# 原代码 i = 2000 # 修改为 i = 5000 - 确认
_rreg方法的SPI读写逻辑正确(当前代码已符合要求,无需修改):def _rreg(self, reg): if self.cs is not None: self.cs.value(0) buf = self.rregBuf buf[0]=0xff & (((reg << 1) & 0x7e) | 0x80) self.spi.write(buf) val = self.spi.read(1) if self.cs is not None: self.cs.value(1) return val[0]
五、硬件排查要点
- 供电:RC522必须使用3.3V供电,严禁接5V,避免烧坏模块或ESP32C3 GPIO。
- 连线:检查所有引脚连接是否牢固,无虚焊、接触不良,重点排查MISO引脚(信号弱易导致通信失败)。
- 天线:确认RC522的天线焊接良好,无脱落,天线是RFID卡读取的关键部件。
内容的提问来源于stack exchange,提问作者Tiger_JA
相关产品推荐
相关产品推荐

