Tutorial Fingerprint Sensor FPM10A DY50 Dengan ESP32
Halo teman-teman semua, pada kesempatan ini DT Production akan memberikan tutorial tentang cara menggunakan atau mengakses modul sensor Fingerprint FPM10A DY50 menggunakan ESP32. Karna banyak yang bertanya baik via DM instagram atau chatting Tokopedia kepada admin, maka pada kesempatan ini admin buatkan tutorialnya dan dapat teman – teman kembangkan sesuai dengan kebutuhan. Pada ESP32 kita tidak akan menggunakan library Software Serial dimana library ini sering kita gunakan pada NodeMCU atau Arduino ketika mengerjakan suatu proyek yang menggunakan modul fingerprint. Untuk library yang sering kita gunakan yaitu adafruit fingerprint module ketika bekerja dengan modul fingerprint dan menggunakan software serial untuk penerimaan data (perpindahan data) antara kontroler dan modul atau sebaliknya. Ada tiga port serial pada ESP32 yaitu UART0, UART1, dan UART2. Pada tutorial ini kita akan menggunakan pin UART2 pada pin GPIO16(RX2) dan GPIO17(TX2) board ESP32 DEVKIT V1.
Untuk menghubungkan Modul fingerprint dan kontroler ESP32 lihat pada tabel berikut.
FPM10A | ESP32 |
RX | TX2 |
TX | RX2 |
VCC | 3.3V |
GND | GND |
Beberapa modul sidik jari bekerja dengan tengangan 5v dan posisi pin yang berbeda (posisi kabel), untuk itu perlu teman – teman sesuaikan.
Teman – teman bisa mendapatkan modul – modul yang akan digunakan pada proyek ini dengan melakukan pembelian di toko online DT Production. untuk pembelian via Tokopedia.
ESP32 DEVKIT V1
Base / Expansion board ESP32
FPM10A
Adaptor 9V (optional)
Kabel Jumper
Ada beberapa hal yang perlu diperhatikan ketika ingin membuat proyek ini
yaitu menginstall library Adafruit Fingerprint Sesnor terlebih dahulu.
Adafruit-Fingerprint-Sensor-Library | Download
Kemudian tambahkan library tersebut ke dalam software Arduino IDE.
Selanjutnya teman – teman harus memastikan sudah menginstall board ESP32 pada software arduino IDE.
Untuk konfigurasi saat melakukan upload program kedalam kontroler, ada dua parameter konfigurasi yang perlu diperhatikan yaitu
pemilihan Board dan COM PORT yang terdeteksi ketika menghubungkan kontroler ke PC / Laptop yang digunakan. cara konfigurasi adalah sebagai berikut.
Board : Tools > Board > DOIT ESP32 DEVKIT V1
PORT : Tools > PORT > COM5 (contoh)
Untuk program yang akan admin berikan dan sudah di modifikasi adalah enroll (mendaftarkan sidik jari pada modul fingerprint). Silahkan salin kode program nya pada berikut ini.
#define mySerial Serial2
#include <adafruit_fingerprint.h>
#include <hardwareserial.h>
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
uint8_t id;
void setup()
{
Serial.begin(9600);
while (!Serial);
delay(100);
Serial.println("\n\nAdafruit Fingerprint sensor enrollment");
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();
delay(2000);
}
return num;
}
void loop()
{
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) {
return;
}
Serial.print("Enrolling ID #");
Serial.println(id);
while (!getFingerprintEnroll())break;
}
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;
}
yield();
}
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();
yield();
}
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;
}
}
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;
}
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!");
Serial.println("");
delay(3000);
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
Serial.println("");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Could not store in that location");
Serial.println("");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error writing to flash");
Serial.println("");
return p;
} else {
Serial.println("Unknown error");
Serial.println("");
return p;
}
}
Biasanya terdapat error atau kendala ketika kita melakukan upload program ke dalam ESP32, contohnya seperti berikut ini.
Lakukan cara ini untuk memperbaiki masalah tersebut. Teman – teman dapat melakukan upload program kembali, perhatikan status upload nya. ketika statusnya :
Connecting….._____……..________
Tekan dan tahan tombol BOOT pada board ESP32 sampai statusnya :
Writing at 0x00010000… (14 %)
Writing at 0x00014000… (28 %)
Writing at 0x00018000… (42 %)
Kemudian lepaskan tombol Boot.
Selanjutnya status upload program selesai ditandai dengan tampilan teks :
Leaving…
Hard resetting via RTS pin…
Setelah upload program selesai, buka Serial Monitor dan set Baudrate menjadi 9600. Kemudian teman – teman dapat menekan tombol EN pada board ESP32 untuk menjalankan proyek ini dari awal.
Admin melihat masalah pada example ini ketika menggunakan ESP32 dengan library Adafruit Fingerprint Sensor, yaitu pengulangan (loop) pada saat menjalankan enroll. dimana ketika user sudah selesai melakukan enroll dan statusnya “Stored!”, maka enroll akan terus mengulang tanpa user melakukan input ID di serial monitor. Disini admin sudah memperbaikinya.
Demikian tutorial ini, jika berkenan teman – teman bisa share atau subscribe channel youtube DT Production. Terima kasih dan semoga bermanfaat