在Raspberry Pi上使用RFID阅读器。
注释ⓘ Cet article peut avoir été partiellement ou totalement traduit à l'aide d'outils automatiques. Nous nous excusons des erreurs que cela pourrait engendrer.
本教程是致力于使用Raspberry Pi发现电子产品的文件的第二部分。如果您还没有阅读它,我建议您参考第一个教程来使用Raspberry Pi控制LED。
无论是用于识别系统,库存管理,支付还是用于家庭自动化,RFID芯片的使用越来越多。
在本教程中,我们将看到如何使用Raspberry Pi和RC522 RFID读取器读取RFID卡。
在本教程的最后,您将能够读取RFID徽章,检查其是否符合预期,并根据结果点亮绿色或红色LED。您所要做的就是将这个基本示例修改为您选择的项目!
必要的设备
要完成本教程,您将需要以下材料:
组装RC522 RFID阅读器
收到RC522 RFID模块时,您会看到它带有一组2 x 8引脚。因此,第一步将是将这些引脚中的8个引脚焊接到RFID阅读器上。不要惊慌,焊接非常容易!
因此,您必须将PIN插入RFID卡上提供的插槽中,并用烙铁焊接。
如果您从未焊接过,我建议您从framboise314.fr网站上向弗朗索瓦学习如何进行焊接的出色指南。
将RFID阅读器和LED连接到Raspberry Pi
在继续编写允许我们读取RFID徽章和控制LED的代码之前,我们必须首先将所有组件连接到Raspberry Pi。
提醒一下,插入和拔出组件必须始终在Raspberry Pi关闭的情况下进行。
将RC522 RFID阅读器连接到Raspberry Pi
我们要插入的第一个组件是RFID阅读器。
为了控制RFID阅读器,我们将使用一个外部库。不幸的是,这是使用直接在代码中输入的GPIO端口编写的。这意味着我们不能对它们进行不同的配置,因此我们被迫使用与库中提供的端口完全相同的端口。
下表列出了您需要将Raspberry Pi连接到的读取器端口和GPIO端口。
提醒一下,您将在本系列的第一个教程中找到Raspberry Pi的GPIO端口的映射。
连接LED
在RFID阅读器之后,让我们将LED连接到Raspberry Pi。
我们将进行非常简单的组装。每个LED的阳极(加长的支脚)将连接到GPIO端口,两个LED的阳极将连接到相同的电阻,电阻本身连接到Raspberry Pi的GPIO接地类型端口。
因此,我们为两个LED使用单个电阻,并且限制了电缆的数量。
最后,将RFID卡和LED连接到Pi后,您应该具有与之相似的组件。
编写程序以读取RFID徽章。
我们有一个功能电路,我们只需要激活Raspberry Pi的SPI端口,这对于使用RFID读取器是必需的,并编写将读取RFID徽章的程序。
与上一教程一样,该程序将用Python编写。本教程不是Python课程,我们将仅简要介绍该程序。如果您想了解有关Python的更多信息,我们已经发布了Python入门编程课程。
激活Raspberry Pi的SPI协议
在编写程序之前,让我们在Raspberry Pi上启用SPI协议,以便我们可以使用RFID模块。
要激活它,只需运行命令 sudo raspi-config
,在您的Raspberry上,然后选择 Interfacing Options
,SPI
,Yes
最后 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控制伺服电机!