RFID卡和標(biāo)簽無處不在!我們在建筑物中使用它們進(jìn)行門禁控制。打印機(jī)和復(fù)印機(jī)可以使用它們來識別員工。牲畜標(biāo)記和寵物識別標(biāo)簽也都使用某種形式的RFID技術(shù)。RFID讀取設(shè)備的成本非常低,大約5美元即可獲得讀卡器,再搭配4美元的樹莓派Pico,即可讀取卡片/標(biāo)簽的ID信息。
在本教程中,我們將學(xué)習(xí)如何使用MFRC522讀卡器和樹莓派Pico讀取RFID標(biāo)簽和卡片。目標(biāo)是創(chuàng)建一個(gè)虛構(gòu)的RFID門禁控制系統(tǒng),該系統(tǒng)允許用戶進(jìn)入建筑物,或提醒安保人員將其移除。在開始之前,我們需要識別卡片/標(biāo)簽的ID。本教程的第一部分將介紹如何完成這一操作,然后我們將插入一些代碼來控制兩個(gè)LED燈以模擬鎖定機(jī)制。
所需材料
運(yùn)行MicroPython的樹莓派Pico
MFRC522 RFID讀卡器
大型面包板
11根公對公跳線
綠色LED燈
紅色LED燈
2個(gè)100歐姆電阻(棕-黑-棕-金)
硬件搭建
硬件搭建分為兩個(gè)部分。首先是MFRC522 RFID讀卡器的接線。讀卡器使用SPI與樹莓派Pico通信,需要七個(gè)引腳。其中兩個(gè)用于供電(3.3V和GND),其余用于SPI。
第二部分是我們的輸出設(shè)備。為了確認(rèn)是否出示了正確的卡片,我們需要添加兩個(gè)LED燈。紅色表示錯(cuò)誤的RFID卡,綠色表示正確的卡。LED燈連接到一個(gè)GPIO引腳,我們通過控制該引腳來打開或關(guān)閉LED燈,并通過一個(gè)100歐姆電阻連接到任意可用的GND引腳。您可以使用220或330歐姆的電阻,我桌上剛好有一些100歐姆的電阻。需要計(jì)算正確的電阻值嗎?我們?yōu)槟鷾?zhǔn)備了指南!


