By | 13/05/2020

Helo temen-temen anakkendali.com
pada kesempatan kali ini saya ingin menulis artikel tentang Belajar ESP32, Tutorial Mudah Mengakses Fingerprint

Fingerprint Sensor merupakan sensor untuk mendeteksi id sidik jari manusia, karena sidik jari manusia tidak ada yang sama maka sensor ini sangat cocok untuk beberapa kemanan. fingerprint sensor juga sudah banyak digunakan pada berbagai perangkat elektronik sebagai pengamanya, baik laptop atau smartphone.

Tutorial fingerprint ESP32 kali ini saya sediakan dengan mengakses menggunakan modul wifi ESP32 Lolin32, dan kompatibel juga jika ingin menggunakan modul Wemos ESP32.
Modul ESP32 sudah memiliki dua hardwareserial sehingga kita tidak menggunakan SoftwareSerial untuk mengakses modul fingerprint.

Pencarian Terkait :
Tutorial Fingerprint ESP32, (145)
Tutorial Fingerprint lolin32, (135)
Tutorial Fingerprint wemos lolin32, (123)
Simpan Data ID Fingprint Database esp32, (85)
Program Fingerprint Database ESP32, (30)
Program Fingerprint Database lolin32, (23)

Saya akan menjelskan tutorial mengakses fingerprint ESP32 sejelas mungkin dan seurut mungkin untuk memudahkan kalian dalam mengikuti tutorial mengakses fingerprint ESP32.

penjelasan singkat tentang fingerprint cukup sampe situ dulu kita akan melangkah ke tutorial membaca ID sidik jari kemudian menyimpanya pada database sensor fingerprint dan yang terakhir uji coba validasi membaca ID sidik jari yang sudah di daftarkan dan semua itu dilakukan dengan menggunakan lolin32.

Rangkaian Skematik

Rangkaian ESP32 Fingerprint bisa dilihat dari gambar berikut.

Belajar ESP32, Tutorial Mudah Mengakses Fingerprint

lihatlah gambar modul fingerprint yang saya gunakan, terdapat beberapa pin yang terlihat antara lain ( V+, TX, RX, GND, VA, TCH, D+, D-) pada tutorial ini kita hanya butuh empat buah pin yaitu V+, TX, RX, GND
setelah semua sudah siap, kita akan beralih ke program mengakses fingerprint dengan ESP32

Code ESP32 Fingerprint

sebelum membuat code nya silahkan terlebih dahulu pasang library adafruit fingerprint yang dapat kalian download melalui tautan berikut

Adafruit Fingerprint Library

  1. Code untuk merekam data ID Sidik Jari yang disimpan didalam Database Sensor Fingerprint
    buka example dari library adafruit fingerprint kemudian pilih contoh enroll kemudian upload programnya.
    atau bisa copy paste dibawah ini.
#include <Adafruit_Fingerprint.h>

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);

uint8_t id;

void setup()  
{
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nAdafruit Fingerprint sensor enrollment");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) { delay(1); }
  }
}

uint8_t readnumber(void) {
  uint8_t num = 0;
  
  while (num == 0) {
    while (! Serial.available());
    num = Serial.parseInt();
  }
  return num;
}

void loop()                     // run over and over again
{
  Serial.println("Ready to enroll a fingerprint!");
  Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");
  id = readnumber();
  if (id == 0) {// ID #0 not allowed, try again!
     return;
  }
  Serial.print("Enrolling ID #");
  Serial.println(id);
  
  while (!  getFingerprintEnroll() );
}

