arduino rc522模块使用
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
rfid IC卡
先了解IC卡一些前置知识。
首先我们会有一张ic卡M1类型IC卡一般买到的都是1K存储空间在rc522代码中会出现这个就是对IC卡进行检查PICC_TYPE_MIFARE_4K
和PICC_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操作状态码
卡片密钥可以自行搜索
//准备卡片密钥AB
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