在繼續(xù)之前,請檢查您的接線是否正確。
安裝RFID讀卡器軟件
MFRC522是一個(gè)簡單的RFID讀卡器,為了使其更易于使用,我們使用了一個(gè)MicroPython模塊來簡化操作。該模塊pico-rfid由Tom's Hardware的朋友Kevin McAleer開發(fā),基于Danjperron工作。
1.將樹莓派Pico連接到電腦,并打開Thonny。我們假設(shè)您已經(jīng)知道如何設(shè)置樹莓派Pico。如果沒有,我們有一份便捷的指南。
2.創(chuàng)建一個(gè)新的空白文件,并將此鏈接的內(nèi)容復(fù)制到空白文件中。然后將其保存到樹莓派Pico,文件名為mfrc522.py。這是使我們的代碼能夠與RFID讀卡器通信的Python模塊/庫。
編寫項(xiàng)目代碼
完成所有設(shè)置后,我們現(xiàn)在開始編寫項(xiàng)目代碼。為此,我們將再次使用Thonny,并編寫代碼來檢查提交給讀卡器的任何RFID卡的ID。對于第一部分,我們需要記錄ID,因?yàn)槲覀兩院髮⑹褂盟M(jìn)行條件測試來檢查ID是否與硬編碼值匹配,然后允許進(jìn)入。否則,我們將收到“ACCESS DENIED”(訪問被拒絕)消息。
1.在Thonny中創(chuàng)建一個(gè)新的空白文件。
2.導(dǎo)入三個(gè)模塊(庫)以使用MFRC522 RFID讀卡器、控制代碼節(jié)奏以及使用GPIO。
frommfrc522importMFRC522importutimefrommachineimportPin
3.創(chuàng)建一個(gè)對象reader,以告訴代碼RFID讀卡器連接到哪里。
reader= MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
4.為紅色和綠色LED燈創(chuàng)建兩個(gè)對象,告訴代碼LED燈連接到哪里,并且它們是我們要向其發(fā)送電流的輸出設(shè)備
red= Pin(14, Pin.OUT)green= Pin(15, Pin.OUT)
5. 向用戶顯示一條簡短消息,指示他們將卡片出示給讀卡器。“\n”是Python在print()函數(shù)末尾引入新行的語法。
print("Present the card to the reader\n")
6. 創(chuàng)建一個(gè)名為“PreviousCard”的列表,并在其中存儲零值。我們稍后將使用此列表來存儲當(dāng)前卡片的ID。
PreviousCard= [0]
7. 創(chuàng)建一個(gè)while True循環(huán),以持續(xù)運(yùn)行其中的代碼。
whileTrue:
8. 初始化讀卡器,使其準(zhǔn)備好使用。
reader.init()
9.創(chuàng)建一個(gè)元組來存儲讀卡器狀態(tài)和RFID標(biāo)簽類型。
(stat, tag_type) = reader.request(reader.REQIDL)
10. 如果讀卡器已準(zhǔn)備好,則if條件語句將讀取卡片內(nèi)容。然后,它將使用卡片的詳細(xì)信息更新stat和uid對象。
ifstat== reader.OK: (stat, uid) = reader.SelectTagSN()
11. 如果卡片的uid與PreviousCard對象中存儲的值相同,則代碼將繼續(xù)執(zhí)行。當(dāng)同一張卡片反復(fù)出示給讀卡器時(shí),就會發(fā)生這種情況。
ifuid == PreviousCard: continue
12. 創(chuàng)建一個(gè)if條件語句來檢查卡片讀取是否成功。
ifstat== reader.OK:
13.向用戶顯示一條消息,然后將卡片的UID存儲到一個(gè)名為“card”的對象中。然后將卡片詳細(xì)信息打印到Python shell中。
print("The card details are as follows") card = reader.tohexstring(uid) print(card)
14.使用出示卡片的uid更新PreviousCard對象。
PreviousCard= uid
15.創(chuàng)建一個(gè)else條件,當(dāng)沒有出示卡片時(shí)運(yùn)行。更新PreviousCard對象。然后在主循環(huán)重復(fù)之前添加50毫秒的暫停。
else: PreviousCard=[0] utime.sleep_ms(50)
16.將代碼保存到樹莓派Pico,文件名為reader.py,然后點(diǎn)擊“運(yùn)行”>>“運(yùn)行當(dāng)前腳本”(或按下綠色播放按鈕)。按照指示將RFID卡片/標(biāo)簽出示給讀卡器。
17.復(fù)制整個(gè)卡片詳細(xì)信息,這是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.我們已經(jīng)獲得了代碼,我們希望使用該代碼來授予訪問權(quán)限,并點(diǎn)亮綠色LED燈。如果將另一張卡片/標(biāo)簽出示給讀卡器,則紅色LED燈將點(diǎn)亮。
1.在這兩行之間,添加新的代碼行。
print(card)NEWCODE GOES HERE PreviousCard = uid
2.創(chuàng)建一個(gè)if條件,檢查您的卡片的uid。請注意,它看起來像一個(gè)Python列表,但實(shí)際上它存儲為字符串,因此我們需要將值用“”括起來。不要忘記[]括號。
ifcard =="[0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80]":
3.如果card對象中存儲的值與硬編碼值匹配,則在Python shell中打印“ACCESS GRANTED”(訪問已授予)。
print("ACCESS GRANTED")
4.創(chuàng)建一個(gè)for循環(huán),將綠色LED燈打開/關(guān)閉十次,每次狀態(tài)變化之間間隔0.1秒。在for循環(huán)結(jié)束時(shí)關(guān)閉綠色LED燈。
fori in range(10): green.toggle() utime.sleep(0.1) green.off()
5. 當(dāng)將未識別的卡片/標(biāo)簽出示給讀卡器時(shí)運(yùn)行使用else條件語句。這將使紅色LED燈打開和關(guān)閉就像綠色LED燈一樣。
else: print("ACCESS DENIED") for i inrange(10): red.toggle() utime.sleep(0.1) red.off()
6 .將代碼命名為reader.py并保存到樹莓派Pico。點(diǎn)擊“運(yùn)行”>>“運(yùn)行當(dāng)前腳本”(或按下綠色播放按鈕)。按照指示將RFID卡片/標(biāo)簽出示給讀卡器。如果卡片正確,則綠色LED燈將閃爍,并且Python shell將打印“ACCESS GRANTED”。嘗試使用另一張RFID卡片/標(biāo)簽,這應(yīng)該會使紅色LED燈點(diǎn)亮,并且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
+關(guān)注
關(guān)注
390文章
6382瀏覽量
241185 -
讀卡器
+關(guān)注
關(guān)注
2文章
429瀏覽量
40102 -
樹莓派
+關(guān)注
關(guān)注
121文章
1949瀏覽量
107003
發(fā)布評論請先 登錄
基于樹莓派設(shè)計(jì)的RFID門禁系統(tǒng)

教你用樹莓派截屏和截圖
用樹莓派怎么制作刷臉門禁系統(tǒng)?
樹莓派pico入門學(xué)習(xí)筆記(一)相關(guān)資料推薦
樹莓派Pico的相關(guān)資料分享
樹莓派Pico的相關(guān)資料推薦
樹莓派也出MCU了?樹莓派Pico來了!

樹莓派Pico:僅4美元的MCU

樹莓派pico入門學(xué)習(xí)筆記(一)

距離檢測報(bào)警使用樹莓派Pico

評論