這篇文章來源于DevicePlus.com英語網站的翻譯稿。
目的
本教程旨在展示何將RFID讀卡器和執行器與Raspberry Pi集成在一起?;诒疚挠懻摰幕驹?,我們還會制造一個RFID狗門。
概述
在本教程中,我將介紹如何將RC522 RFID模塊與Raspberry Pi基板集成在一起。我還將展示如何集成一個執行器(本例中是一個LED),來響應RFID模塊的正確讀取信息。該執行器可以是電磁鎖、揚聲器,甚至可以是記錄數據的Web界面。我還會介紹如何利用此設計實現一個RFID狗門。
設備
表1:設備
物品 | 鏈接 |
---|---|
Raspberry Pi 3 | Raspberry Pi 鏈接 |
RC522 RFID 模塊 | RFID 模塊鏈接 |
HDMI 線 | HDMI 線鏈接 |
LED | Adafruit LED鏈接 |
鼠標 + 鍵盤 | 鍵盤/鼠標的Amazon鏈接 |
顯示器/電視機 | 任何帶有HDMI接口的電視機或顯示器 |
跳線 | 跳線的Amazon鏈接 |
Micro USB 數據線 | Micro USB數據線的Amazon鏈接 |
面包板 | 面包板的Amazon鏈接 |
目錄
1. 設計電路
2. 編寫代碼
a.啟用 SPI
b.安裝軟件包
c.添加到 Read.py
3. 運行代碼
a.獲取 UID
b.運行最終腳本
4. 制作狗門的注意事項
5.其他設備選項
6.附錄:Read.py
程序
1. 設計電路
我一直喜歡使用開源的原理圖繪制和PCB布線軟件Fritzing來制作接線圖(圖1:執行器為LED的電路原理圖)。您可以通過以下鏈接(可選)下載Fritzing: https://fritzing.org/home/
第一張原理圖是我正在制作的以LED作為執行器的電路。當RFID模塊產生正確讀取信號,LED會亮起。
第二個電路中的執行器是一個電磁鎖。這個電路用于實現門鎖和狗門設計。TIP120是一款達林頓功率晶體管陣列。它只允許Raspberry Pi控制電磁鎖,電磁鎖所需功率比Paspberry Pi的GPIO端口的輸出還要大。
圖1:執行器為LED的電路原理圖
圖2:執行器為電磁鎖的電路原理圖 RC522 RFID模塊使用SPI(串行外圍接口總線)連接到Raspberry Pi。SPI總線在嵌入式系統中應用相當普遍。讀卡器應根據下表進行接線。
表2:RC522接線表
RC522 Pin | Raspberry Pi 引腳 | 導線顏色 |
---|---|---|
3.3V | 引腳 1 | 紅 |
RST | 引腳 22 | 橙 |
GND | 引腳 6 | 黑 |
MISO | 引腳 21 | 白 |
MOSI | 引腳 19 | 灰 |
SCK | 引腳 23 | 綠 |
SDA | 引腳 24 | 藍 |
我將執行器(一個LED)連接到了Raspberry Pi的引腳18。你也應該連接這個引腳。
2. 編寫代碼
a. 啟用 SPI
第一步是在Raspberry Pi上啟用SPI。為此,請打開命令行窗口并輸入sudo raspi-config。系統會彈出Configuration Menu。選擇菜單5“Interfacing Options”?,F在選擇“P4 SPI”。當系統問你是否要啟用SPI接口時,選擇“Yes”。配置菜單將顯示“The SPI interface is enabled.”。要完成SPI的啟用,請打開命令行終端并輸入命令sudo reboot。Raspberry Pi會重啟,從而完成SPI啟用。
b. 安裝軟件包
我們要用的庫是用Python 2編寫的,不是Python 3。因此,第一步是安裝Python 2.7。請輸入sudo apt-get install python2.7-dev完成該操作。SPI PY庫負責與RC522模塊通信。我通過鍵入命令git clone https://github.com/lthiery/SPI-Py.git來克隆這個庫。然后安裝該庫。首先,通過鍵入cd SPI-Py進入SPI-Py目錄。然后鍵入sudo python setup.py install安裝庫。
c. 添加到 Read.py
Read.py腳本需要更改才能與RC522模塊對話。編輯此腳本時,請滾動到腳本底部,然后加入注釋“Authenticate”。本教程不涉及RFID的身份驗證。確保在腳本頭添加時間庫。接下來找到標題為“#Configure LED Output Pin”的部分。這里是你配置執行器的地方。如果要將該設計應用于狗門,那么應將輸出引腳配置到電磁鎖。
接下來找到標題為“#Check to see if card UID read matches your card UID.”的部分。該If/Else語句檢查讀卡器從卡上讀取的UID與您之前保存在腳本中的UID是否匹配,如果UID匹配,則執行器的輸出為高。
3. 運行代碼
a. 獲取 UID
首次運行腳本時,您需要獲取卡的UID。RFID卡的UID是與此卡相關聯的唯一編號,類似于序列號。
要運行腳本,請將目錄更改為保存腳本的目錄。然后輸入python Read.py,運行腳本。因為腳本讀卡器UID,所以當你將卡放在讀取器上時,它會拒絕訪問。屏幕上會顯示這張卡的UID。記下這個UID。編輯腳本,然后將腳本的UID更改為此值并保存。
圖3:腳本運行,顯示UID b. 運行最終腳本
輸入python Read.py,再次運行腳本?,F在,當你將卡放在讀卡器上時,驗證通過且LED會亮5秒鐘。如果將你的設計應用于狗門,那么在驗證通過后電磁鎖會打開。
圖4:等待讀卡
圖5:驗證通過 4. 制作狗門的注意事項
如果要將該設計實現為一個狗門,那么你需要考慮其他一些設計技巧:
1. 添加第二個電磁鎖,以保證兩側鎖門。
2. 在門上添加一個霍爾效應(磁傳感器)傳感器和一塊磁鐵,以便讓Raspberry Pi在鎖門之前知道門已返回到關閉位置。
3. 如果你真的很有想法,那么可以圍繞門設計較大的環形天線,代替在門上安裝小型讀卡器。你需要電磁線,而且需要將其焊接到讀取模塊上。這需要資深技巧,有關環形天線的信息請在這里閱讀。
4. 如果你是資深程序員,那么可以閱讀MFRC522 數據表,更改芯片組上的固件,更好地滿足自己的應用要求。
5. 其他設備選項
a.門鎖
b.安全鎖
c.支付設備
d.運輸跟蹤/物流
e.零售/購物
6. 附錄:Read.py
#!/usr/bin/env python # -*- coding: utf8 -*- import RPi.GPIO as GPIO import MFRC522 import signal import time continue_reading = True # Capture SIGINT for cleanup when the script is aborted def end_read(signal,frame): global continue_reading print ("Ctrl+C captured, ending read.") continue_reading = False GPIO.cleanup() # Hook the SIGINT signal.signal(signal.SIGINT, end_read) # Create an object of the class MFRC522 MIFAREReader = MFRC522.MFRC522() # Welcome message print ("Welcome to the MFRC522 data read example") print ("Press Ctrl-C to stop.") # This loop keeps checking for chips. If one is near it will get the UID and authenticate while continue_reading: # Scan for cards (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL) # If a card is found if status == MIFAREReader.MI_OK: print ("Card detected") # Get the UID of the card (status,uid) = MIFAREReader.MFRC522_Anticoll() # If we have the UID, continue if status == MIFAREReader.MI_OK: # Print UID print ("Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])+','+str(uid[4])) # This is the default key for authentication key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF] # Select the scanned tag MIFAREReader.MFRC522_SelectTag(uid) #ENTER Your Card UID here my_uid = [61,84,4,114,31] #Configure LED Output Pin LED = 18 GPIO.setup(LED, GPIO.OUT) GPIO.output(LED, GPIO.LOW) #Check to see if card UID read matches your card UID if uid == my_uid: #Open the Doggy Door if matching UIDs print("Access Granted") GPIO.output(LED, GPIO.HIGH) #Turn on LED time.sleep(5) #Wait 5 Seconds GPIO.output(LED, GPIO.LOW) #Turn off LED else: #Don't open if UIDs don't match print("Access Denied, YOU SHALL NOT PASS!") ## # Authenticate ## status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid) ## ## # Check if authenticated ## if status == MIFAREReader.MI_OK: ## MIFAREReader.MFRC522_Read(8) ## MIFAREReader.MFRC522_StopCrypto1() ## else: ## print "Authentication error"
審核編輯:湯梓紅
-
led
+關注
關注
242文章
23340瀏覽量
662271 -
RFID
+關注
關注
388文章
6188瀏覽量
238300 -
讀卡器
+關注
關注
2文章
419瀏覽量
39424 -
Raspberry Pi
+關注
關注
2文章
560瀏覽量
22330
發布評論請先 登錄
相關推薦
評論