ACR122U读写器开发NFC标签扫描存储代码遇pynfc失效求助
解决ACR122U扫描并保存NFC标签信息的方案
我之前用ACR122U配合nfcpy开发时也踩过不少坑,给你整理了一套亲测有效的方案,能实现扫描NFC标签并保存信息的功能:
先搞定环境依赖
很多时候代码跑不起来都是环境问题,先确保这些步骤做对:
- Linux(Ubuntu/Debian):先安装系统依赖库
sudo apt-get install libnfc-bin libnfc-dev - Windows:去ACR122U官方网站下载并安装对应的USB驱动
- 重新安装nfcpy(避免旧版本冲突):
pip uninstall -y nfcpy && pip install nfcpy
完整可运行代码
这段代码会检测标签靠近,读取标签UID和NDEF内容,自动保存到文本文件:
import nfc import ndef import time from threading import Thread def read_and_save_tag(tag): """读取标签信息并保存到文件""" try: # 获取标签唯一ID(UID) tag_uid = tag.hex print(f"检测到标签,UID: {tag_uid}") # 读取NDEF记录 if not tag.ndef: print("该标签没有存储NDEF格式数据") save_content = f"标签UID: {tag_uid}\n备注: 无NDEF数据" else: records = list(tag.ndef.records) save_content = f"标签UID: {tag_uid}\n\nNDEF记录内容:\n" for idx, record in enumerate(records): save_content += f"--- 记录{idx+1} ---\n" save_content += f"类型: {record.type}\n" # 兼容非UTF-8编码的内容 content = record.data.decode('utf-8', errors='replace') save_content += f"内容: {content}\n\n" # 用时间戳命名文件,避免覆盖旧数据 filename = f"nfc_tag_info_{int(time.time())}.txt" with open(filename, 'w', encoding='utf-8') as f: f.write(save_content) print(f"标签信息已保存到: {filename}") except Exception as e: print(f"处理标签时出错: {str(e)}") def on_tag_connected(tag): """标签连接时的回调函数""" Thread(target=read_and_save_tag, args=(tag,)).start() return True # 返回True保持连接,直到标签离开 if __name__ == "__main__": print("等待NFC标签靠近...") try: # 初始化ACR122U读写器,'usb'是默认前端 with nfc.ContactlessFrontend('usb') as clf: # 等待标签连接,触发回调 clf.connect(rdwr={'on-connect': on_tag_connected}) except Exception as e: print(f"初始化读写器失败: {str(e)}") print("排查方向:") print("- 确认ACR122U已正确连接到电脑") print("- Linux用户请检查是否有USB设备访问权限(可尝试sudo运行脚本)") print("- 可使用`nfc-list`命令查看设备是否被识别")
关键注意事项
- Linux权限问题:普通用户可能无法访问USB设备,临时解决可以用
sudo python your_script.py运行;永久解决可以把用户加入dialout组:
执行后重启或重新登录生效。sudo usermod -aG dialout $USER - 设备路径指定:如果
usb无法识别设备,可以用nfc-list命令查看设备路径,比如usb:001:005,然后修改代码中的初始化部分:with nfc.ContactlessFrontend('usb:001:005') as clf: - 非NDEF标签处理:如果你的标签是MIFARE Classic这类非NDEF格式的,需要额外处理扇区读取(涉及密钥验证),可以在评论区告诉我,我再补充相关代码。
内容的提问来源于stack exchange,提问作者Vacpox Gamer
相关产品推荐
相关产品推荐

