电源设计技术信息网站

订阅电子杂志   English   繁體中文   日本語   한국어

下载中心

TECH INFO技术动态

如何将RFID模块与Raspberry Pi集成在一起

这篇文章来源于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. 1. 设计电路
  2. 2. 编写代码
    1. a.启用 SPI
    2. b.安装软件包
    3. c.添加到 Read.py
  3. 3. 运行代码
    1. a.获取 UID
    2. b.运行最终脚本
  4. 4. 制作狗门的注意事项
  5. 5.其他设备选项
  6. 6.附录:Read.py

 

程序

1. 设计电路

我一直喜欢使用开源的原理图绘制和PCB布线软件Fritzing来制作接线图(图1:执行器为LED的电路原理图)。您可以通过以下链接(可选)下载Fritzing: http://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”。现在选择“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,再次运行脚本。现在,当你将卡放在读卡器上时,验证通过且LED会亮5秒钟。如果将你的设计应用于狗门,那么在验证通过后电磁锁会打开。

图4:等待读卡

图5:验证通过
4. 制作狗门的注意事项

    如果要将该设计实现为一个狗门,那么你需要考虑其他一些设计技巧:

    1. 1. 添加第二个电磁锁,以保证两侧锁门。
    2. 2. 在门上添加一个霍尔效应(磁传感器)传感器和一块磁铁,以便让Raspberry Pi在锁门之前知道门已返回到关闭位置。
    3. 3. 如果你真的很有想法,那么可以围绕门设计较大的环形天线,代替在门上安装小型读卡器。你需要电磁线,而且需要将其焊接到读取模块上。这需要资深技巧,有关环形天线的信息请在这里阅读。
    4. 4. 如果你是资深程序员,那么可以阅读MFRC522 数据表,更改芯片组上的固件,更好地满足自己的应用要求。

 

5. 其他设备选项

    1. a.门锁
    2. b.安全锁
    3. c.支付设备
    4. d.运输跟踪/物流
    5. 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"

 

DevicePlus 编辑团队
DevicePlus 编辑团队

设备升级版适用于所有热爱电子和机电一体化的人。

分享到社交媒体