树莓派基于MFRC522的门禁系统代码异常求助
树莓派MFRC522门禁功能故障排查与修复
代码层面的核心问题
- 类型不匹配导致权限判断失效:
reader.read_id()返回的是整数类型,但你定义的allowed_id是字符串类型。整数与字符串永远不会相等,因此即使标签ID正确,也会被判定为拒绝访问。 - 未定义变量引发报错:代码中
print("Data:", text)里的text变量从未定义,运行到该行会直接抛出NameError。
修复后的代码示例
import RPi.GPIO as GPIO from mfrc522 import SimpleMFRC522 import datetime reader = SimpleMFRC522() # 将允许的ID改为整数类型,与read_id()返回值类型匹配 allowed_id = 141854387750 try: while True: print("Hold an RFID tag near the reader") # 使用read()方法同时获取标签ID和存储的文本,避免未定义变量问题 id, text = reader.read() if id == allowed_id: print("Access granted for Tag ID:", id) print("Data:", text) else: print("Access denied. Tag ID:", id) except KeyboardInterrupt: GPIO.cleanup()
额外排查方向
如果修复代码后仍无法正常运行,检查以下硬件/环境问题:
- 确认MFRC522模块与树莓派的接线是否正确(重点核对SDA、SCK、MOSI、MISO、GND、VCC引脚)。
- 检查
mfrc522库是否正确安装:运行pip install mfrc522确认安装状态。 - 确保树莓派的SPI接口已启用:通过
raspi-config进入“Interface Options”开启SPI功能。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

