RFID卡和标签无处不在!我们在建筑物中使用它们进行门禁控制。打印机和复印机可以使用它们来识别员工。牲畜标记和宠物识别标签也都使用某种形式的RFID技术。RFID读取设备的成本非常低,大约5美元即可获得读卡器,再搭配4美元的树莓派Pico,即可读取卡片/标签的ID信息。
在本教程中,我们将学习如何使用MFRC522读卡器和树莓派Pico读取RFID标签和卡片。目标是创建一个虚构的RFID门禁控制系统,该系统允许用户进入建筑物,或提醒安保人员将其移除。在开始之前,我们需要识别卡片/标签的ID。本教程的第一部分将介绍如何完成这一操作,然后我们将插入一些代码来控制两个LED灯以模拟锁定机制。
所需材料
运行MicroPython的树莓派Pico
MFRC522 RFID读卡器
大型面包板
11根公对公跳线
绿色LED灯
红色LED灯
2个100欧姆电阻(棕-黑-棕-金)
硬件搭建
硬件搭建分为两个部分。首先是MFRC522 RFID读卡器的接线。读卡器使用SPI与树莓派Pico通信,需要七个引脚。其中两个用于供电(3.3V和GND),其余用于SPI。
第二部分是我们的输出设备。为了确认是否出示了正确的卡片,我们需要添加两个LED灯。红色表示错误的RFID卡,绿色表示正确的卡。LED灯连接到一个GPIO引脚,我们通过控制该引脚来打开或关闭LED灯,并通过一个100欧姆电阻连接到任意可用的GND引脚。您可以使用220或330欧姆的电阻,我桌上刚好有一些100欧姆的电阻。需要计算正确的电阻值吗?我们为您准备了指南!


