注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!

RFID-RC522モジュール

概要

このレッスンでは、RFIDモジュールの使用方法を学びます。RFIDはRadio Frequency Identificationの略で、その原理はリーダーとラベル間の非接触データ通信によってターゲットを識別することにあります。RFIDの応用範囲は広く、動物チップ、イモビライザー、アクセスコントロール、駐車場管理、生産チェーンの自動化、資材管理などが含まれます。

必要なコンポーネント

このプロジェクトでは、以下のコンポーネントが必要です。

全体のキットを購入すると便利です。以下がリンクです:

名称

このキットのアイテム数

リンク

Elite Explorer Kit

300+

Elite Explorer Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

Arduino Uno R4 WiFi

-

ジャンパーワイヤー

購入

MFRC522モジュール

購入

配線図

この例では、RFIDをブレッドボードに挿入します。RFIDの3.3Vを3.3Vに、GNDをGNDに、RSTをピン2に、SDAをピン6に、SCKをピン5に、MOSIをピン4に、MISOをピン3に、IRQをピン7に接続します。

../_images/08-rfid_bb.png

回路図

../_images/08_mfrc522_schematic.png

コード

注釈

  • elite-explorer-kit-main\basic_project\08-mfrc522 のパスの下にあるファイル 08-mfrc522.ino を直接開くことができます。

  • ここでは RFID1 ライブラリが使用されています。このライブラリは elite-explorer-kit-main/library/ ディレクトリにありますが、こちら RFID1.zip からダウンロードすることもできます。インストール方法については 手動インストール を参照してください。

08-mfrc522.ino
 1/*
 2  The code is designed for an Arduino system to interface with an RFID-RC522 Module 
 3  using the "RFID1" library. It initializes the RFID module and continuously scans for 
 4  RFID cards. When a card is detected, the code prints the card type and its 4-byte 
 5  serial number to the serial monitor.
 6  
 7  Board: Arduino Uno R4
 8  Component: RFID-RC522 Module
 9*/
10
11#include "rfid1.h"  // Include RFID1 library
12RFID1 rfid;         // Create an instance of the RFID1 class
13
14void setup() {
15  Serial.begin(9600);  // Initialize serial communication at 9600 baud
16  // Initialize the RFID reader with pin configuration
17  rfid.begin(7, 5, 4, 3, 6, 2);  // IRQ_PIN, SCK_PIN, MOSI_PIN, MISO_PIN, SDA_PIN, RST_PIN
18  delay(100);                    // Delay for 100 milliseconds
19  rfid.init();                   // Initialize the RFID module
20}
21
22void loop() {
23  uchar status;        // Status variable to hold the state of RFID functions
24  uchar str[MAX_LEN];  // Create an array to hold the RFID card data; maximum length is 16
25
26  // Search for an RFID card and get its type
27  status = rfid.request(PICC_REQIDL, str);
28  if (status != MI_OK) {
29    return;  // If no card is found, return to the beginning of loop()
30  }
31  Serial.print("Card type: ");
32  Serial.println(rfid.readCardType(str));  // Print the card type to the serial monitor
33
34  // Prevent RFID card collision and get the 4-byte serial number of the card
35  status = rfid.anticoll(str);
36  if (status == MI_OK) {
37    Serial.print("The card's number is: ");
38    int IDlen = 4;  // Length of the card's serial number
39    for (int i = 0; i < IDlen; i++) {
40      Serial.print(str[i], HEX);  // Print each byte of the card's serial number
41    }
42    Serial.println();
43    Serial.println();  // Print an empty line for better readability
44  }
45
46  delay(500);   // Delay for 500 milliseconds
47  rfid.halt();  // Put the card into sleep mode
48}

unoボードにコードをアップロードすると、RFIDカード(秘密の鍵)をRFIDリーダーに近づけることができます。モジュールはカード情報を読み取り、シリアルモニターに表示します。

コード解析

このモジュールの機能は rfid1.h というライブラリに含まれています。

#include <rfid1.h>

ライブラリの関数:

RFID1 rfid;

Arduinoに接続された特定のRFIDモジュールを表すrfid1クラスの新しいインスタンスを作成します。

void begin(IRQ_PIN,SCK_PIN,MOSI_PIN,MISO_PIN,SDA_PIN,RST_PIN)

ピンの設定です。

  • IRQ_PIN,SCK_PIN,MOSI_PIN,MISO_PIN: SPI通信に使用されるピン。

  • SDA_PIN: 同期データアダプター。

  • RST_PIN: リセットに使用されるピン。

void init()

RFIDを初期化します。

uchar request(uchar reqMode, uchar *TagType);

カードを検索し、カードタイプを読み取ります。この関数はRFIDの現在の読み取り状態を返し、成功した場合はMI_OKを返します。

  • reqMode: 検索方法。PICC_REQIDLは0x26コマンドビットを定義しています(アンテナエリア内のスリープモードでないカードを検索します)。

  • *TagType: カードタイプを格納するために使用され、4バイトの値が可能です(例: 0x0400)。

char * readCardType(uchar *TagType)

この関数は *tagType の4桁の16進数を特定のカードタイプにデコードし、文字列を返します。0x0400を渡した場合は「MFOne-S50」が返されます。

uchar anticoll(uchar *serNum);

衝突を防ぎ、カードのシリアル番号を読み取ります。この関数はRFIDの現在の読み取り状態を返し、成功した場合はMI_OKを返します。

  • *serNum: カードシリアル番号を格納するために使用され、4バイトのカードシリアル番号を返します。5番目のバイトは再チェックバイトです(例: 私の磁気カードIDは5AE4C955)。