By | 06/05/2020

Helo temen-temen anakkendali.com

pada kesempatan kali ini saya ingin menulis artikel tentang Tutorial Full Fingerprint ESP8266 NodeMCU/Wemos D1 mini

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 kali ini saya sediakan dengan mengakses menggunakan modul wifi ESP8266 Wemos D1 mini, dan kompatibel juga jika ingin menggunakan modul NodeMCU.

Pencarian Terkait :
Tutorial Fingerprint ESP8266 (145)
Tutorial Fingerprint Wemos D1 Mini (135)
Tutorial Fingerprint NodeMCU (123)
Cara Mengakses Sensor Fingerprint Arduino (118)
Cara Mudah Mengakses Sensor Fingerprint (99)
Simpan Data ID Fingprint Database (85)
Cara Mudah Fingerprint Arduino(43)
Program Fingerprint Database ESP8266(30)
Program Fingerprint Database NodeMCU(23)

Saya akan menjelskan tutorial mengakses fingerprint sejelas mungkin dan seurut mungkin untuk memudahkan kalian dalam mengikuti tutorial mengakses fingerprint dengan wemos D1 mini dan NodeMCU.

penjelasan singkat tentang fingerprint cukup sampe situ dulu kita akan melangkah ke langkah 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.

Rangkaian Skematik

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 wemos D1 Mini

Code

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>
SoftwareSerial mySerial(D5, D6);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

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.

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

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

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>
SoftwareSerial mySerial(D5, D6);

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

  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

  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>
SoftwareSerial mySerial(D5, D6);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

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.

Mungkin cukup sampai disitu dulu apa yang bisa saya bagikan kali ini, semoga bermanfaat dan jangan lupa berkomentar di bawah sekaligus bagikan artikel nya.

Leave a Reply

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