在继续之前,请检查您的接线是否正确。
安装RFID读卡器软件
MFRC522是一个简单的RFID读卡器,为了使其更易于使用,我们使用了一个MicroPython模块来简化操作。该模块pico-rfid由Tom's Hardware的朋友Kevin McAleer开发,基于Danjperron工作。
1.将树莓派Pico连接到电脑,并打开Thonny。我们假设您已经知道如何设置树莓派Pico。如果没有,我们有一份便捷的指南。
2.创建一个新的空白文件,并将此链接的内容复制到空白文件中。然后将其保存到树莓派Pico,文件名为mfrc522.py。这是使我们的代码能够与RFID读卡器通信的Python模块/库。
编写项目代码
完成所有设置后,我们现在开始编写项目代码。为此,我们将再次使用Thonny,并编写代码来检查提交给读卡器的任何RFID卡的ID。对于第一部分,我们需要记录ID,因为我们稍后将使用它进行条件测试来检查ID是否与硬编码值匹配,然后允许进入。否则,我们将收到“ACCESS DENIED”(访问被拒绝)消息。
1.在Thonny中创建一个新的空白文件。
2.导入三个模块(库)以使用MFRC522 RFID读卡器、控制代码节奏以及使用GPIO。
frommfrc522importMFRC522importutimefrommachineimportPin
3.创建一个对象reader,以告诉代码RFID读卡器连接到哪里。
reader= MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
4.为红色和绿色LED灯创建两个对象,告诉代码LED灯连接到哪里,并且它们是我们要向其发送电流的输出设备
red= Pin(14, Pin.OUT)green= Pin(15, Pin.OUT)
5. 向用户显示一条简短消息,指示他们将卡片出示给读卡器。“\n”是Python在print()函数末尾引入新行的语法。
print("Present the card to the reader\n")
6. 创建一个名为“PreviousCard”的列表,并在其中存储零值。我们稍后将使用此列表来存储当前卡片的ID。
PreviousCard= [0]
7. 创建一个while True循环,以持续运行其中的代码。
whileTrue:
8. 初始化读卡器,使其准备好使用。
reader.init()
9.创建一个元组来存储读卡器状态和RFID标签类型。
(stat, tag_type) = reader.request(reader.REQIDL)
10. 如果读卡器已准备好,则if条件语句将读取卡片内容。然后,它将使用卡片的详细信息更新stat和uid对象。
ifstat== reader.OK: (stat, uid) = reader.SelectTagSN()
11. 如果卡片的uid与PreviousCard对象中存储的值相同,则代码将继续执行。当同一张卡片反复出示给读卡器时,就会发生这种情况。
ifuid == PreviousCard: continue
12. 创建一个if条件语句来检查卡片读取是否成功。
ifstat== reader.OK:
13.向用户显示一条消息,然后将卡片的UID存储到一个名为“card”的对象中。然后将卡片详细信息打印到Python shell中。
print("The card details are as follows") card = reader.tohexstring(uid) print(card)
14.使用出示卡片的uid更新PreviousCard对象。
PreviousCard= uid
15.创建一个else条件,当没有出示卡片时运行。更新PreviousCard对象。然后在主循环重复之前添加50毫秒的暂停。
else: PreviousCard=[0] utime.sleep_ms(50)
16.将代码保存到树莓派Pico,文件名为reader.py,然后点击“运行”>>“运行当前脚本”(或按下绿色播放按钮)。按照指示将RFID卡片/标签出示给读卡器。
17.复制整个卡片详细信息,这是RFID卡片的uid,我们将在本教程的下一部分中使用它。uid看起来像这样,但您的会有所不同。
[0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80]
完整代码列表
frommfrc522importMFRC522importutimefrommachineimportPinreader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)red = Pin(14, Pin.OUT)green = Pin(15, Pin.OUT)print("Present the card to the reader\n")PreviousCard = [0]whileTrue: reader.init() (stat, tag_type) = reader.request(reader.REQIDL) ifstat == reader.OK: (stat, uid) = reader.SelectTagSN() ifuid == PreviousCard: continue ifstat == reader.OK: print("The card details are as follows") card = reader.tohexstring(uid) print(card) PreviousCard = uid else: PreviousCard=[0] utime.sleep_ms(50)
18.我们已经获得了代码,我们希望使用该代码来授予访问权限,并点亮绿色LED灯。如果将另一张卡片/标签出示给读卡器,则红色LED灯将点亮。
1.在这两行之间,添加新的代码行。
print(card)NEWCODE GOES HERE PreviousCard = uid
2.创建一个if条件,检查您的卡片的uid。请注意,它看起来像一个Python列表,但实际上它存储为字符串,因此我们需要将值用“”括起来。不要忘记[]括号。
ifcard =="[0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80]":
3.如果card对象中存储的值与硬编码值匹配,则在Python shell中打印“ACCESS GRANTED”(访问已授予)。
print("ACCESS GRANTED")
4.创建一个for循环,将绿色LED灯打开/关闭十次,每次状态变化之间间隔0.1秒。在for循环结束时关闭绿色LED灯。
fori in range(10): green.toggle() utime.sleep(0.1) green.off()
5. 当将未识别的卡片/标签出示给读卡器时运行使用else条件语句。这将使红色LED灯打开和关闭就像绿色LED灯一样。
else: print("ACCESS DENIED") for i inrange(10): red.toggle() utime.sleep(0.1) red.off()
6 .将代码命名为reader.py并保存到树莓派Pico。点击“运行”>>“运行当前脚本”(或按下绿色播放按钮)。按照指示将RFID卡片/标签出示给读卡器。如果卡片正确,则绿色LED灯将闪烁,并且Python shell将打印“ACCESS GRANTED”。尝试使用另一张RFID卡片/标签,这应该会使红色LED灯点亮,并且Python shell将打印“ACCESS DENIED”。
完整代码列表
frommfrc522importMFRC522importutimefrommachineimportPinreader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)red = Pin(14, Pin.OUT)green = Pin(15, Pin.OUT)print("Present the card to the reader\n")PreviousCard = [0]whileTrue: reader.init() (stat, tag_type) = reader.request(reader.REQIDL) ifstat == reader.OK: (stat, uid) = reader.SelectTagSN() ifuid == PreviousCard: continue ifstat == reader.OK: print("The card details are as follows") card = reader.tohexstring(uid) print(card) ifcard =="[0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80]": print("ACCESS GRANTED") foriinrange(10): green.toggle() utime.sleep(0.1) green.off() else: print("ACCESS DENIED") foriinrange(10): red.toggle() utime.sleep(0.1) red.off() PreviousCard = uid else: PreviousCard=[0] utime.sleep_ms(50)
原文地址:
https://www.tomshardware.com/raspberry-pi/raspberry-pi-pico/how-to-use-an-rfid-reader-with-a-raspberry-pi-pico
-
RFID
+关注
关注
392文章
6478浏览量
243015 -
读卡器
+关注
关注
2文章
440浏览量
40410 -
树莓派
+关注
关注
122文章
2031浏览量
107674
发布评论请先 登录
教你用树莓派截屏和截图
树莓派Pico的相关资料分享
树莓派Pico的相关资料推荐
树莓派也出MCU了?树莓派Pico来了!

树莓派Pico:仅4美元的MCU

评论