728x90
반응형
제목: 아두이노 ESP32와 지문 센서로 프로젝트 보안 강화하기
소개:
프로젝트의 보안은 매우 중요합니다. 특히 민감한 정보나 제한된 접근을 요구하는 경우, 추가적인 보안 기능이 필요합니다. 이 글에서는 아두이노 ESP32와 지문 센서를 사용하여 프로젝트의 보안을 강화하는 방법에 대해 알아보겠습니다. "Secure Your Projects With Fingerprint Sensors and Arduino EPS32"라는 주제로 설명하겠습니다.
재료:
아두이노 ESP32 개발 보드
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
지문 센서 모듈 (예: Adafruit Fingerprint Sensor)
점퍼 와이어
컴퓨터 또는 노트북
USB 케이블
절차:
아두이노 IDE 설치: 컴퓨터에 아두이노 IDE를 다운로드하고 설치합니다. 이 소프트웨어를 사용하여 코드 작성과 업로드를 수행할 것입니다.
하드웨어 연결: 아두이노 ESP32 개발 보드와 지문 센서 모듈을 점퍼 와이어를 사용하여 연결합니다. 일반적으로 VCC, GND, RX, TX 핀을 연결해야 합니다.
라이브러리 설치: 아두이노 IDE에서 "Adafruit Fingerprint Sensor" 라이브러리를 설치합니다. 이 라이브러리는 지문 센서 모듈과의 통신을 용이하게 해줍니다.
코드 작성: 아두이노 IDE에서 새 스케치를 열고 다음과 같은 코드를 작성합니다.
#include <Adafruit_Fingerprint.h>
// Initialize the fingerprint sensor
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial1);
void setup() {
Serial.begin(9600);
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
}
void loop() {
getFingerprintID();
}
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return p;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return p;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return p;
// If a match is found, print the ID
Serial.print("Found ID #");
Serial.print(finger.fingerID);
Serial.print(" with confidence of ");
Serial.println(finger.confidence);
return finger.fingerID;
}
코드 업로드: 작성한 코드를 아두이노 ESP32 개발 보드에 업로드합니다.
테스트 및 활용: 시리얼 모니터 창을 열고 지문 센서에 등록된 손가락으로 스캔해보세요.
지문 인식 후 등록된 ID 및 일치하는지 여부가 시리얼 모니터에 출력됩니다.
출력 결과에 따라 프로젝트의 로그인 접근 제어 등 다양한 기능을 추가할 수 있습니다.
결론:
아두이노 ESP32와 지문 센서는 프로젝트의 보안 강화에 유용한 도구입니다.
위 단계들을 따라가며 간단하게 구현할 수 있으며, 손쉬운 사용법과 안정성으로 신원 인증 및 접근 제어 시스템 구축에 도움을 줄 수 있습니다.
더 나아가 필요한 경우 데이터베이스와 연동하여 복잡한 인증 및 권한 관리 시스템도 구현할 수 있습니다.
보다 안전하고 신속한 프로젝트 운영을 위해 이 기술들을 활용해보세요!
생체 인증은 오늘날 점점 더 보편화되어 향상된 보안과 편의성을 제공합니다. 가장 널리 사용되는 생체 인식 방법 중 하나는 지문 인식입니다.
이 기사에서는 Adafruit 지문 라이브러리를 사용하여 Arduino로 지문 센서를 구현하는 방법을 살펴보겠습니다. 마지막으로 지문 기반 보안 프로젝트를 만드는 방법을 알게 될 것입니다.
Adafruit 지문 라이브러리 이해
Adafruit 지문 라이브러리는 지문 센서, 특히 Adafruit 광학 지문 센서와 Arduino의 통합을 간소화합니다. 이 라이브러리는 센서와 Arduino 간의 통신을 간소화하여 애호가와 개발자가 지문 기반 프로젝트를 더 쉽게 만들 수 있도록 합니다.
공급
코드를 살펴보기 전에 다음 구성 요소가 준비되었는지 확인합니다.
- Arduino 보드(예: Arduino Uno 또는 Arduino Nano)
- Adafruit 광학 지문 센서
- https://link.coupang.com/a/bcRCN3
- "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
- 점퍼 와이어
- Arduino IDE가 설치된 컴퓨터
- Adafruit 지문 라이브러리(Arduino 라이브러리 관리자에서 사용 가능)
1단계: 지문 센서 연결
다음과 같이 지문 센서를 Arduino에 연결합니다.
- VCC에서 5V로
- GND에서 GND로
- RX (센서) - 2 (Arduino)
- TX (센서) - 3 (아두이노)
2단계: Adafruit 지문 라이브러리 설치
- Arduino IDE를 열고 "스케치" -> "라이브러리 포함" -> "라이브러리 관리..."로 이동합니다.
- 라이브러리 관리자에서 "Adafruit 지문 센서 라이브러리"를 검색하여 설치합니다.
3단계: 센서에 손가락 등록
지문 센서에 지문을 등록하려면 일반적으로 향후 인증을 위해 센서의 메모리에 고유한 지문 패턴을 캡처하고 저장하는 일련의 단계가 포함됩니다. 다음은 Arduino와 함께 지문 센서(예: Adafruit 광학 지문 센서)를 사용하여 지문을 등록하는 방법에 대한 일반적인 가이드입니다.
메모: 이 예제에서는 지문 센서를 이미 Arduino에 연결하고 이 코드를 업로드하여 손가락을 등록했다고 가정합니다.
#include <Adafruit_Fingerprint.h>
// Create an Adafruit_Fingerprint object
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial);
void setup()
{
Serial.begin(9600);
delay(100);
Serial.println("Adafruit fingerprint sensor enrollment");
// Initialize the fingerprint sensor
if (!finger.begin(57600))
{
Serial.println("Couldn't find fingerprint sensor :(");
while (1);
}
// Check if the sensor is connected
if (finger.verifyPassword())
{
Serial.println("Found fingerprint sensor!");
}
else
{
Serial.println("Did not find fingerprint sensor :(");
while (1);
}
}
void loop()
{
// Enroll a new fingerprint
Serial.println("Place your finger on the sensor...");
// Wait for a valid fingerprint
while (! finger.getImage());
Serial.println("Image taken");
int result = finger.image2Tz(1);
switch (result)
{
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return;
default:
Serial.println("Unknown error");
return;
}
// Prompt the user to remove and reposition the same finger
Serial.println("Remove your finger and reposition it...");
delay(2000);
// Wait for the user to place the same finger again
Serial.println("Place the same finger on the sensor again...");
// Wait for a valid fingerprint
while (! finger.getImage());
Serial.println("Image taken");
result = finger.image2Tz(2);
switch (result)
{
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return;
default:
Serial.println("Unknown error");
return;
}
// Create a fingerprint template
result = finger.createModel();
if (result == FINGERPRINT_OK)
{
Serial.println("Fingerprint enrolled successfully!");
}
else
{
Serial.println("Unknown error");
return;
}
}
이 코드는 일관성을 보장하기 위해 사용자의 지문을 두 번 캡처한 다음 템플릿으로 저장합니다.
직렬 모니터를 열고 단계에 따라 손가락을 등록합니다. 등록되면 이 템플릿을 지문 확인 및 액세스 제어에 사용할 수 있습니다.
4단계: 지문 인증
센서에 등록한 손가락을 인증하려면 다음 코드를 업로드해야 합니다.
/***************************************************
This is an example sketch for our optical Fingerprint sensor
Designed specifically to work with the Adafruit BMP085 Breakout
----> http://www.adafruit.com/products/751
These displays use TTL Serial to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#include <Adafruit_Fingerprint.h>
#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino (WHITE wire)
// Set up the serial port to use softwareserial..
SoftwareSerial mySerial(2, 3);
#else
// On Leonardo/M0/etc, others with hardware serial, use hardware serial!
// #0 is green wire, #1 is white
#define mySerial Serial1
#endif
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
void setup()
{
Serial.begin(9600);
while (!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
Serial.println("\n\nAdafruit finger detect test");
// set the data rate for the sensor serial port
finger.begin(57600);
delay(5);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
Serial.println(F("Reading sensor parameters"));
finger.getParameters();
Serial.print(F("Status: 0x")); Serial.println(finger.status_reg, HEX);
Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);
Serial.print(F("Capacity: ")); Serial.println(finger.capacity);
Serial.print(F("Security level: ")); Serial.println(finger.security_level);
Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX);
Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);
Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate);
finger.getTemplateCount();
if (finger.templateCount == 0) {
Serial.print("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example.");
}
else {
Serial.println("Waiting for valid finger...");
Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
}
}
void loop() // run over and over again
{
getFingerprintID();
delay(50); //don't ned to run this at full speed.
}
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK success!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK converted!
p = finger.fingerSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
이제 직렬 모니터를 열고 센서에 손가락을 대십시오. 이미 등록된 손가락을 놓으면 발견된 손가락 일치가 표시됩니다. 그렇지 않으면 일치 항목을 찾을 수 없음이 표시됩니다.
이런 식으로 Arduino와 함께 지문 센서를 쉽게 사용할 수 있습니다.
728x90
반응형
'ESP32' 카테고리의 다른 글
Home Assistant/ESPHome 기반 LED 매트릭스 온도 및 전력 미터 제작 (1) | 2024.01.24 |
---|---|
프로그래밍 가능한 LED 디스플레이가 있는 LED 백팩(LED Backpack With Programmable LED Display) (1) | 2023.11.13 |
4개의 OLED 디스플레이와 I2C 멀티플렉서를 사용하여 큐브 타이머 만들기 (0) | 2023.03.24 |
아두 이노에 ESP8266 및 ESP32 코어 설치 (윈도우, 맥, 리눅스) (0) | 2023.03.22 |
ESP32 BLE 초보사용자 (0) | 2023.03.06 |