设计一个基于STM32和RFID Reader读取RFID卡的系统

RF/无线

1773人已加入

描述

在本教程中,我们将设计一个使用 STM32 和 RFID Reader读取 RFID 卡的系统。RFID代表射频识别,它通过使用无线电频率读取信息。RFID 用于许多身份验证系统,如电梯停车系统、自动收费、在医院维护患者信息、自动数据收集等。

所需组件

STM32F103C8(蓝色药丸板)

EM-18 RFID阅读器模块

射频识别卡

16x2 液晶显示模块

面包板

连接电线

在将 RFID 与 STM32 连接之前,首先我们将了解 RFID 标签和 RFID 阅读器。

射频识别标签

RFID标签由带有线圈天线的微芯片组成,可以与附近的阅读器进行无线通信。市场上有各种不同形状和尺寸的 RFID 标签。他们中很少有人使用不同的频率进行通信。我们将使用保存唯一 ID 数据的125Khz 无源 RFID 卡。

射频识别

当您将 RFID 标签放在强光前时,您可以观察标签内部存在的线圈和微芯片。

射频识别

基本上有两种类型的RFID标签:无源和有源

无源 RFID 标签从读取器模块(如 EM-18)产生的磁场中获取能量,并使用它为微芯片的电路供电。然后芯片将信息发送给阅读器。

EM-18 RFID阅读器

每张 RFID 卡都嵌入了唯一的 ID,RFID 阅读器用于读取 RFID 卡号。 EM-18 RFID 阅读器 工作频率为 125 KHz,带有片上天线,可以使用 5V 电源供电。它提供串行输出和weigand 输出。范围在8-12cm左右。串口通讯参数为9600bps,8个数据位,1个停止位。

EM-18 RFID 阅读器提供的输出为 12 位 ASCII 格式。在 12 位中,前 10 位是卡号,后两位是卡号的 XOR 结果。最后两位数字用于错误检查。

射频识别

例如,从读卡器读取的卡号为 0200107D0D62,则卡上的卡号如下所示。

02 – 序言

00107D0D = 1080589 十进制。

62 是 (02 XOR 00 XOR 10 XOR 7D XOR 0D) 的 XOR 值。

因此卡上的数字是 0001080589。

EM-18 的针脚细节

射频识别

EM-18 RFID 阅读器有九个引脚。九个引脚中,有两个引脚没有连接,所以我们基本上要考虑七个端子。下表显示了 EM-18 的引脚说明。

射频识别

EM-18 RFID 模块规格

读取距离:10cm

工作温度:0ºC 至 +80ºC

通讯参数:9600bps

电流消耗:《50mA

工作频率:125 kHz

工作电压:5v

电路图和连接

射频识别射频识别

STM32F103C8 和 16x2 LCD 之间的连接

射频识别

STM32F103C8 和 EM-18 读卡器模块之间的连接

射频识别

对 STM32F103C8 进行编程以读取 RFID
在我们之前的教程中,我们了解了 使用 USB 端口对 STM32F103C8T6 板进行编程 。所以我们现在不需要 FTDI 程序员。只需通过 STM32 的 USB 端口将其连接到 PC 并开始使用 ARDUINO IDE 进行编程。 在 ARDUINO IDE 中对 STM32 进行编程 以读取 RFID 标签非常简单

1.首先,包含LCD显示库,用于使用LCD显示功能。然后定义 LCD 引脚并初始化 LCD 显示。要了解有关LCD 与 STM32F103C8 接口的更多信息,请点击链接。

#include
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
2.接下来在void setup()

我们需要将LCD 显示模式设置为 16x2 并以 9600 的波特率与引脚 PA10 开始串行通信(这是与 EM-18 TX 引脚相连的 STM32F103C8 的 SERIAL1 通信端口 RX1。

lcd.begin(16, 2);
Serial1.开始(9600);
pinMode(PA10,输入);
3.接下来显示欢迎信息并在一段时间后清除。

lcd.print("电路文摘"); //在 LCD 显示屏上打印
lcd.setCursor(0, 1); //设置课程到第二行
lcd.print("RFID WITH STM32"); //以 LCD 显示
延迟打印(5000);//延迟5秒
lcd.clear(); //清除LCD显示
lcd.setCursor(0,0); //将光标设置在第一行
lcd.print("RFID TAG NO:"); //在 LCD 显示屏上打印
lcd.setCursor(0,1); //将光标设置在第二行
4.在void loop()

一旦来自 EM-18 RFID 阅读器模块(标签 ID)的数据在 STM32F103C8 的串行引脚上可用,字符就会被逐位存储并在 LCD 显示屏上逐个显示。

{
while(Serial1.available() && count < 12)
{

RFID[计数] = Serial1.read();
计数++;

lcd.print(RFID[计数]);

if (count==12)
{
lcd.print(" ");
计数 = 0;
lcd.setCursor(0, 1);
}
}
}

现在只需在 STM32 中上传完整的代码,您的系统就可以工作了。只需将任何 RFID 标签放在 RFID 阅读器上,您就会看到标签 ID 出现在 16x2 LCD 显示屏上。

射频识别

//连接EM-18 RFID阅读器模块与STM32F103C8

//电路文摘

#include //使用LCD显示函数的库

const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //提及与LCD连接到STM32F103C8的引脚名称

LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //初始化液晶显示器

整数计数 = 0;

字符 RFID[12];//存储12个字符ID的数组





无效设置()

{

lcd.begin(16, 2); // 设置 LCD 为 16x2 类型

Serial1.开始(9600);//以 9600 波特率开始串行通信

pinMode(PA10,输入);//将 PA10 设置为 EM-18 的输入引脚

lcd.print("电路文摘"); //在液晶显示器上打印

lcd.setCursor(0, 1); //设置课程到第二行

lcd.print("STM32 RFID"); //在液晶显示器上打印

延迟(5000);//延迟5秒

lcd.clear(); //清除液晶显示

lcd.setCursor(0,0); //设置光标在第一行

lcd.print("RFID标签号:"); //在液晶显示器上打印

lcd.setCursor(0,1); //将光标设置在第二行

}





无效循环()

{

while(Serial1.available() && count < 12) // While 循环读取 12 个字符并将它们存储在输入数组中

{

RFID[计数] = Serial1.read(); //一一存储12个字符

计数++;

lcd.print(RFID[计数]); //在LCD上一一显示12个字符



如果(计数==12)

{

lcd.print("");

计数 = 0; // 读取 12 个字符后开始等待第二个 ID

lcd.setCursor(0, 1); //移动课程开始。

}

}

}

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分