pdf-icon

Arduino 上手教程

2. 设备开发 & 案例程序

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。本射频读写模块采用串口的方式通讯,根据实际的电路连接修改程序中的引脚定义,设备连接后对应的串口 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