uint8_t getFingerprintEnroll() {

  int p = -1;
  Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println(".");
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      break;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      break;
    default:
      Serial.println("Unknown error");
      break;
    }
  }

  // OK success!

  p = finger.image2Tz(1);
  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;
  }
  
  Serial.println("Remove finger");
  delay(2000);
  p = 0;
  while (p != FINGERPRINT_NOFINGER) {
    p = finger.getImage();
  }
  Serial.print("ID "); Serial.println(id);
  p = -1;
  Serial.println("Place same finger again");
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.print(".");
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      break;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      break;
    default:
      Serial.println("Unknown error");
      break;
    }
  }

  // OK success!

  p = finger.image2Tz(2);
  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!
  Serial.print("Creating model for #");  Serial.println(id);
  
  p = finger.createModel();
  if (p == FINGERPRINT_OK) {
    Serial.println("Prints matched!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_ENROLLMISMATCH) {
    Serial.println("Fingerprints did not match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  
  Serial.print("ID "); Serial.println(id);
  p = finger.storeModel(id);
  if (p == FINGERPRINT_OK) {
    Serial.println("Stored!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("Could not store in that location");
    return p;
  } else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("Error writing to flash");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
}

setelah di upload silahkan buka serial monitor dan akan tampil seperti gambar berikut. (jika tidak tampil, reset wemos saat serial monitor sudah terbuka).
kemudian silahkan input angka 1 – 127 dari serial monitro untuk menyimpan data id sidik jari pada alamat id yang di inginkan. dan saya memilih alamat ID 1.

fingerprint esp32

Tempelkan jari yang ingin di rekam id sidik jarinya sampai ada perintah untuk melepasnya dari sensor fingerprint

fingerprint esp32

setelah dilepas maka akan ada perintah lagi untuk mengulangi menempelkan jari yang sama untuk validasi perekaman sidik jari.

fingerprint esp32

jika berhasil didaftarkan maka akan tampil seperti pada gambar serial monitor diatas.

  1. Code Validasi Data ID Sidik Jari yang sudah di daftarkan. buka example adfruit fingerprint lalu pilih contoh yang bernama fingerprint kemudian upload program nya atau bisa juga copy paste code berikut :
#include <Adafruit_Fingerprint.h>

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);

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); }
  }

  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");

}

void loop()                     // run over and over again
{

  getFingerprintID();
  delay(1050);            //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.fingerFastSearch();
  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; 
}

jika berhasil akan tampil pada serial monitor seperti gambar berikut

esp32 fingerprint
  1. Menghapus Data ID pada database Sensor Fingerprint. Buka example adafruit fingerprint lalu pilih contoh dengan nama delete. atau bisa copy paste codenya diawah ini.
#include <Adafruit_Fingerprint.h>

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);

void setup()  
{
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nDelete Finger");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1);
  }
}


uint8_t readnumber(void) {
  uint8_t num = 0;
  
  while (num == 0) {
    while (! Serial.available());
    num = Serial.parseInt();
  }
  return num;
}

void loop()                     // run over and over again
{
  Serial.println("Please type in the ID # (from 1 to 127) you want to delete...");
  uint8_t id = readnumber();
  if (id == 0) {// ID #0 not allowed, try again!
     return;
  }

  Serial.print("Deleting ID #");
  Serial.println(id);
  
  deleteFingerprint(id);
}

uint8_t deleteFingerprint(uint8_t id) {
  uint8_t p = -1;
  
  p = finger.deleteModel(id);

  if (p == FINGERPRINT_OK) {
    Serial.println("Deleted!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("Could not delete in that location");
    return p;
  } else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("Error writing to flash");
    return p;
  } else {
    Serial.print("Unknown error: 0x"); Serial.println(p, HEX);
    return p;
  }   
}

setelah berhasil di upload program delete id fingerprint nya silahkan input data id yang ingin dihapus melalu serial monitor. jika berhasil akan tampak seperti gambar berikut.

esp32 fingerprint

Mungkin cukup sampai disitu dulu artikel tentang Belajar ESP32, Tutorial Mengakses Modul Fingerprint dengan mudah apa yang bisa saya bagikan kali ini, semoga bermanfaat dan jangan lupa berkomentar di bawah sekaligus bagikan artikel nya.

3 Replies to “Belajar ESP32, Tutorial Mudah Mengakses Fingerprint”

  1. ppp

    &serial2 itu fungsinya buat apa ya? error ga ada di scope tulisannya

    Reply
  2. Farid

    Assalamualaikum, mau nanya nih. Ketika kita melakukan proses enroll maka akan ada data yang tersimpan di datastored sensor fingerprintnya, data tersebut berupa apa ya ? Dan bagaimana cara menampilkan data tersebut di serial monitor ? Trima kasih

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *