Lire badge RFID

在Raspberry Pi上使用RFID阅读器。

更新 11 7月 2019 - 0 注释 - , , ,

ⓘ 本文可能已使用自动工具部分或全部翻译。对于由此可能引起的任何错误,我们深表歉意。

本教程是致力于使用Raspberry Pi发现电子产品的文件的第二部分。如果您还没有阅读它,我建议您参考第一个教程来使用Raspberry Pi控制LED

无论是用于识别系统,库存管理,支付还是用于家庭自动化,RFID芯片的使用越来越多。

在本教程中,我们将看到如何使用Raspberry Pi和RC522 RFID读取器读取RFID卡。

在本教程的最后,您将能够读取RFID徽章,检查其是否符合预期,并根据结果点亮绿色或红色LED。您所要做的就是将这个基本示例修改为您选择的项目!

必要的设备

要完成本教程,您将需要以下材料:

组装RC522 RFID阅读器

收到RC522 RFID模块时,您会看到它带有一组2 x 8引脚。因此,第一步将是将这些引脚中的8个引脚焊接到RFID阅读器上。不要惊慌,焊接非常容易!

因此,您必须将PIN插入RFID卡上提供的插槽中,并用烙铁焊接。

焊接式RC522 RFID模块
您可能会发现笔直和弯曲的连接器。我建议您使用弯曲的,比较实用。

如果您从未焊接过,我建议您从framboise314.fr网站上向弗朗索瓦学习如何进行焊接的出色指南

将RFID阅读器和LED连接到Raspberry Pi

在继续编写允许我们读取RFID徽章和控制LED的代码之前,我们必须首先将所有组件连接到Raspberry Pi。

提醒一下,插入和拔出组件必须始终在Raspberry Pi关闭的情况下进行。

将RC522 RFID阅读器连接到Raspberry Pi

我们要插入的第一个组件是RFID阅读器。

为了控制RFID阅读器,我们将使用一个外部库。不幸的是,这是使用直接在代码中输入的GPIO端口编写的。这意味着我们不能对它们进行不同的配置,因此我们被迫使用与库中提供的端口完全相同的端口。

下表列出了您需要将Raspberry Pi连接到的读取器端口和GPIO端口。

匹配的GPIO端口/ RC522端口
将RC522的端口连接到Raspberry Pi上的相应端口。

提醒一下,您将在本系列的第一个教程中找到Raspberry Pi的GPIO端口的映射。

连接LED

在RFID阅读器之后,让我们将LED连接到Raspberry Pi。

我们将进行非常简单的组装。每个LED的阳极(加长的支脚)将连接到GPIO端口,两个LED的阳极将连接到相同的电阻,电阻本身连接到Raspberry Pi的GPIO接地类型端口。

因此,我们为两个LED使用单个电阻,并且限制了电缆的数量。

最后,将RFID卡和LED连接到Pi后,您应该具有与之相似的组件。

请注意,您也可以将RC522直接连接到Raspberry Pi,而无需使用面包。

编写程序以读取RFID徽章。

我们有一个功能电路,我们只需要激活Raspberry Pi的SPI端口,这对于使用RFID读取器是必需的,并编写将读取RFID徽章的程序。

与上一教程一样,该程序将用Python编写。本教程不是Python课程,我们将仅简要介绍该程序。如果您想了解有关Python的更多信息,我们已经发布了Python入门编程课程。

激活Raspberry Pi的SPI协议

在编写程序之前,让我们在Raspberry Pi上启用SPI协议,以便我们可以使用RFID模块。

要激活它,只需运行命令 sudo raspi-config,在您的Raspberry上,然后选择 Interfacing OptionsSPIYes 最后 Finish

安装pi-rc522库

最后一个前提条件,我们将安装Python3“ pi-rc522”库,该库可让您控制RC522播放器。

我们将使用Python的库管理器Pip3。

您只需要运行以下命令:

sudo pip3 install pi-rc522

编写程序以读取RFID徽章的标识符

每个RFID徽章都有一个唯一的标识符。通过读取此标识符并将其与授权标识符的列表进行比较,我们可以知道徽章是否被授权。

因此,我们将编写一个程序,使我们能够读取RFID徽章的唯一标识符。

与上一教程中一样,我们将在文件夹中编写程序 /home/pi/electronic (如果尚未创建该文件夹)。

在此文件夹中,创建一个文件 read_rfid_uid.py 并在其中添加以下代码:

#!/usr/bin/env python3.5
#-- coding: utf-8 --

import RPi.GPIO as GPIO #Importe la bibliothèque pour contrôler les GPIOs
from pirc522 import RFID
import time


GPIO.setmode(GPIO.BOARD) #Définit le mode de numérotation (Board)
GPIO.setwarnings(False) #On désactive les messages d'alerte

rc522 = RFID() #On instancie la lib

print('En attente d'un badge (pour quitter, Ctrl + c): ') #On affiche un message demandant à l'utilisateur de passer son badge

#On va faire une boucle infinie pour lire en boucle
while True :
    rc522.wait_for_tag() #On attnd qu'une puce RFID passe à portée
    (error, tag_type) = rc522.request() #Quand une puce a été lue, on récupère ses infos

    if not error : #Si on a pas d'erreur
        (error, uid) = rc522.anticoll() #On nettoie les possibles collisions, ça arrive si plusieurs cartes passent en même temps

        if not error : #Si on a réussi à nettoyer
            print('Vous avez passé le badge avec l'id : {}'.format(uid)) #On affiche l'identifiant unique du badge RFID
            time.sleep(1) #On attend 1 seconde pour ne pas lire le tag des centaines de fois en quelques milli-secondes

保存文件后,可以使用以下命令授权执行该文件:

sudo chmod +x /home/pi/electronic/read_rfid_uid.py

现在,我们可以使用以下命令来启动该程序:

/home/pi/electronic/read_rfid_uid.py

每次您在阅读器前通过RFID徽章时,都会显示其唯一标识符!

编写一个程序,显示徽章是否有效。

现在我们可以读取徽章的唯一标识符,我们要做的就是修改前面的代码,以将读取的标识符与编写在程序中的标识符进行比较。

因此,我们将略微修改先前的程序,以便将读取的uid与程序中写入的uid进行比较,并根据结果点亮红色或绿色的led。

将以前的文件复制到新文件 verify_rfid.py 并针对以下代码进行修改:

编辑线 RFID_UID 放入您的RFID标签的标识符!

#!/usr/bin/env python3.5
#-- coding: utf-8 --

import RPi.GPIO as GPIO #Importe la bibliothèque pour contrôler les GPIOs
from pirc522 import RFID
import time


GPIO.setmode(GPIO.BOARD) #Définit le mode de numérotation (Board)
GPIO.setwarnings(False) #On désactive les messages d'alerte

LED_RED = 3 #Définit le numéro du port GPIO qui alimente la led rouge
LED_GREEN = 5 #Définit le numéro du port GPIO qui alimente la led verte
RFID_UID = [21, 35, 5, 43, 57] #Définit l'UID du badge RFID

#Définit la fonction permettant d'allumer une led
def turn_led_on (led) :
    GPIO.setup(led, GPIO.OUT) #Active le contrôle du GPIO
    GPIO.output(led, GPIO.HIGH) #Allume la led

#Définit la fonction permettant d'éteindre une led
def turn_led_off (led) :
    GPIO.setup(led, GPIO.OUT) #Active le contrôle du GPIO
    GPIO.output(led, GPIO.LOW) #Eteind la led

#Définit la fonction permettant d'allumer la rouge et éteindre la verte
def turn_red_on () :
    turn_led_off(LED_GREEN) #Eteind la led verte
    turn_led_on(LED_RED) #Allume la led rouge

#Définit la fonction permettant d'allumer la verte et éteindre la rouge
def turn_green_on () :
    turn_led_off(LED_RED) #Eteind la led rouge
    turn_led_on(LED_GREEN) #Allume la led verte


rc522 = RFID() #On instancie la lib

print('En attente d'un badge (pour quitter, Ctrl + c): ') #On affiche un message demandant à l'utilisateur de passer son badge

#On va faire une boucle infinie pour lire en boucle
while True :
    rc522.wait_for_tag() #On attnd qu'une puce RFID passe à portée
    (error, tag_type) = rc522.request() #Quand une puce a été lue, on récupère ses infos

    if not error : #Si on a pas d'erreur
        (error, uid) = rc522.anticoll() #On nettoie les possibles collisions, ça arrive si plusieurs cartes passent en même temps

        if not error : #Si on a réussi à nettoyer
            if RFID_UID == uid :
                print('Badge {} autorisé !'.format(uid))
                turn_green_on()
            else :
                print('Badge {} interdit !'.format(uid))
                turn_red_on()

            time.sleep(1) #On attend 1 seconde pour ne pas lire le tag des centaines de fois en quelques milli-secondes

您所要做的就是启动程序并进行测试!

然后,您可以将代码修改为自己的项目,例如创建智能锁,甚至使用RFID标签创建自动点唱机!

有关信息,您可以在Raspbian France的Github上获得本教程的所有代码。

在下一个教程中,我们将看到如何使用Raspberry Pi控制伺服电机!

分享
通讯
作者:
Raspberry Pi FR
加入Raspberry Pi社区
一台售价35美元的计算机已经售出了1000万本
购买新的RASPBERRY PI 4
相关教程
使用Raspberry Pi和Python打开和关闭LED。 激活Raspberry Pi的TTL串行端口,并验证其是否正常运行。 使用码头沼泽创建树莓派群集 闪烁Raspberry Pi的板载绿色LED。 学习使用Python 3和Raspberry Pi进行编程的入门课程。
没有评论
分享
订阅电子报
订阅新闻通讯。
你喜欢这篇文章吗 ?
订阅并保持最新状态!