Lire badge RFID

Raspberry PiでRFIDリーダーを使用します。

更新しました 11 7月 2019 - 0 コメント - , , ,

ⓘ この記事は、自動ツールを使用して部分的または完全に翻訳されている場合があります。エラーが発生する可能性があることをお詫び申し上げます。

このチュートリアルは、Raspberry Piで電子機器を発見するためのファイルの2番目の部分です。まだ読んでいない場合は、Raspberry PiでLEDを制御するための最初のチュートリアルを参照することをお勧めします

識別システム、在庫管理、支払い、またはホームオートメーションのいずれであっても、RFIDチップはますます使用されています。

このチュートリアルでは、Raspberry PiとRC522 RFIDリーダーでRFIDカードを読み取る方法を説明します。

チュートリアルの最後に、RFIDバッジを読み取り、それが期待どおりのものかどうかを確認し、結果に応じて緑または赤のLEDを点灯させることができます。あなたがしなければならないすべてはあなたの選んだプロジェクトにこの基本的な例を適合させることです!

必要な装備

このチュートリアルを完了するには、次の資料が必要です。

RC522 RFIDリーダーを組み立てる

RC522 RFIDモジュールを受け取ると、2 x 8ピンのセットが付属していることがわかります。したがって、最初のステップは、これらのピンのうち8つをRFIDリーダーにはんだ付けすることです。パニックにならないでください、はんだ付けはとても簡単です!

したがって、RFIDカードにあるスロットにPINを挿入し、アイロンではんだ付けする必要があります。

溶接RC522 RFIDモジュール
直線と曲線のコネクタが見つかるでしょう。より実用的な曲線を使用することをお勧めします。

一度も溶接したことがない場合は、この優れたガイドを参考にして、framboise314.frのFrançoisから溶接する方法を学んでください

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ポートに接続され、2つのLEDのアノードは同じ抵抗に接続され、それ自体がRaspberry PiのGroundタイプのGPIOポートに接続されます。

したがって、2つのLEDに1つの抵抗を使用し、ケーブルの数を制限します。

最後に、RFIDカードとLEDがPiに接続されると、これに似たアセンブリができます。

ブレッドボードを使用せずに、RC522をRaspberry Piに直接接続することもできます。

RFIDバッジを読み取るプログラムを作成します。

機能回路があり、RFIDリーダーを使用するために必要なRaspberry PiのSPIポートをアクティブ化し、RFIDバッジを読み取るプログラムを記述するだけです。

前のチュートリアルと同様に、プログラムはPythonで作成されます。このチュートリアルはPythonコースではありません。プログラムについて簡単に説明します。Pythonの詳細については、Python入門プログラミングコースをご覧ください。

Raspberry PiのSPIプロトコルをアクティブ化する

プログラムを作成する前に、Raspberry PiでSPIプロトコルを有効にして、RFIDモジュールを使用できるようにします。

それをアクティブにするには、コマンドを実行するだけです sudo raspi-config、ラズベリーで、次に選択します Interfacing OptionsSPIYes そして最後に Finish

pi-rc522ライブラリをインストールする

最後の前提条件として、RC522プレーヤーを制御できるPython3 "pi-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タグのIDを入力します!

#!/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を使用したプログラミングの入門コースを学びます。
コメントはまだありません
共有
ニュースレターのサインアップ
ニュースレターを購読します。
この記事は気に入りましたか?
購読して最新情報を入手してください!