2.2.7 MFRC522 RFIDモジュール

前書き

無線周波数識別(RFID)は、オブジェクト(またはタグ)と質問デバイス(またはリーダー)の間の無線通信を使用して、そのようなオブジェクトを自動的に追跡したり識別したりする技術を指す。

この技術の最も一般的なアプリケーションには、小売サプライチェーン、軍事サプライチェーン、自動決済方法、荷物の追跡と管理、ドキュメントの追跡と医薬品管理などが含まれておる。

このプロジェクトでは、読み取りと書き込みにRFIDを使用する。

部品

_images/list_2.2.7.png

原理

RFID

無線周波数識別(RFID)は、オブジェクト(またはタグ)と質問デバイス(またはリーダー)の間の無線通信を使用して、そのようなオブジェクトを自動的に追跡したり識別したりする技術を指す。タグの送信範囲はリーダーから数メートルに制限されている。リーダーとタグの間の明確な見通し線は必ずしも必要ではない。

ほとんどのタグには、少なくとも1つの集積回路(IC)とアンテナが含まれている。マイクロチップは情報を保存し、リーダーとの無線周波数(RF)通信を管理する。パッシブタグは独立したエネルギー源を持たず、リーダーによって提供される外部電磁信号に依存して動作する。しかしアクティブタグバッテリーなどの独立したエネルギー源が含まれている。したがって、処理、送信機能と範囲が拡大している可能性がある。

_images/image230.png

MFRC522

MFRC522は、読み取りと書き込みカードチップの一種である。通常、13.56MHzの無線で使用される。NXP Companyによって発売された低電圧、低コスト、小型の非接触カードチップであり、インテリジェント機器と持ち転びやすい手持ちデバイスの最良の選択である。

MF RC522はすべてのタイプの13.56MHzパッシブ非接触通信方法とプロトコルで完全に開示された高度な変調と復調の概念を使用している。さらに、MIFARE製品を検証するための高速CRYPTO1暗号化アルゴリズムをサポートしている。MFRC522は最大424kbit/sの双方向データ伝送速度で、MIFAREシリーズの高速非接触通信もサポートしている。13.56MHz高集積リーダーカードシリーズの新しいメンバーとして、MF RC522は既存のMF RC500とMF RC530と非常に似ているが、多くの違いがある。配線が少ないシリアル方式でホストマシンと通信する。SPI、I2C、とシリアルUARTモード(RS232に類似)から選択できる。これにより、接続の削減、PCBボードスペースの節約(サイズの縮小)、およびコストの削減に役立つ。

回路図

_images/image331.png

実験手順

ステップ1: 回路を作る。

_images/image232.png

ステップ2: SPIを設定します(詳細については、付録 を参照してください。SPIを設定している場合は、このステップをスキップしてください。)

C言語ユーザー向け

ステップ3: コードのフォルダーに入る。

cd /home/pi/davinci-kit-for-raspberry-pi/c/2.2.7/

ステップ4: コードをコンパイルする。

make read
make write

注釈

カードIDの読み取りまたは書き込みには二つの例があり、必要に応じていずれかを選択できる。

ステップ5: EXEファイルを実行する。

sudo ./read
sudo ./write

注釈

If it does not work after running, or there is an error prompt: "wiringPi.h: No such file or directory", please refer to Cコードが機能していませんか?.

コードの説明

InitRc522();

この関数はRFID RC522モジュールを初期化するために使用される。

uint8_t read_card_data();

この関数はカードのデータを読み取るために使用され、読み取りが成功すると「1」が返されます。

uint8_t write_card_data(uint8_t *data);

この関数はカードのデータを書き込むために使用され、書き込みが成功すると「1」を返します。 * dataは、カードに書き込まれる情報です。

Python言語ユーザー向け

Step 2: Install the libraries.

The spidev library helps handle interactions with the SPI and is a key component to this tutorial as we need it for the Raspberry Pi to interact with the RFID RC522.

Run the following command to install spidev to your Raspberry Pi via pip.

sudo pip3 install spidev

Continue to install the MFRC522 library. The MFRC522 library contains two files: MFRC522.py and SimpleMFRC522.py.

Among them MFRC522.py is the realization of RFID RC522 interface, this library handles all the heavy work of communicating with RFID through Pi's SPI interface.

SimpleMFRC522.py takes the MFRC522.py file and greatly simplifies it by allowing you to deal with only a few functions instead of a few functions.

sudo pip3 install mfrc522

ステップ3: コードのフォルダーに入る。

cd /home/pi/davinci-kit-for-raspberry-pi/python/2.2.7

ステップ4: EXEファイルを実行する。

sudo python3 2.2.7_read.py
sudo python3 2.2.7_write.py

注釈

  • After running 2.2.7_read.py, it will print the id and text of your card in the shell.

  • After running 2.2.7_write.py, you need to write a message first, press Enter to confirm, and finally put your card on the MFRC522 RFID module to finish writing.

コード

注釈

以下のコードを 変更/リセット/コピー/実行/停止 できます。 ただし、その前に、 davinci-kit-for-raspberry-pi/python のようなソースコードパスに移動する必要があります。

# read
import time
from mfrc522 import SimpleMFRC522
import RPi.GPIO as GPIO

reader = SimpleMFRC522()

def main():
    while True:
        print("Reading...Please place the card...")
        id, text = reader.read()
        print("ID: %s\nText: %s" % (id,text))
        time.sleep(3)

def destroy():
    GPIO.cleanup()

if __name__ == '__main__':
    try:
        main()
    # When 'Ctrl+C' is pressed, the program destroy() will be  executed.
    except KeyboardInterrupt:
        destroy()
# write
from mfrc522 import SimpleMFRC522
import RPi.GPIO as GPIO

reader = SimpleMFRC522()

def main():
    while True:
        text = input('Please write new data:')
        print("Please place the card to complete writing")
        reader.write(text)
        print("Data writing is complete")

def destroy():
    GPIO.cleanup()

if __name__ == '__main__':
    try:
        main()
    # When 'Ctrl+C' is pressed, the program destroy() will be  executed.
    except KeyboardInterrupt:
        destroy()

コードの説明

reader = SimpleMFRC522()

SimpleMFRC522() クラスをインスタンス化します。

reader.read()

この機能は、カードデータを読み取るために使用されます。 読み取りが成功すると、IDとテキストが返されます。

reader.write(text)

この機能は、カードに情報を書き込むために使用されます。「Enter」キーを押して書き込みを終了します。 `` text``は、カードに書き込まれる情報です。

現象画像

_images/image233.jpeg