arduino rc522模块使用

rfid IC卡

先了解IC卡一些前置知识。

首先我们会有一张ic卡(M1类型IC卡,一般买到的都是1K存储空间),在rc522代码中会出现这个,就是对IC卡进行检查PICC_TYPE_MIFARE_4KPICC_TYPE_MIFARE_1K就是一种卡片类型不同大小

    //检查兼容性
    if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K)
    {
        Serial.println("无效卡!");
        return;
    }

RC522模块就是阅读器天线以及处理器和寄存器,这些不是写代码关注的重点。

在使用arduinoIDE+esp32 的MFrc522库中,尽管他没有写支持esp32,但是在MFrc522 V2库中SPI的连线可以作用在MFrc522中

SPI的连线是根据ESP32引脚功能来设置的,但是有文章说可以通过SPI来自己自定义设置(库作者没有提供定义的功能),读者可以自行设置

IC卡内部空间

在这里插入图片描述

一个ic的存储结构就是上面的样子,而我们在读取ic卡会选取一个扇区,这个扇区中设置的密钥可以用于ic卡的验证,而ic卡总共有16个,这样可以为一个IC卡提供多个功能,实现一卡多用

同时每个扇区还有其他存储尚未使用,这些存储区可以为IC卡功能分类提供有利的标识,以及权限的标识

读取扇区代码分析

1.读取指定扇区的内容

status = (MFRC522::StatusCode)mfrc522.MIFARE_Read(blockAddr, buffer, &size);

三个参数:1.blockAddr,要读取扇区号
2.buffer,自行设置缓冲区(将IC卡扇区中读取的数据放入的地方)
3.size,读取数据大小

返回值:status,操作状态码,判断条件可以看内容3

2.将内容写入扇区

status = mfrc522.MIFARE_Write(blockAddr, buffer, 16);

三个参数:1.blockAddr,要写入扇区号
2.buffer,自行设置缓冲区
3.size,读取数据大小
返回值:status,操作状态码,判断条件可以看内容3

3.判断写入或者读取操作是否成功

if (status != MFRC522::STATUS_OK)
    {
        Serial.print("写入失败:");
        Serial.println(mfrc522.GetStatusCodeName(status)); //打印错误码
        return;
    } 

4.用密钥进行卡片验证

    status= (MFRC522::StatusCode)mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, blockAddr, &keyA, &(mfrc522.uid)); 

三个参数:1.PICC_CMD_MF_AUTH_KEY_A,使用密钥A位置进行验证
2.blockAddr,扇区号
3.keyA,密钥A
4.mfrc522.uid,uid号UID是用户身份证明(User Identification)的缩写,是每一个卡片的唯一有效识别编码。

返回值:status,操作状态码

卡片密钥(可以自行搜索):

//准备卡片密钥A,B
MFRC522::MIFARE_Key keyA;
MFRC522::MIFARE_Key keyB;

byte KEYA[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; //密钥A
byte KEYB[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; //密钥B 

如果这个扇区没有经过密钥的解锁是没办法读取的,有兴趣的可以了解一下IC卡的破译(比如说水卡,一些门禁的验证)。

大致上面的函数就能完成我们的基本的需求了,一些功能的完成,使用这三个函数就足够了

整体代码以及其他内容,可以参考这个作者的其他文章,他的内容比较详细一点

会飞的豹豹豹 https://www.bilibili.com/read/cv18457914?spm_id_from=…0.0
出处:bilibili

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值