ESP32 RFID/NFC 도어록 시스템
이 튜토리얼은 ESP32를 사용하여 RFID/NFC 도어락 시스템을 만드는 방법을 안내합니다.
1 × 38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow 쿠팡 | 아마존
1 × (또는) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide 쿠팡 | 아마존
1 × (또는) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide 아마존
1 × (또는) ESP32 Uno-form board 아마존
1 × (또는) ESP32 S3 Uno-form board 아마존
1 × USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1 × USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1 × RFID/NFC RC522 Kit (reader + tags) 쿠팡 | 아마존
1 × RFID Key Fob 쿠팡 | 아마존
1 × 솔레노이드 잠금장치 쿠팡 | 아마존
1 × (Aternative) Electromagnetic Lock 아마존
1 × 릴레이 아마존
1 × 12V 전원 어댑터 아마존
10 × 점퍼케이블 쿠팡 | 아마존
1 × (옵션 ) DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
1 × (추천 ) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1 × (추천 ) Breakout Expansion Board for ESP32 쿠팡 | 아마존
1 × (추천 ) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
RFID/NFC RC522 모듈 및 전자기 자물쇠에 관한 구체적인 튜토리얼이 있습니다. 각 튜토리얼은 하드웨어 핀아웃, 작동 원리, ESP32에 대한 배선 연결, ESP32 코드 등에 대한 자세한 정보 및 단계별 지침을 포함하고 있습니다. 다음 링크에서 자세히 알아보세요:
문 잠금 시스템은 두 가지 주요 부분으로 구성됩니다:
허가된 태그(키)의 UID는 ESP32 코드에 미리 정의되어 있습니다.
RFID/NFC 태그가 RFID/NFC 리더에 태핑될 때
ESP32는 리더로부터 UID를 읽습니다.
ESP32는 UID를 미리 정의된 UID와 비교합니다.
하나의 UID가 일치하면, ESP32는 전자기 자물쇠를 비활성화하여 문을 엽니다.
이 이미지는 Fritzing 을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법 .
※ 주의:
제조업체에 따라 핀 배열이 달라질 수 있습니다. 항상 모듈에 인쇄된 라벨을 사용하세요. 위의 이미지는 DIYables 제조업체의 모듈 핀배열을 보여줍니다.
#include <SPI .h>
#include <MFRC522 .h>
#define SS_PIN 5
#define RST_PIN 27
#define RELAY_PIN 32
MFRC522 rfid(SS_PIN, RST_PIN);
byte keyTagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};
void setup () {
Serial .begin (9600);
SPI .begin ();
rfid.PCD_Init ();
pinMode (RELAY_PIN, OUTPUT );
digitalWrite (RELAY_PIN, HIGH );
Serial .println ("RFID-RC522 리더에 RFID/NFC 태그를 탭하세요" );
}
void loop () {
if (rfid.PICC_IsNewCardPresent ()) {
if (rfid.PICC_ReadCardSerial ()) {
MFRC522 ::PICC_Type piccType = rfid.PICC_GetType (rfid.uid.sak);
if (rfid.uid.uidByte[0] == keyTagUID[0] &&
rfid.uid.uidByte[1] == keyTagUID[1] &&
rfid.uid.uidByte[2] == keyTagUID[2] &&
rfid.uid.uidByte[3] == keyTagUID[3] ) {
Serial .println ("접근이 허용되었습니다" );
digitalWrite (RELAY_PIN, LOW );
delay (2000);
digitalWrite (RELAY_PIN, HIGH );
}
else
{
Serial .print ("접근 거부됨, UID:" );
for (int i = 0; i < rfid.uid.size ; i++) {
Serial .print (rfid.uid.uidByte[i] < 0x10 ? " 0" : " " );
Serial .print (rfid.uid.uidByte[i], HEX );
}
Serial .println ();
}
rfid.PICC_HaltA ();
rfid.PCD_StopCrypto1 ();
}
}
}
Arduino IDE의 왼쪽 바에서 Libraries 아이콘을 클릭하십시오.
검색 상자에 "MFRC522" 라고 입력한 후, GithubCommunity에 의한 라이브러리를 찾으십시오.
Install 버튼을 클릭하여 라이브러리를 설치하십시오.
다음 단계를 수행하여 태그의 UID를 찾으세요:
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
Tap an RFID/NFC tag on the RFID-RC522 reader
Access denied, UID: 2B B8 59 B1
Ln 11, Col 1
ESP32 Dev Module on COM15
2
위 코드의 18번째 줄에서 UID를 업데이트하세요. 예를 들어, byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; 를 byte keytagUID[4] = {0x2B, 0xB8, 0x59, 0xB1}; 로 변경하세요.
코드를 다시 ESP32에 업로드하세요.
RFID/NFC 태그를 RFID-RC522 모듈에 태핑하세요.
시리얼 모니터에서 결과를 확인하세요.
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
Tap an RFID/NFC tag on the RFID-RC522 reader
Access is granted
Ln 11, Col 1
ESP32 Dev Module on COM15
2
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
Tap an RFID/NFC tag on the RFID-RC522 reader
Access is granted
Access denied, UID: 1C 2A 52 E3
Ln 11, Col 1
ESP32 Dev Module on COM15
2
문을 열기 위해서 관리자 키와 비서 키 두 개를 받아들이는 자물쇠를 만듭시다.
#include <SPI .h>
#include <MFRC522 .h>
#define SS_PIN 5
#define RST_PIN 27
#define RELAY_PIN 32
MFRC522 rfid(SS_PIN, RST_PIN);
byte managerKeyUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
byte secretaryKeyUID[4] = {0x30, 0x01, 0x8B, 0x15};
void setup () {
Serial .begin (9600);
SPI .begin ();
rfid.PCD_Init ();
pinMode (RELAY_PIN, OUTPUT );
digitalWrite (RELAY_PIN, HIGH );
Serial .println ("RFID-RC522 리더에 RFID/NFC 태그를 탭하세요" );
}
void loop () {
if (rfid.PICC_IsNewCardPresent ()) {
if (rfid.PICC_ReadCardSerial ()) {
MFRC522 ::PICC_Type piccType = rfid.PICC_GetType (rfid.uid.sak);
if (rfid.uid.uidByte[0] == managerKeyUID[0] &&
rfid.uid.uidByte[1] == managerKeyUID[1] &&
rfid.uid.uidByte[2] == managerKeyUID[2] &&
rfid.uid.uidByte[3] == managerKeyUID[3] ) {
Serial .println ("매니저 접근이 허용됨" );
digitalWrite (RELAY_PIN, LOW );
delay (2000);
digitalWrite (RELAY_PIN, HIGH );
}
else
if (rfid.uid.uidByte[0] == secretaryKeyUID[0] &&
rfid.uid.uidByte[1] == secretaryKeyUID[1] &&
rfid.uid.uidByte[2] == secretaryKeyUID[2] &&
rfid.uid.uidByte[3] == secretaryKeyUID[3] ) {
Serial .println ("비서 접근이 허용됨" );
digitalWrite (RELAY_PIN, LOW );
delay (2000);
digitalWrite (RELAY_PIN, HIGH );
}
else
{
Serial .print ("접근 거부됨, UID:" );
for (int i = 0; i < rfid.uid.size ; i++) {
Serial .print (rfid.uid.uidByte[i] < 0x10 ? " 0" : " " );
Serial .print (rfid.uid.uidByte[i], HEX );
}
Serial .println ();
}
rfid.PICC_HaltA ();
rfid.PCD_StopCrypto1 ();
}
}
}
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
Tap an RFID/NFC tag on the RFID-RC522 reader
The access is granted to manager
The access is granted to secretary
Ln 11, Col 1
ESP32 Dev Module on COM15
2
코드를 수정하여 세 개, 네 개 또는 그 이상의 태그를 추가할 수 있습니다.
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.