4

基于ESP32与RC522实现RFID刷卡开门

 1 year ago
source link: https://musenxi.com/archives/esp32-rc522.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

基于ESP32与RC522实现RFID刷卡开门

橘夜庭 • 2023 年 05 月 20 日 • 阅读: 40 • 杂铺,折腾

班级的小教室使用刷卡开门,但小教室的门禁学生卡没有录入故只有教师才能开门,所以想要到小教室自习十分不便。想到用舵机牵引,上网搜索发现已有案例分享但全网并没有找到单基于 ESP32 与 RC522 的简易方案,于是自己动手丰衣足食,遂出此文分享。

文中涉及到的设备以及环境是
ESP32-WROOM-32D 推荐 CH9102X 芯片,免驱
SG5010 舵机
ESP32 38Pin 拓展版 当然只是为了后续接线与固定在门上方便为主,不加或者使用面包板也可以
杜邦线
MFRC-522 射频模块
Arduino IDE

Arduino IDE 环境配置

首先去 IDE File-Preferences 首选项最后一行添加链接 https://ghproxy.com/https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
再到 Boards Manager 搜索 esp32 安装,可能会安装出错或者后续编译有莫名其妙的报错,换个版本安装一般能够解决。
这时可以基础编译适配 ESP32,但我们还有 MFRC-522 模块与舵机,所以需要添加库,在 library Manager 搜索 MFRC-522 安装即可,再搜索 ESP32Servo 安装即可。需要注意的是,单搜索 Servo 安装的库不能支持 ESP32,碰到下载 ESP32Servo 依旧报错的可以到 Github 上下下来再到 C:Users 用户名 AppDataLocalArduino15librariesServo 替换文件,Github 上的名称是 ESP32_Servo 需要将文件名以及文件内部所有类似名字替换为 Servo 即可。

串口引脚连接

RC522 引脚名称 ESP32 引脚名称
3.3V3V3
RST22
GNDGND
MISO19
MOSI23
SCK18
SDA/SS12
舵机引脚颜色 ESP32 引脚名称
橙色 13
红色 5V
棕色 GND

连接好引脚后就进入编写程序的环节。

//Libraries
#include <SPI.h>//https://www.arduino.cc/en/reference/SPI
#include <MFRC522.h>//https://github.com/miguelbalboa/rfid
#include <Servo.h>
#include <string.h>
#include <math.h>
//Constants
#define SS_PIN 12
#define RST_PIN 22
#define SERVO_PIN 13
//Servo
Servo servoMotor;
//Parameters
const int ipaddress[4] = {103, 97, 67, 25};
unsigned char serNum[5]; //ic卡的id码
int decid=0;
int i=0;
//Variables
byte nuidPICC[4] = {0, 0, 0, 0};
MFRC522::MIFARE_Key key;
MFRC522 rfid = MFRC522(SS_PIN, RST_PIN);
void setup() {
//Init Serial USB
Serial.begin(115200);//这里在串口监视器(Serial Monitor)旁边数值要调成一样
Serial.println("welcome!");
SPI.begin();
rfid.PCD_Init();
rfid.PCD_DumpVersionToSerial();
// attaches the servo on ESP32 pin
servoMotor.attach(SERVO_PIN, 500, 2400);//之前没加后面参数转不到180度
servoMotor.write(0);
void loop() {
readRFID();
switch(decid){
case 1002125://white 这里填写读卡器读到卡后的在串口监视器(Serial Monitor)上显示的decid数字
Serial.println("Pass!");
// rotates from 0 degrees to 180 degrees
for (int pos = 0; pos <= 180; pos += 1) {
// in steps of 1 degree
servoMotor.write(pos);
delay(10);
delay(1000);
servoMotor.write(0);
break;
decid=0;
void readRFID(void ) { /* function readRFID */
////Read RFID card
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
// Look for new 1 cards
if ( ! rfid.PICC_IsNewCardPresent())
return;
// Verify if the NUID has been readed
if ( !rfid.PICC_ReadCardSerial())
return;
// Store NUID into nuidPICC array
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
unsigned char* id = nuidPICC;
decid=0;
decid=id[0]*pow(16,3)+id[1]*pow(16,2)+id[2]*pow(16,1)+id[3]*pow(16,0);
Serial.print(F("RFID In dec: "));
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
Serial.print("DECID:");
Serial.println(decid); //输出卡id
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
Helper routine to dump a byte array as dec values to Serial.
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], DEC);

代码结束。

选择 ESP32 Dev Module,选择正确的串口
Upload 一下
接着打开 Monitor,刷卡,添加程序中 switch 语句的 case
大概效果如下图,当时没写 decid,大致看一下

屏幕截图 2023-05-02 122213.png

经过粗略测量,在门把手斜下方用热熔胶固定,再限位器粘在在舵机上方避免热熔胶纵向受力直接脱落。将 rc522 模块穿过门缝粘在外面。用线将门把手与舵机连接,最终实现了门外刷卡控制门内舵机向下转动拉动门把手实现开门的效果。

遇到的问题

最后效果近乎完美,广受师生好评,暂时无图。但目前采用的供电方式是使用充电宝低电流模式供电,貌似经过三个小时其依旧会自动断电,打算更换两个干电池盒试试,3V 独立给 ESP 供电,6V 独立给舵机供电。
不知是否可行。

总之到这里,整个奇妙探索旅程就结束了,总共历时半个月,总成本五十多,当然也少不了我亲爱的同桌和同学的支持。

https://rntlab.com/question/unit-9-esp32-control-servo-motor-library-problem/
https://esp32io.com/tutorials/esp32-servo-motor
https://www.electronicwings.com/esp32/rfid-rc522-interfacing-with-esp32
https://www.aranacorp.com/en/using-an-rfid-module-with-an-esp32/amp/
https://blog.csdn.net/lmf666/article/details/123527739
https://zhuanlan.zhihu.com/p/66467989
https://zhuanlan.zhihu.com/p/281103196
https://zhuanlan.zhihu.com/p/416003658


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK