如何在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
相关产品推荐
相关产品推荐

