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文章
6448瀏覽量
242650 -
讀卡器
+關注
關注
2文章
438瀏覽量
40323 -
樹莓派
+關注
關注
121文章
2009瀏覽量
107483
發布評論請先 登錄
教你用樹莓派截屏和截圖
樹莓派Pico的相關資料分享
樹莓派Pico的相關資料推薦
樹莓派也出MCU了?樹莓派Pico來了!

樹莓派Pico:僅4美元的MCU

評論