You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Arduino上读取RFID UID并在I2C接口16x2 LCD显示屏显示

修改方案

1. 硬件准备(默认使用最常用的I2C接口16x2 LCD,若用并行接口可自行调整对应逻辑)

  • 所需配件:I2C 16x2 LCD显示屏、杜邦线
  • 接线(以Arduino Uno为例):
    • LCD VCC → Arduino 5V
    • LCD GND → Arduino GND
    • LCD SDA → Arduino A4
    • LCD SCL → Arduino A5
  • RFID-RC522模块接线保持原有配置不变即可。

2. 库依赖

需要提前在Arduino IDE中安装LiquidCrystal_I2C库,用于驱动I2C接口的1602 LCD。

3. 修改后的完整代码

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>

#define RST_PIN         9          // 可根据实际接线调整
#define SS_PIN          10         // 可根据实际接线调整
#define LCD_ADDR        0x27       // 部分LCD地址为0x3F,若屏幕不亮可尝试切换该值

MFRC522 mfrc522(SS_PIN, RST_PIN);  // 创建MFRC522实例
LiquidCrystal_I2C lcd(LCD_ADDR, 16, 2); // 创建LCD实例,16列2行

void setup() {
    Serial.begin(9600);
    SPI.begin();
    mfrc522.PCD_Init();
    // 初始化LCD
    lcd.init();
    lcd.backlight();
    lcd.print("  等待刷卡...");
}

void loop() {
    // 检测是否有新卡
    if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;
    }
    // 读取卡序列号
    if ( ! mfrc522.PICC_ReadCardSerial()) {
        return;
    }

    // 清空LCD并显示UID
    lcd.clear();
    lcd.print("卡片UID:");
    lcd.setCursor(0, 1); // 移动到第二行开头
    // 遍历UID的4个字节,转十六进制显示
    for (byte i = 0; i < mfrc522.uid.size; i++) {
        if (mfrc522.uid.uidByte[i] < 0x10) {
            lcd.print("0"); // 不足两位补前导0
        }
        lcd.print(mfrc522.uid.uidByte[i], HEX);
        lcd.print(" "); // 字节之间加空格分隔
    }

    // 暂停2秒方便读取,同时使卡停止响应
    delay(2000);
    mfrc522.PICC_HaltA();
    // 回到待机提示
    lcd.clear();
    lcd.print("  等待刷卡...");
}

4. 常见问题排查

  • 若LCD无显示:先检查接线是否松动,再尝试将代码中LCD_ADDR的值改为0x3F
  • 若UID读取失败:检查RC522的SPI接线是否和定义的RST_PIN、SS_PIN一致,确认卡片在读取范围内

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:18:05