pdf-icon

Arduino入門

2. デバイス&サンプル

6. アプリケーション

Unit RFID-UHF Arduino チュートリアル

1. 準備作業

注意
GitHub から最新のライブラリバージョンをダウンロードする必要があります。ライブラリアドレス: M5Unit-UHF-RFID - M5Stack GitHub。Arduino Libraryからはダウンロードしないでください。(質問がある場合は、このチュートリアルを参照してください)

2. 注意事項

タグ認識
テスト用に RFID タグがパッケージに同梱されています。他のタグを使用する必要がある場合、EPCglobal UHF Class 1 Gen 2 または ISO 18000-6C プロトコルを持つタグを見つけるだけで結構です。
ピン互換性
ホストデバイスごとにピン配置が異なりますので、必ず製品ドキュメントのピン互換性表を参照の上、実際の接続状況に合わせてサンプルプログラムを修正してください。

3. サンプルプログラム

  • 本チュートリアルで使用するメインコントロールデバイスは CoreS3 で、Unit RFID-UHF と組み合わせて使用します。この RFID リーダー/ライターモジュールはシリアル通信方式を採用しています。実際の回路接続に応じてプログラム内のピン定義を修正し、デバイス接続後の対応するシリアル IO はG1 (RX)G2 (TX)です。
cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
/*
 * SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 *
 * SPDX-License-Identifier: MIT
 */

#include <M5Unified.h>
#include <M5GFX.h>
#include "UNIT_UHF_RFID.h"

M5GFX display;
Unit_UHF_RFID uhf;
String info = "";

void setup() {
    M5.begin();
    Serial.begin(115200);
    uhf.begin(&Serial2, 115200, 1, 2, false);
    while (1) {
        info = uhf.getVersion();
        if (info != "ERROR") {
            Serial.println(info);
            break;
        }
    }
    uhf.setTxPower(2600);
    M5.Display.fillRect(0, 0, 320, 240, WHITE);
    M5.Display.setTextColor(BLACK);
    M5.Display.setFont(&fonts::FreeMonoBold9pt7b);
    M5.Display.setCursor(0, 0);
    M5.Display.println("Unit RFID UHF init...");
}

uint8_t write_buffer[]  = {0xab, 0xcd, 0xef, 0xdd};
uint8_t reade_buffer[4] = {0};

void log(String info) {
    Serial.println(info);
    M5.Display.println(info);
}

void loop() {
        log("polling once");
        uint8_t result = uhf.pollingOnce();
        // result = pollingMultiple(uint16_t polling_count);  Can be scanned repeatedly multiple times.
        Serial.printf("scan result: %d\r\n", result);
        if (result > 0) {
            for (uint8_t i = 0; i < result; i++) {
                log("pc: " + uhf.cards[i].pc_str);
                log("rssi: " + uhf.cards[i].rssi_str);
                log("epc: " + uhf.cards[i].epc_str);
                log("-----------------");
                delay(10);
            }
        }
        delay(2000);
        M5.Display.fillScreen(WHITE);
        M5.Display.setCursor(0, 0);

        if (uhf.select(uhf.cards[0].epc)) {
            log("Select OK");
        } else {
            log("Select ERROR");
        }
        log("Current Select EPC:");
        log(uhf.selectInfo());
        delay(2000);
        M5.Display.fillScreen(WHITE);
        M5.Display.setCursor(0, 0);

        log("Write Data...");
        if (uhf.writeCard(write_buffer, sizeof(write_buffer), 0x04, 0, 0x00000000)) {
            log("Write OK");
        } else {
            log("Write ERROR");
        }
        delay(1000);
        log("Read Data...");
        if (uhf.readCard(reade_buffer, sizeof(reade_buffer), 0x04, 0, 0x00000000)) {
            log("Read OK");
            log("Data Content");
            for (uint8_t i = 0; i < sizeof(reade_buffer); i++) {
                Serial.printf("%x", reade_buffer[i]);
                M5.Display.printf("%x", reade_buffer[i]);
            }
        } else {
            log("Read ERROR");
        }
        delay(2000);
        M5.Display.fillScreen(WHITE);
        M5.Display.setCursor(0, 0);
}

4. コンパイルとアップロード

  • ダウンロードモード: プログラムを書き込む前に、デバイスによってはダウンロードモードに入る必要があります。この手順はメインコントロールデバイスによって異なる場合があります。詳細は、Arduino IDE入門チュートリアルページ下部のデバイスプログラムダウンロードチュートリアルリストを参照し、具体的な操作方法を確認してください。

  • CoreS3 の場合、リセットボタンを約 2 秒間長押しし、内部の緑色 LED が点灯したら離します。これでデバイスはダウンロードモードに入り、書き込みを待機します。

  • デバイスポートを選択し、Arduino IDE の左上にあるコンパイルとアップロードボタンをクリックします。プログラムのコンパイルが完了し、デバイスにアップロードされるのを待ちます。

5. タグ認識

  • プログラムはスキャン段階から始まります。スキャンが成功すると、RFID タグのプロトコル制御文字、受信した RFID タグの信号強度インジケータ、および RFID タグの電子製品コードが画面に表示されます。
  • 複数のタグがある場合、RFID モジュールは選択機能をサポートしています。選択が成功すると、そのタグの電子コードが表示されます。
  • RFID モジュールを使用して、タグの記憶領域に直接読み書きできます。書き込みが成功すると「Write OK」と表示され、読み取りが成功すると「Read OK」と表示され、新しく書き込まれたデータが出力されます。
On This Page