Используйте считыватель RFID с Raspberry Pi.
Комментарииⓘ 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.
Будь то системы идентификации, управления запасами, оплаты или домашней автоматизации, чипы RFID используются все чаще и чаще.
В этом руководстве мы увидим, как читать карты RFID с помощью Raspberry Pi и считывателя RFID RC522.
В конце руководства вы сможете прочитать значок RFID, проверить, соответствует ли он ожидаемому, и зажечь зеленый или красный светодиод, в зависимости от результата. Все, что вам нужно сделать, это адаптировать этот базовый пример для проекта по вашему выбору!
Необходимое оборудование
Для выполнения этого урока вам потребуются следующие материалы:
- Raspberry Pi
- Его диета
- Карта MicroSD
- Считыватель RFID RC522
- Комплект кабелей, светодиодов, резисторов и тестовых пластин
- Паяльник и припой
Соберите RFID-считыватель RC522
Когда вы получаете RFID-модуль RC522, вы можете видеть, что он поставляется с набором 2 x 8 контактов. Поэтому первым делом нужно припаять 8 из этих контактов к считывателю RFID. Не паникуйте, паять очень просто!
Поэтому вы должны вставить PIN-коды в гнезда на RFID-карте и припаять их своим утюгом.
Если вы никогда не занимались сваркой, я рекомендую это отличное руководство по сварке от François на сайте framboise314.fr.
Подключите RFID-считыватель и светодиоды к Raspberry Pi
Прежде чем перейти к написанию кода, который позволит нам считывать значки RFID и управлять светодиодами, мы должны сначала подключить все компоненты к Raspberry Pi.
Напоминаем, что подключение и отключение компонентов всегда должно выполняться при выключенном Raspberry Pi.
Подключите RFID-считыватель RC522 к Raspberry Pi
Первый компонент, который мы собираемся подключить, — это считыватель RFID.
Для управления считывателем RFID мы будем использовать внешнюю библиотеку. К сожалению, это написано с портами GPIO, непосредственно введенными в код. Это означает, что мы не можем настроить их по-другому и поэтому мы вынуждены использовать точно такие же порты, как те, которые предоставлены в библиотеке.
Вот таблица, в которой перечислены порты считывателя и порт GPIO Raspberry Pi, к которому вам нужно будет его подключить.
Напоминаем, что вы найдете карту портов GPIO Raspberry Pi в первом руководстве этой серии.
Подключите светодиоды
После считывателя RFID подключим светодиоды к Raspberry Pi.
Мы собираемся сделать очень простую сборку. Каждый светодиод будет иметь свой анод (удлиненную ножку), подключенный к порту GPIO, а два светодиода будут иметь свой анод, подключенный к одному и тому же резистору, который сам подключен к порту типа заземления GPIO Raspberry Pi.
Таким образом, мы используем один резистор для двух светодиодов и ограничиваем количество кабелей.
В конце концов, как только RFID-карта и светодиоды подключены к Pi, у вас должна получиться сборка, похожая на эту.
Напишите программу для считывания значка RFID.
У нас есть функциональная схема, нам просто нужно активировать порты SPI Raspberry Pi, необходимые для использования считывателя RFID, и написать программу, которая будет считывать значок RFID.
Как и в предыдущем руководстве, программа будет написана на Python. Это руководство не является курсом Python, и мы лишь кратко объясним программу. Если вы хотите узнать больше о Python, мы опубликовали вводный курс программирования с помощью Python.
Активируйте протокол SPI Raspberry Pi
Перед написанием программы давайте включим протокол SPI на нашем Raspberry Pi, чтобы мы могли использовать модуль RFID.
Чтобы активировать его, просто запустите команду sudo raspi-config
, на Raspberry, затем выберите Interfacing Options
, SPI
, Yes
и наконец Finish
.
Установите библиотеку pi-rc522
Последнее предварительное условие: мы собираемся установить библиотеку Python3 «pi-rc522», которая позволяет вам управлять плеером RC522.
Мы будем использовать Pip3, менеджер библиотек для Python.
Вам просто нужно запустить команду:
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 с записанным в программе и зажигала красный или зеленый светодиод в зависимости от результата.
Скопируйте предыдущий файл в новый файл 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-меток!
Для информации вы можете получить весь код этого руководства на Github Raspbian France.
В следующем уроке мы увидим, как управлять серводвигателем с помощью Raspberry Pi!