From c8da7bbc6a491121815507b2bd44d1a8b943d850 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sat, 3 Sep 2022 22:09:06 +0600 Subject: [PATCH 01/31] Update library.properties updated to 2.1.1 --- library.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library.properties b/library.properties index b435fec..defd664 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Adafruit Fingerprint Sensor Library -version=2.1.0 +version=2.1.1 author=Adafruit maintainer=Adafruit sentence=Arduino library for interfacing to the fingerprint sensor in the Adafruit shop From 7894726bc6ad52912e30c910156520396e48ea77 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sat, 3 Sep 2022 22:11:41 +0600 Subject: [PATCH 02/31] Update Adafruit_Fingerprint.h --- Adafruit_Fingerprint.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Adafruit_Fingerprint.h b/Adafruit_Fingerprint.h index b6263b8..b1955f5 100644 --- a/Adafruit_Fingerprint.h +++ b/Adafruit_Fingerprint.h @@ -65,6 +65,7 @@ #define FINGERPRINT_STORE 0x06 //!< Store template #define FINGERPRINT_LOAD 0x07 //!< Read/load template #define FINGERPRINT_UPLOAD 0x08 //!< Upload template +#define FINGERPRINT_DOWNLOAD 0x09 //!< Download template data to buffer #define FINGERPRINT_DELETE 0x0C //!< Delete templates #define FINGERPRINT_EMPTY 0x0D //!< Empty library #define FINGERPRINT_READSYSPARAM 0x0F //!< Read system parameters @@ -146,16 +147,16 @@ struct Adafruit_Fingerprint_Packet { address[1] = 0xFF; address[2] = 0xFF; address[3] = 0xFF; - if (length < 64) + if (length < 256) ///considering max data length for hobby type sensors. memcpy(this->data, data, length); else - memcpy(this->data, data, 64); + memcpy(this->data, data, 256); } uint16_t start_code; ///< "Wakeup" code for packet detection uint8_t address[4]; ///< 32-bit Fingerprint sensor address uint8_t type; ///< Type of packet uint16_t length; ///< Length of packet - uint8_t data[64]; ///< The raw buffer for packet payload + uint8_t data[256]; ///< The raw buffer for packet payload }; ///! Helper class to communicate with and keep state for fingerprint sensors @@ -180,6 +181,9 @@ class Adafruit_Fingerprint { uint8_t storeModel(uint16_t id); uint8_t loadModel(uint16_t id); uint8_t getModel(void); + uint8_t get_template_buffer(int bufsize,uint8_t ref_buf[]); // new addiiton,for getting template data from sensor + uint8_t downloadModel(uint8_t buffer_no); //new addiiton,for loading template data to buffer + boolean write_template_to_sensor(uint8_t ref_buf[]) ; // new addition, for writing template data to sensor uint8_t deleteModel(uint16_t id); uint8_t fingerFastSearch(void); uint8_t fingerSearch(uint8_t slot = 1); @@ -207,11 +211,11 @@ class Adafruit_Fingerprint { uint16_t status_reg = 0x0; ///< The status register (set by getParameters) uint16_t system_id = 0x0; ///< The system identifier (set by getParameters) - uint16_t capacity = 64; ///< The fingerprint capacity (set by getParameters) + uint16_t capacity = 127; ///< The fingerprint capacity (set by getParameters) uint16_t security_level = 0; ///< The security level (set by getParameters) uint32_t device_addr = 0xFFFFFFFF; ///< The device address (set by getParameters) - uint16_t packet_len = 64; ///< The max packet length (set by getParameters) + uint16_t packet_len = 128; ///< The max packet length (set by getParameters) uint16_t baud_rate = 57600; ///< The UART baud rate (set by getParameters) private: From a6c718d2c62f34b0906d500823c37dab1e1024b9 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sat, 3 Sep 2022 22:12:59 +0600 Subject: [PATCH 03/31] Update Adafruit_Fingerprint.cpp added template transfer support --- Adafruit_Fingerprint.cpp | 66 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/Adafruit_Fingerprint.cpp b/Adafruit_Fingerprint.cpp index 34e4fe1..4f4d485 100644 --- a/Adafruit_Fingerprint.cpp +++ b/Adafruit_Fingerprint.cpp @@ -139,7 +139,10 @@ void Adafruit_Fingerprint::begin(uint32_t baudrate) { */ /**************************************************************************/ boolean Adafruit_Fingerprint::verifyPassword(void) { - return checkPassword() == FINGERPRINT_OK; + if(checkPassword() == FINGERPRINT_OK){ + return getParameters()== FINGERPRINT_OK; //properly configure the object by reading system parameters + } + return false; } uint8_t Adafruit_Fingerprint::checkPassword(void) { @@ -266,6 +269,67 @@ uint8_t Adafruit_Fingerprint::getModel(void) { SEND_CMD_PACKET(FINGERPRINT_UPLOAD, 0x01); } +/**************************************************************************/ +/*! + @brief read template data from the sensor + @returns a buffer where the template's 512 bytes are stored +*/ +/**************************************************************************/ +uint8_t Adafruit_Fingerprint::get_template_buffer(int bufsize,uint8_t ref_buf[]) { //new addition + int rcv_bt_len=(packet_len+11)*4; //data packet contains 11 extra bytes(first->2-header,4-address,1-type,2-length,last->2-checksum) excpet the main data + int div=ceil(bufsize/packet_len); + uint8_t bytesReceived[rcv_bt_len]; + memset(bytesReceived, 0xff, rcv_bt_len); + uint32_t starttime = millis(); + int i = 0; + while (iavailable()) { + starttime = millis(); + bytesReceived[i++] = mySerial->read(); + } + } + if(i!=rcv_bt_len) return FINGERPRINT_TIMEOUT; + memset(ref_buf, 0xff, 512); + for(int m=0;m Date: Sat, 3 Sep 2022 22:24:26 +0600 Subject: [PATCH 04/31] Create Save_template_to_SD.ino example for saving template to SD card --- .../Save_template_to_SD.ino | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 examples/Save_template_to_SD/Save_template_to_SD.ino diff --git a/examples/Save_template_to_SD/Save_template_to_SD.ino b/examples/Save_template_to_SD/Save_template_to_SD.ino new file mode 100644 index 0000000..4dac86a --- /dev/null +++ b/examples/Save_template_to_SD/Save_template_to_SD.ino @@ -0,0 +1,145 @@ +/******************************************************************************************* + Author: Md. Asifuzzaman Khan/HAALniner21 + Date:9/3/2022 + + This example shows how to save template data to an SD card using the + SD library. (also works with sdFat library by adafruit) + First a template is created then it is stored in the SD card as a text file. + That text file can be written back to the sensor using the "write_template_from_SD.ino" example + + This example is tested on esp32 & arduino Mega 2560 boards. Other boards are also supposed to work. + + Happy coding! :) + *******************************************************************************************/ + +#include +#include "FS.h" +#include "SD.h" +#include "SPI.h" + +Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2, 0); + +#define SD_CS 5 //default is 5 for esp32, change according to your hardware connection of SD card + +void setup() { + Serial.begin(115200); + finger.begin(57600); //set your sensor's baudrate + if (finger.verifyPassword()) { + Serial.println("Found fingerprint sensor!"); + } else { + Serial.println("Did not find fingerprint sensor :("); + while (1); + } + if(!SD.begin(SD_CS)){ + Serial.println("Card Mount Failed"); + while(1); + } + uint8_t cardType = SD.cardType(); + if(cardType == CARD_NONE){ + Serial.println("No SD card attached"); + while(1); + } + + save_template_to_SD(); + +} + +uint8_t readnumber(void) { + uint8_t num = 0; + + while (num == 0) { + while (! Serial.available()); + num = Serial.parseInt(); + } + return num; +} + +void save_template_to_SD(){ + 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..."); + int id = readnumber(); + if (id == 0) {// ID #0 not allowed, try again! + return; + } + Serial.print("Enrolling ID #"); + Serial.println(id); + Serial.print("Waiting for valid finger to enroll as ID:"); Serial.println(id); + while (finger.getImage() != FINGERPRINT_OK) { // press down a finger take 1st image + } + Serial.println("Image taken"); + + + if (finger.image2Tz(1) == FINGERPRINT_OK) { //creating the charecter file for 1st image + Serial.println("Image converted"); + } else { + Serial.println("Conversion error"); + return; + } + + Serial.println("Remove finger"); + delay(2000); + uint8_t p = 0; + while (p != FINGERPRINT_NOFINGER) { + p = finger.getImage(); + } + + Serial.println("Place same finger again, waiting...."); + while (finger.getImage() != FINGERPRINT_OK) { // press the same finger again to take 2nd image + } + Serial.println("Image taken"); + + + if (finger.image2Tz(2) == FINGERPRINT_OK) { //creating the charecter file for 2nd image + Serial.println("Image converted"); + } else { + Serial.println("Conversion error"); + return; + } + + + Serial.print("Creating model for #"); Serial.println(id); + + + if (finger.createModel() == FINGERPRINT_OK) { //creating the template from the 2 charecter files and saving it to char buffer 1 + Serial.println("Prints matched!"); + Serial.println("Template created"); + } else { + Serial.println("Template not build"); + return; + } + + Serial.print("Attempting to get #"); Serial.println(id); + if (finger.getModel() == FINGERPRINT_OK) { //requesting sensor to transfer the template data to upper computer (this microcontroller) + Serial.print("Template "); Serial.print(id); Serial.println(" transferring:"); + } else { + Serial.print("Failed to transfer"); Serial.print(id); + return; + } + + uint8_t f_buf[512]; //here is where the template data is sotred + + if (finger.get_template_buffer(512, f_buf) == FINGERPRINT_OK) { //read the template data from sensor and save it to buffer f_buf + Serial.println("Template data (comma sperated HEX):"); + for (int k = 0; k < (512/finger.packet_len); k++) { //printing out the template data in seperate rows, where row-length = packet_length + for (int l = 0; l < finger.packet_len; l++) { + Serial.print(f_buf[(k * finger.packet_len) + l], HEX); + Serial.print(","); + } + Serial.println("<<"); + } + } + + File myFile = SD.open("/"+String(id)+".txt", FILE_WRITE); //naming the saved file as the id number, so creates a id.txt file + if (myFile) { + for(int i=0;i<512;i++){ + myFile.write(f_buf[i]); //writing the buffer to sd card + } + }else{ + Serial.println("error writing file to sd"); + return; + } + myFile.close(); + Serial.println("template saved to sd"); +} + +void loop() {} From 3dea7789187b7d997970565c8286b5e70d740b1c Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sat, 3 Sep 2022 22:26:39 +0600 Subject: [PATCH 05/31] Delete examples/Save_template_to_SD directory --- .../Save_template_to_SD.ino | 145 ------------------ 1 file changed, 145 deletions(-) delete mode 100644 examples/Save_template_to_SD/Save_template_to_SD.ino diff --git a/examples/Save_template_to_SD/Save_template_to_SD.ino b/examples/Save_template_to_SD/Save_template_to_SD.ino deleted file mode 100644 index 4dac86a..0000000 --- a/examples/Save_template_to_SD/Save_template_to_SD.ino +++ /dev/null @@ -1,145 +0,0 @@ -/******************************************************************************************* - Author: Md. Asifuzzaman Khan/HAALniner21 - Date:9/3/2022 - - This example shows how to save template data to an SD card using the - SD library. (also works with sdFat library by adafruit) - First a template is created then it is stored in the SD card as a text file. - That text file can be written back to the sensor using the "write_template_from_SD.ino" example - - This example is tested on esp32 & arduino Mega 2560 boards. Other boards are also supposed to work. - - Happy coding! :) - *******************************************************************************************/ - -#include -#include "FS.h" -#include "SD.h" -#include "SPI.h" - -Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2, 0); - -#define SD_CS 5 //default is 5 for esp32, change according to your hardware connection of SD card - -void setup() { - Serial.begin(115200); - finger.begin(57600); //set your sensor's baudrate - if (finger.verifyPassword()) { - Serial.println("Found fingerprint sensor!"); - } else { - Serial.println("Did not find fingerprint sensor :("); - while (1); - } - if(!SD.begin(SD_CS)){ - Serial.println("Card Mount Failed"); - while(1); - } - uint8_t cardType = SD.cardType(); - if(cardType == CARD_NONE){ - Serial.println("No SD card attached"); - while(1); - } - - save_template_to_SD(); - -} - -uint8_t readnumber(void) { - uint8_t num = 0; - - while (num == 0) { - while (! Serial.available()); - num = Serial.parseInt(); - } - return num; -} - -void save_template_to_SD(){ - 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..."); - int id = readnumber(); - if (id == 0) {// ID #0 not allowed, try again! - return; - } - Serial.print("Enrolling ID #"); - Serial.println(id); - Serial.print("Waiting for valid finger to enroll as ID:"); Serial.println(id); - while (finger.getImage() != FINGERPRINT_OK) { // press down a finger take 1st image - } - Serial.println("Image taken"); - - - if (finger.image2Tz(1) == FINGERPRINT_OK) { //creating the charecter file for 1st image - Serial.println("Image converted"); - } else { - Serial.println("Conversion error"); - return; - } - - Serial.println("Remove finger"); - delay(2000); - uint8_t p = 0; - while (p != FINGERPRINT_NOFINGER) { - p = finger.getImage(); - } - - Serial.println("Place same finger again, waiting...."); - while (finger.getImage() != FINGERPRINT_OK) { // press the same finger again to take 2nd image - } - Serial.println("Image taken"); - - - if (finger.image2Tz(2) == FINGERPRINT_OK) { //creating the charecter file for 2nd image - Serial.println("Image converted"); - } else { - Serial.println("Conversion error"); - return; - } - - - Serial.print("Creating model for #"); Serial.println(id); - - - if (finger.createModel() == FINGERPRINT_OK) { //creating the template from the 2 charecter files and saving it to char buffer 1 - Serial.println("Prints matched!"); - Serial.println("Template created"); - } else { - Serial.println("Template not build"); - return; - } - - Serial.print("Attempting to get #"); Serial.println(id); - if (finger.getModel() == FINGERPRINT_OK) { //requesting sensor to transfer the template data to upper computer (this microcontroller) - Serial.print("Template "); Serial.print(id); Serial.println(" transferring:"); - } else { - Serial.print("Failed to transfer"); Serial.print(id); - return; - } - - uint8_t f_buf[512]; //here is where the template data is sotred - - if (finger.get_template_buffer(512, f_buf) == FINGERPRINT_OK) { //read the template data from sensor and save it to buffer f_buf - Serial.println("Template data (comma sperated HEX):"); - for (int k = 0; k < (512/finger.packet_len); k++) { //printing out the template data in seperate rows, where row-length = packet_length - for (int l = 0; l < finger.packet_len; l++) { - Serial.print(f_buf[(k * finger.packet_len) + l], HEX); - Serial.print(","); - } - Serial.println("<<"); - } - } - - File myFile = SD.open("/"+String(id)+".txt", FILE_WRITE); //naming the saved file as the id number, so creates a id.txt file - if (myFile) { - for(int i=0;i<512;i++){ - myFile.write(f_buf[i]); //writing the buffer to sd card - } - }else{ - Serial.println("error writing file to sd"); - return; - } - myFile.close(); - Serial.println("template saved to sd"); -} - -void loop() {} From 4c31d55948c805b427f7bd60b72f0e02c2b92bf4 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sat, 3 Sep 2022 22:29:34 +0600 Subject: [PATCH 06/31] Create Save_template_to_SD.ino example of saving template to external sd card --- .../Save_template_to_SD.ino | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino diff --git a/examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino b/examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino new file mode 100644 index 0000000..eca89a8 --- /dev/null +++ b/examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino @@ -0,0 +1,145 @@ +/******************************************************************************************* + Author: Md. Asifuzzaman Khan (HAALniner21) + Date:9/3/2022 + + This example shows how to save template data to an SD card using the + SD library. (also works with the sdFat library) + First a template is created then it is stored in the SD card as a text file. + That text file can be written back to the sensor using the "write_template_from_SD.ino" example + + This example is tested on esp32 & arduino Mega 2560 boards. Other boards are also supposed to work. + + Happy coding! :) + *******************************************************************************************/ + +#include +#include "FS.h" +#include "SD.h" +#include "SPI.h" + +Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2, 0); + +#define SD_CS 5 //default is 5 for esp32, change according to your hardware connection of SD card + +void setup() { + Serial.begin(115200); + finger.begin(57600); //set your sensor's baudrate + if (finger.verifyPassword()) { + Serial.println("Found fingerprint sensor!"); + } else { + Serial.println("Did not find fingerprint sensor :("); + while (1); + } + if(!SD.begin(SD_CS)){ + Serial.println("Card Mount Failed"); + while(1); + } + uint8_t cardType = SD.cardType(); + if(cardType == CARD_NONE){ + Serial.println("No SD card attached"); + while(1); + } + + save_template_to_SD(); + +} + +uint8_t readnumber(void) { + uint8_t num = 0; + + while (num == 0) { + while (! Serial.available()); + num = Serial.parseInt(); + } + return num; +} + +void save_template_to_SD(){ + 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..."); + int id = readnumber(); + if (id == 0) {// ID #0 not allowed, try again! + return; + } + Serial.print("Enrolling ID #"); + Serial.println(id); + Serial.print("Waiting for valid finger to enroll as ID:"); Serial.println(id); + while (finger.getImage() != FINGERPRINT_OK) { // press down a finger take 1st image + } + Serial.println("Image taken"); + + + if (finger.image2Tz(1) == FINGERPRINT_OK) { //creating the charecter file for 1st image + Serial.println("Image converted"); + } else { + Serial.println("Conversion error"); + return; + } + + Serial.println("Remove finger"); + delay(2000); + uint8_t p = 0; + while (p != FINGERPRINT_NOFINGER) { + p = finger.getImage(); + } + + Serial.println("Place same finger again, waiting...."); + while (finger.getImage() != FINGERPRINT_OK) { // press the same finger again to take 2nd image + } + Serial.println("Image taken"); + + + if (finger.image2Tz(2) == FINGERPRINT_OK) { //creating the charecter file for 2nd image + Serial.println("Image converted"); + } else { + Serial.println("Conversion error"); + return; + } + + + Serial.print("Creating model for #"); Serial.println(id); + + + if (finger.createModel() == FINGERPRINT_OK) { //creating the template from the 2 charecter files and saving it to char buffer 1 + Serial.println("Prints matched!"); + Serial.println("Template created"); + } else { + Serial.println("Template not build"); + return; + } + + Serial.print("Attempting to get #"); Serial.println(id); + if (finger.getModel() == FINGERPRINT_OK) { //requesting sensor to transfer the template data to upper computer (this microcontroller) + Serial.print("Template "); Serial.print(id); Serial.println(" transferring:"); + } else { + Serial.print("Failed to transfer"); Serial.print(id); + return; + } + + uint8_t f_buf[512]; //here is where the template data is sotred + + if (finger.get_template_buffer(512, f_buf) == FINGERPRINT_OK) { //read the template data from sensor and save it to buffer f_buf + Serial.println("Template data (comma sperated HEX):"); + for (int k = 0; k < (512/finger.packet_len); k++) { //printing out the template data in seperate rows, where row-length = packet_length + for (int l = 0; l < finger.packet_len; l++) { + Serial.print(f_buf[(k * finger.packet_len) + l], HEX); + Serial.print(","); + } + Serial.println("."); + } + } + + File myFile = SD.open("/"+String(id)+".txt", FILE_WRITE); //naming the saved file as the id number, so creates a id.txt file + if (myFile) { + for(int i=0;i<512;i++){ + myFile.write(f_buf[i]); //writing the buffer to sd card + } + }else{ + Serial.println("error writing file to sd"); + return; + } + myFile.close(); + Serial.println("template saved to sd"); +} + +void loop() {} From e3271be04896cf0f19aa9ad0d4f4ee9fd521c4e8 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sat, 3 Sep 2022 22:39:17 +0600 Subject: [PATCH 07/31] Create write_template_from_SD.ino Example to write back saved template data to the sensor from an external SD card --- .../write_template_from_SD.ino | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 examples/template_transfer/write_template_from_SD/write_template_from_SD.ino diff --git a/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino b/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino new file mode 100644 index 0000000..475a7ea --- /dev/null +++ b/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino @@ -0,0 +1,103 @@ +/******************************************************************************************* + Author: Md. Asifuzzaman Khan (HAALniner21) + Date:9/3/2022 + + This example shows how to write template data to the sensor from an external + SD card using the SD library. (also works with the sdFat library) + First a template is created then it is stored in the SD card as a text file + using the "Save_template_to_SD.ino" example. + That text file can now be written back to the sensor against an ID using this example + + This example is tested on esp32 & arduino Mega 2560 boards. Other boards are also supposed to work. + + Happy coding! :) + *******************************************************************************************/*/ + +#include +#include "FS.h" +#include "SD.h" +#include "SPI.h" + +Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2, 0); + +#define SD_CS 5 //default is 5 for esp32, change according to your hardware connection of SD card + +void setup() { + Serial.begin(115200); + finger.begin(57600); //set your sensor's baudrate + if (finger.verifyPassword()) { + Serial.println("Found fingerprint sensor!"); + } else { + Serial.println("Did not find fingerprint sensor :("); + while (1); + } + if(!SD.begin(SD_CS)){ + Serial.println("Card Mount Failed"); + while(1); + } + uint8_t cardType = SD.cardType(); + if(cardType == CARD_NONE){ + Serial.println("No SD card attached"); + while(1); + } + + write_template_from_SD(); +} + +uint8_t readnumber(void) { + uint8_t num = 0; + + while (num == 0) { + while (! Serial.available()); + num = Serial.parseInt(); + } + return num; +} + +void write_template_from_SD(){ + Serial.println("Ready to write template"); + Serial.println("enter the name of text file, i.e id (1 to 127)"); + int id = readnumber(); + if (id == 0) {// ID #0 not allowed, try again! + return; + } + Serial.print("Writing stored template against ID #");Serial.println(id); + + uint8_t fingerTemplate[512]; //this buffer is where the template data is stored after being read from SD Card + memset(fingerTemplate, 0xff, 512); + + File myFile = SD.open("/"+String(id) + ".txt", FILE_READ); + int i = 0; + if (myFile) { + while (myFile.available()) { + fingerTemplate[i] = myFile.read(); //read templatge file from sd and save to buffer + i = i + 1; + } + } else { + Serial.println("error opening template file from SD"); + } + myFile.close(); + + if (i != 512) { //checking if 512 bytes of template data was recieved or not + Serial.println("template data corrupted or incomplete!"); + return; + } + + + if (finger.write_template_to_sensor(fingerTemplate)) { //telling the sensor to download the template data from upper computer (this microcontroller's "fingerTemplate" buffer) + Serial.println("now saving to library..."); + } else { + Serial.println("writing to sensor failed"); + return; + } + + Serial.print("ID "); Serial.println(id); + if (finger.storeModel(id) == FINGERPRINT_OK) { //saving the template against the ID you entered or manually set + Serial.println("Stored!"); + } else { + Serial.println("Storing error"); + return ; + } +} + +void loop() {} From df19b030175f2d1184752a0290823d4bd33a6ae9 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 00:54:53 +0600 Subject: [PATCH 08/31] Delete examples/show_fingerprint_templates directory --- .../show_fingerprint_templates.ino | 164 ------------------ 1 file changed, 164 deletions(-) delete mode 100644 examples/show_fingerprint_templates/show_fingerprint_templates.ino diff --git a/examples/show_fingerprint_templates/show_fingerprint_templates.ino b/examples/show_fingerprint_templates/show_fingerprint_templates.ino deleted file mode 100644 index d4f2a2d..0000000 --- a/examples/show_fingerprint_templates/show_fingerprint_templates.ino +++ /dev/null @@ -1,164 +0,0 @@ -/*************************************************** - This is an example sketch for our optical Fingerprint sensor - - 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 - -#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); - -int getFingerprintIDez(); - -void setup() -{ - while (!Serial); - Serial.begin(9600); - Serial.println("Fingerprint template extractor"); - - // 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); - } - - // Try to get the templates for fingers 1 through 10 - for (int finger = 1; finger < 10; finger++) { - downloadFingerprintTemplate(finger); - } -} - -uint8_t downloadFingerprintTemplate(uint16_t id) -{ - Serial.println("------------------------------------"); - Serial.print("Attempting to load #"); Serial.println(id); - uint8_t p = finger.loadModel(id); - switch (p) { - case FINGERPRINT_OK: - Serial.print("Template "); Serial.print(id); Serial.println(" loaded"); - break; - case FINGERPRINT_PACKETRECIEVEERR: - Serial.println("Communication error"); - return p; - default: - Serial.print("Unknown error "); Serial.println(p); - return p; - } - - // OK success! - - Serial.print("Attempting to get #"); Serial.println(id); - p = finger.getModel(); - switch (p) { - case FINGERPRINT_OK: - Serial.print("Template "); Serial.print(id); Serial.println(" transferring:"); - break; - default: - Serial.print("Unknown error "); Serial.println(p); - return p; - } - - // one data packet is 267 bytes. in one data packet, 11 bytes are 'usesless' :D - uint8_t bytesReceived[534]; // 2 data packets - memset(bytesReceived, 0xff, 534); - - uint32_t starttime = millis(); - int i = 0; - while (i < 534 && (millis() - starttime) < 20000) { - if (mySerial.available()) { - bytesReceived[i++] = mySerial.read(); - } - } - Serial.print(i); Serial.println(" bytes read."); - Serial.println("Decoding packet..."); - - uint8_t fingerTemplate[512]; // the real template - memset(fingerTemplate, 0xff, 512); - - // filtering only the data packets - int uindx = 9, index = 0; - memcpy(fingerTemplate + index, bytesReceived + uindx, 256); // first 256 bytes - uindx += 256; // skip data - uindx += 2; // skip checksum - uindx += 9; // skip next header - index += 256; // advance pointer - memcpy(fingerTemplate + index, bytesReceived + uindx, 256); // second 256 bytes - - for (int i = 0; i < 512; ++i) { - //Serial.print("0x"); - printHex(fingerTemplate[i], 2); - //Serial.print(", "); - } - Serial.println("\ndone."); - - return p; - - /* - uint8_t templateBuffer[256]; - memset(templateBuffer, 0xff, 256); //zero out template buffer - int index=0; - uint32_t starttime = millis(); - while ((index < 256) && ((millis() - starttime) < 1000)) - { - if (mySerial.available()) - { - templateBuffer[index] = mySerial.read(); - index++; - } - } - - Serial.print(index); Serial.println(" bytes read"); - - //dump entire templateBuffer. This prints out 16 lines of 16 bytes - for (int count= 0; count < 16; count++) - { - for (int i = 0; i < 16; i++) - { - Serial.print("0x"); - Serial.print(templateBuffer[count*16+i], HEX); - Serial.print(", "); - } - Serial.println(); - }*/ -} - - - -void printHex(int num, int precision) { - char tmp[16]; - char format[128]; - - sprintf(format, "%%.%dX", precision); - - sprintf(tmp, format, num); - Serial.print(tmp); -} - -void loop() -{} - From 91190a985b1ac3c81052bd83738584805f71d642 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 01:08:19 +0600 Subject: [PATCH 09/31] Update Adafruit_Fingerprint.h Fixed typo --- Adafruit_Fingerprint.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Adafruit_Fingerprint.h b/Adafruit_Fingerprint.h index b1955f5..43b02bb 100644 --- a/Adafruit_Fingerprint.h +++ b/Adafruit_Fingerprint.h @@ -147,7 +147,7 @@ struct Adafruit_Fingerprint_Packet { address[1] = 0xFF; address[2] = 0xFF; address[3] = 0xFF; - if (length < 256) ///considering max data length for hobby type sensors. + if (length < 256) ///considering max data packet length for hobby type sensors. memcpy(this->data, data, length); else memcpy(this->data, data, 256); From 7c09d02f0480960011d22d0e3c94eb28c9672317 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 10:28:38 +0600 Subject: [PATCH 10/31] Update write_template_from_SD.ino --- .../write_template_from_SD.ino | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino b/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino index 475a7ea..37f2ddb 100644 --- a/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino +++ b/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino @@ -3,24 +3,26 @@ Date:9/3/2022 This example shows how to write template data to the sensor from an external - SD card using the SD library. (also works with the sdFat library) + SD card using the SdFat library. (also works with the SD library) First a template is created then it is stored in the SD card as a text file using the "Save_template_to_SD.ino" example. That text file can now be written back to the sensor against an ID using this example - - This example is tested on esp32 & arduino Mega 2560 boards. Other boards are also supposed to work. Happy coding! :) - *******************************************************************************************/*/ + *******************************************************************************************/ +#include + +SoftwareSerial swser(6, 7); // RX, TX + #include -#include "FS.h" -#include "SD.h" -#include "SPI.h" +#include +#include "SdFat.h" +SdFat SD; -Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2, 0); +Adafruit_Fingerprint finger = Adafruit_Fingerprint(&swser, 0); -#define SD_CS 5 //default is 5 for esp32, change according to your hardware connection of SD card +#define SD_CS 5 //change according to your chip select connection of SD card void setup() { Serial.begin(115200); @@ -35,12 +37,6 @@ void setup() { Serial.println("Card Mount Failed"); while(1); } - uint8_t cardType = SD.cardType(); - if(cardType == CARD_NONE){ - Serial.println("No SD card attached"); - while(1); - } - write_template_from_SD(); } From 581ca56c36601219d83665025be4e7e77307bbcc Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 10:29:27 +0600 Subject: [PATCH 11/31] Update Save_template_to_SD.ino --- .../Save_template_to_SD.ino | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino b/examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino index eca89a8..165649f 100644 --- a/examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino +++ b/examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino @@ -3,7 +3,7 @@ Date:9/3/2022 This example shows how to save template data to an SD card using the - SD library. (also works with the sdFat library) + SsFat library. (also works with the SD library) First a template is created then it is stored in the SD card as a text file. That text file can be written back to the sensor using the "write_template_from_SD.ino" example @@ -11,18 +11,21 @@ Happy coding! :) *******************************************************************************************/ - +#include + +SoftwareSerial swser(6, 7); // RX, TX + #include -#include "FS.h" -#include "SD.h" -#include "SPI.h" +#include +#include "SdFat.h" +SdFat SD; -Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2, 0); +Adafruit_Fingerprint finger = Adafruit_Fingerprint(&swser, 0); -#define SD_CS 5 //default is 5 for esp32, change according to your hardware connection of SD card +#define SD_CS 5 //change according to your chip select connection of SD card void setup() { - Serial.begin(115200); + Serial.begin(9600); finger.begin(57600); //set your sensor's baudrate if (finger.verifyPassword()) { Serial.println("Found fingerprint sensor!"); @@ -34,11 +37,6 @@ void setup() { Serial.println("Card Mount Failed"); while(1); } - uint8_t cardType = SD.cardType(); - if(cardType == CARD_NONE){ - Serial.println("No SD card attached"); - while(1); - } save_template_to_SD(); From 1de16a59e4e9bd82ff0267bc3da98679769c3b51 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 10:45:55 +0600 Subject: [PATCH 12/31] Update write_template_from_SD.ino Arduino cli dependency solve --- .../write_template_from_SD/write_template_from_SD.ino | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino b/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino index 37f2ddb..854d7f7 100644 --- a/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino +++ b/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino @@ -3,22 +3,20 @@ Date:9/3/2022 This example shows how to write template data to the sensor from an external - SD card using the SdFat library. (also works with the SD library) + SD card using the SD library. First a template is created then it is stored in the SD card as a text file using the "Save_template_to_SD.ino" example. That text file can now be written back to the sensor against an ID using this example Happy coding! :) *******************************************************************************************/ - +#include #include SoftwareSerial swser(6, 7); // RX, TX -#include #include -#include "SdFat.h" -SdFat SD; +#include Adafruit_Fingerprint finger = Adafruit_Fingerprint(&swser, 0); From dcf597b11fbd5aa9a57d279208e8bc43bb6ae220 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 11:15:48 +0600 Subject: [PATCH 13/31] Delete examples/template_transfer/Save_template_to_SD directory --- .../Save_template_to_SD.ino | 143 ------------------ 1 file changed, 143 deletions(-) delete mode 100644 examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino diff --git a/examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino b/examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino deleted file mode 100644 index 165649f..0000000 --- a/examples/template_transfer/Save_template_to_SD/Save_template_to_SD.ino +++ /dev/null @@ -1,143 +0,0 @@ -/******************************************************************************************* - Author: Md. Asifuzzaman Khan (HAALniner21) - Date:9/3/2022 - - This example shows how to save template data to an SD card using the - SsFat library. (also works with the SD library) - First a template is created then it is stored in the SD card as a text file. - That text file can be written back to the sensor using the "write_template_from_SD.ino" example - - This example is tested on esp32 & arduino Mega 2560 boards. Other boards are also supposed to work. - - Happy coding! :) - *******************************************************************************************/ -#include - -SoftwareSerial swser(6, 7); // RX, TX - -#include -#include -#include "SdFat.h" -SdFat SD; - -Adafruit_Fingerprint finger = Adafruit_Fingerprint(&swser, 0); - -#define SD_CS 5 //change according to your chip select connection of SD card - -void setup() { - Serial.begin(9600); - finger.begin(57600); //set your sensor's baudrate - if (finger.verifyPassword()) { - Serial.println("Found fingerprint sensor!"); - } else { - Serial.println("Did not find fingerprint sensor :("); - while (1); - } - if(!SD.begin(SD_CS)){ - Serial.println("Card Mount Failed"); - while(1); - } - - save_template_to_SD(); - -} - -uint8_t readnumber(void) { - uint8_t num = 0; - - while (num == 0) { - while (! Serial.available()); - num = Serial.parseInt(); - } - return num; -} - -void save_template_to_SD(){ - 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..."); - int id = readnumber(); - if (id == 0) {// ID #0 not allowed, try again! - return; - } - Serial.print("Enrolling ID #"); - Serial.println(id); - Serial.print("Waiting for valid finger to enroll as ID:"); Serial.println(id); - while (finger.getImage() != FINGERPRINT_OK) { // press down a finger take 1st image - } - Serial.println("Image taken"); - - - if (finger.image2Tz(1) == FINGERPRINT_OK) { //creating the charecter file for 1st image - Serial.println("Image converted"); - } else { - Serial.println("Conversion error"); - return; - } - - Serial.println("Remove finger"); - delay(2000); - uint8_t p = 0; - while (p != FINGERPRINT_NOFINGER) { - p = finger.getImage(); - } - - Serial.println("Place same finger again, waiting...."); - while (finger.getImage() != FINGERPRINT_OK) { // press the same finger again to take 2nd image - } - Serial.println("Image taken"); - - - if (finger.image2Tz(2) == FINGERPRINT_OK) { //creating the charecter file for 2nd image - Serial.println("Image converted"); - } else { - Serial.println("Conversion error"); - return; - } - - - Serial.print("Creating model for #"); Serial.println(id); - - - if (finger.createModel() == FINGERPRINT_OK) { //creating the template from the 2 charecter files and saving it to char buffer 1 - Serial.println("Prints matched!"); - Serial.println("Template created"); - } else { - Serial.println("Template not build"); - return; - } - - Serial.print("Attempting to get #"); Serial.println(id); - if (finger.getModel() == FINGERPRINT_OK) { //requesting sensor to transfer the template data to upper computer (this microcontroller) - Serial.print("Template "); Serial.print(id); Serial.println(" transferring:"); - } else { - Serial.print("Failed to transfer"); Serial.print(id); - return; - } - - uint8_t f_buf[512]; //here is where the template data is sotred - - if (finger.get_template_buffer(512, f_buf) == FINGERPRINT_OK) { //read the template data from sensor and save it to buffer f_buf - Serial.println("Template data (comma sperated HEX):"); - for (int k = 0; k < (512/finger.packet_len); k++) { //printing out the template data in seperate rows, where row-length = packet_length - for (int l = 0; l < finger.packet_len; l++) { - Serial.print(f_buf[(k * finger.packet_len) + l], HEX); - Serial.print(","); - } - Serial.println("."); - } - } - - File myFile = SD.open("/"+String(id)+".txt", FILE_WRITE); //naming the saved file as the id number, so creates a id.txt file - if (myFile) { - for(int i=0;i<512;i++){ - myFile.write(f_buf[i]); //writing the buffer to sd card - } - }else{ - Serial.println("error writing file to sd"); - return; - } - myFile.close(); - Serial.println("template saved to sd"); -} - -void loop() {} From 7f37144abcbf45dc8ac89ad71dc6a5497a2d480e Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 11:19:15 +0600 Subject: [PATCH 14/31] Create get_template.ino Basic example of reading template data and store in an array buffer --- .../get_template/get_template.ino | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 examples/template_transfer/get_template/get_template.ino diff --git a/examples/template_transfer/get_template/get_template.ino b/examples/template_transfer/get_template/get_template.ino new file mode 100644 index 0000000..2718c48 --- /dev/null +++ b/examples/template_transfer/get_template/get_template.ino @@ -0,0 +1,103 @@ +/******************************************************************************************* + Author: Md. Asifuzzaman Khan (HAALniner21) + Date:9/3/2022 + + This example shows how to save template data to an 512 byte array buffer for further + manipulation (i.e: save in SD card or cloud). + + You can load this data on the 'fingerTemplate' buffer of the "write_template_from_SD.ino" + example to write it back to the sensor. + + Happy coding! :) + *******************************************************************************************/ +#include +#include + +SoftwareSerial swser(6, 7); // RX, TX + +Adafruit_Fingerprint finger = Adafruit_Fingerprint(&swser, 0); + + +uint8_t f_buf[512]; //here is where the template data is sotred + +void setup() { + Serial.begin(9600); + finger.begin(57600); //set your sensor's baudrate + if (finger.verifyPassword()) { + Serial.println("Found fingerprint sensor!"); + } else { + Serial.println("Did not find fingerprint sensor :("); + while (1); + } + store_template_to_buf(); +} + + +void store_template_to_buf(){ + + Serial.println("Waiting for valid finger...."); + while (finger.getImage() != FINGERPRINT_OK) { // press down a finger take 1st image + } + Serial.println("Image taken"); + + + if (finger.image2Tz(1) == FINGERPRINT_OK) { //creating the charecter file for 1st image + Serial.println("Image converted"); + } else { + Serial.println("Conversion error"); + return; + } + + Serial.println("Remove finger"); + delay(2000); + uint8_t p = 0; + while (p != FINGERPRINT_NOFINGER) { + p = finger.getImage(); + } + + Serial.println("Place same finger again, waiting...."); + while (finger.getImage() != FINGERPRINT_OK) { // press the same finger again to take 2nd image + } + Serial.println("Image taken"); + + + if (finger.image2Tz(2) == FINGERPRINT_OK) { //creating the charecter file for 2nd image + Serial.println("Image converted"); + } else { + Serial.println("Conversion error"); + return; + } + + + Serial.println("Creating model..."); + + if (finger.createModel() == FINGERPRINT_OK) { //creating the template from the 2 charecter files and saving it to char buffer 1 + Serial.println("Prints matched!"); + Serial.println("Template created"); + } else { + Serial.println("Template not build"); + return; + } + + Serial.println("Attempting to get template..."); + if (finger.getModel() == FINGERPRINT_OK) { //requesting sensor to transfer the template data to upper computer (this microcontroller) + Serial.println("Transferring Template...."); + } else { + Serial.println("Failed to transfer template"); + return; + } + + if (finger.get_template_buffer(512, f_buf) == FINGERPRINT_OK) { //read the template data from sensor and save it to buffer f_buf + Serial.println("Template data (comma sperated HEX):"); + for (int k = 0; k < (512/finger.packet_len); k++) { //printing out the template data in seperate rows, where row-length = packet_length + for (int l = 0; l < finger.packet_len; l++) { + Serial.print(f_buf[(k * finger.packet_len) + l], HEX); + Serial.print(","); + } + Serial.println("."); + } + } + +} + +void loop() {} From f1a9aa8f7e157d61e09e14b32a9badb7fac30556 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 11:48:09 +0600 Subject: [PATCH 15/31] Delete examples/template_transfer/write_template_from_SD directory --- .../write_template_from_SD.ino | 97 ------------------- 1 file changed, 97 deletions(-) delete mode 100644 examples/template_transfer/write_template_from_SD/write_template_from_SD.ino diff --git a/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino b/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino deleted file mode 100644 index 854d7f7..0000000 --- a/examples/template_transfer/write_template_from_SD/write_template_from_SD.ino +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************************* - Author: Md. Asifuzzaman Khan (HAALniner21) - Date:9/3/2022 - - This example shows how to write template data to the sensor from an external - SD card using the SD library. - First a template is created then it is stored in the SD card as a text file - using the "Save_template_to_SD.ino" example. - That text file can now be written back to the sensor against an ID using this example - - Happy coding! :) - *******************************************************************************************/ -#include -#include - -SoftwareSerial swser(6, 7); // RX, TX - -#include -#include - -Adafruit_Fingerprint finger = Adafruit_Fingerprint(&swser, 0); - -#define SD_CS 5 //change according to your chip select connection of SD card - -void setup() { - Serial.begin(115200); - finger.begin(57600); //set your sensor's baudrate - if (finger.verifyPassword()) { - Serial.println("Found fingerprint sensor!"); - } else { - Serial.println("Did not find fingerprint sensor :("); - while (1); - } - if(!SD.begin(SD_CS)){ - Serial.println("Card Mount Failed"); - while(1); - } - write_template_from_SD(); -} - -uint8_t readnumber(void) { - uint8_t num = 0; - - while (num == 0) { - while (! Serial.available()); - num = Serial.parseInt(); - } - return num; -} - -void write_template_from_SD(){ - Serial.println("Ready to write template"); - Serial.println("enter the name of text file, i.e id (1 to 127)"); - int id = readnumber(); - if (id == 0) {// ID #0 not allowed, try again! - return; - } - Serial.print("Writing stored template against ID #");Serial.println(id); - - uint8_t fingerTemplate[512]; //this buffer is where the template data is stored after being read from SD Card - memset(fingerTemplate, 0xff, 512); - - File myFile = SD.open("/"+String(id) + ".txt", FILE_READ); - int i = 0; - if (myFile) { - while (myFile.available()) { - fingerTemplate[i] = myFile.read(); //read templatge file from sd and save to buffer - i = i + 1; - } - } else { - Serial.println("error opening template file from SD"); - } - myFile.close(); - - if (i != 512) { //checking if 512 bytes of template data was recieved or not - Serial.println("template data corrupted or incomplete!"); - return; - } - - - if (finger.write_template_to_sensor(fingerTemplate)) { //telling the sensor to download the template data from upper computer (this microcontroller's "fingerTemplate" buffer) - Serial.println("now saving to library..."); - } else { - Serial.println("writing to sensor failed"); - return; - } - - Serial.print("ID "); Serial.println(id); - if (finger.storeModel(id) == FINGERPRINT_OK) { //saving the template against the ID you entered or manually set - Serial.println("Stored!"); - } else { - Serial.println("Storing error"); - return ; - } -} - -void loop() {} From 77f0e9124857d318b7efa8b200781490fc12729f Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 11:49:15 +0600 Subject: [PATCH 16/31] Create write_template_to_sensor.ino Basic example to properly write template data to the sensor and enroll against an ID. --- .../write_template_to_sensor.ino | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 examples/template_transfer/write_template_to_sensor/write_template_to_sensor.ino diff --git a/examples/template_transfer/write_template_to_sensor/write_template_to_sensor.ino b/examples/template_transfer/write_template_to_sensor/write_template_to_sensor.ino new file mode 100644 index 0000000..5c7309f --- /dev/null +++ b/examples/template_transfer/write_template_to_sensor/write_template_to_sensor.ino @@ -0,0 +1,87 @@ +/******************************************************************************************* + Author: Md. Asifuzzaman Khan (HAALniner21) + Date:9/3/2022 + + This example shows how to write template data to the sensor + and enroll aginst an ID. + + The teplate data is stored initially in the microcontroller + saved within the microcontroller (can be fetched from SD card or cloud) + + To work with this example first get the template data from "get_template.ino" example. Then store it in + the 'fingerTemplate' array buffer in this code. Then the template data will + be written to the sensor and be enrolled against an ID. + + Happy coding! :) + *******************************************************************************************/ +#include +#include + +SoftwareSerial swser(6, 7); // RX, TX + +Adafruit_Fingerprint finger = Adafruit_Fingerprint(&swser, 0); + +void setup() { + Serial.begin(115200); + finger.begin(57600); //set your sensor's baudrate + if (finger.verifyPassword()) { + Serial.println("Found fingerprint sensor!"); + } else { + Serial.println("Did not find fingerprint sensor :("); + while (1); + } + write_template_to_sensor(); +} + +uint8_t readnumber(void) { + uint8_t num = 0; + + while (num == 0) { + while (! Serial.available()); + num = Serial.parseInt(); + } + return num; +} + +void write_template_to_sensor() { + uint8_t fingerTemplate[512]; //this where you need to store your template data + memset(fingerTemplate, 0xff, 512); + + /* + a template given to store your template data(read from sd or form cloud) in fingerTemplate buffer + + for(int i=0;i<512;i++){ + fingerTemplate[i]=your_template_data[i]; + } + + or you can manually save the data got from "get_template.ino" example + + uint8_t fingerTemplate[512]={0x03,0x0E,...........}; + + */ + + Serial.println("Ready to write template to sensor..."); + Serial.println("Enter the id to enroll against, i.e id (1 to 127)"); + int id = readnumber(); + if (id == 0) {// ID #0 not allowed, try again! + return; + } + Serial.print("Writing template against ID #"); Serial.println(id); + + if (finger.write_template_to_sensor(fingerTemplate)) { //telling the sensor to download the template data to it's char buffer from upper computer (this microcontroller's "fingerTemplate" buffer) + Serial.println("now writing to sensor..."); + } else { + Serial.println("writing to sensor failed"); + return; + } + + Serial.print("ID "); Serial.println(id); + if (finger.storeModel(id) == FINGERPRINT_OK) { //saving the template against the ID you entered or manually set + Serial.print("Successfully stored against ID#");Serial.println(id); + } else { + Serial.println("Storing error"); + return ; + } +} + +void loop() {} From b014fde1bb47db449e63fc57b4379f9f22c2e4cc Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 11:54:51 +0600 Subject: [PATCH 17/31] Create write_to_sensor --- examples/template_transfer/write_to_sensor | 1 + 1 file changed, 1 insertion(+) create mode 100644 examples/template_transfer/write_to_sensor diff --git a/examples/template_transfer/write_to_sensor b/examples/template_transfer/write_to_sensor new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/examples/template_transfer/write_to_sensor @@ -0,0 +1 @@ + From 6856e1e97044a1e43d21779abd0b571e4dc92fa9 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 11:55:15 +0600 Subject: [PATCH 18/31] Delete write_to_sensor --- examples/template_transfer/write_to_sensor | 1 - 1 file changed, 1 deletion(-) delete mode 100644 examples/template_transfer/write_to_sensor diff --git a/examples/template_transfer/write_to_sensor b/examples/template_transfer/write_to_sensor deleted file mode 100644 index 8b13789..0000000 --- a/examples/template_transfer/write_to_sensor +++ /dev/null @@ -1 +0,0 @@ - From dce9e68178d9948353cd1f6b27469c5f66fb4f88 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 11:56:03 +0600 Subject: [PATCH 19/31] Rename examples/template_transfer/write_template_to_sensor/write_template_to_sensor.ino to examples/template_transfer/write_to_sensor/write_to_sensor.ino --- .../write_to_sensor.ino} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/template_transfer/{write_template_to_sensor/write_template_to_sensor.ino => write_to_sensor/write_to_sensor.ino} (100%) diff --git a/examples/template_transfer/write_template_to_sensor/write_template_to_sensor.ino b/examples/template_transfer/write_to_sensor/write_to_sensor.ino similarity index 100% rename from examples/template_transfer/write_template_to_sensor/write_template_to_sensor.ino rename to examples/template_transfer/write_to_sensor/write_to_sensor.ino From 4024437d9761af80b7147d9aa588a2973b2c9335 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Sun, 4 Sep 2022 11:59:29 +0600 Subject: [PATCH 20/31] Update write_to_sensor.ino --- .../template_transfer/write_to_sensor/write_to_sensor.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/template_transfer/write_to_sensor/write_to_sensor.ino b/examples/template_transfer/write_to_sensor/write_to_sensor.ino index 5c7309f..2d7e2e0 100644 --- a/examples/template_transfer/write_to_sensor/write_to_sensor.ino +++ b/examples/template_transfer/write_to_sensor/write_to_sensor.ino @@ -30,7 +30,7 @@ void setup() { Serial.println("Did not find fingerprint sensor :("); while (1); } - write_template_to_sensor(); + write_template_data_to_sensor(); } uint8_t readnumber(void) { @@ -43,7 +43,7 @@ uint8_t readnumber(void) { return num; } -void write_template_to_sensor() { +void write_template_data_to_sensor() { uint8_t fingerTemplate[512]; //this where you need to store your template data memset(fingerTemplate, 0xff, 512); From 3b21704794af40eae7850cac283a7f033ffab840 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Tue, 6 Sep 2022 20:35:25 +0600 Subject: [PATCH 21/31] Update Adafruit_Fingerprint.cpp Fixed issues with 'write_template_to_sensor' function. --- Adafruit_Fingerprint.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Adafruit_Fingerprint.cpp b/Adafruit_Fingerprint.cpp index 4f4d485..d8f0afc 100644 --- a/Adafruit_Fingerprint.cpp +++ b/Adafruit_Fingerprint.cpp @@ -320,7 +320,7 @@ boolean Adafruit_Fingerprint::write_template_to_sensor(uint8_t ref_buf[]) { //ne if(downloadModel(0x01) != FINGERPRINT_OK)return false; //check if buffer 1 is ready to be loaded int div=ceil(sizeof(ref_buf)/packet_len); uint8_t data[packet_len]; - memset(ref_buf, 0xff, packet_len); + memset(data, 0xff, packet_len); Adafruit_Fingerprint_Packet t_packet(FINGERPRINT_DATAPACKET,sizeof(data),data); for(int i=0;i Date: Tue, 6 Sep 2022 20:40:15 +0600 Subject: [PATCH 22/31] Update get_template.ino --- examples/template_transfer/get_template/get_template.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/template_transfer/get_template/get_template.ino b/examples/template_transfer/get_template/get_template.ino index 2718c48..30ccec0 100644 --- a/examples/template_transfer/get_template/get_template.ino +++ b/examples/template_transfer/get_template/get_template.ino @@ -91,6 +91,7 @@ void store_template_to_buf(){ Serial.println("Template data (comma sperated HEX):"); for (int k = 0; k < (512/finger.packet_len); k++) { //printing out the template data in seperate rows, where row-length = packet_length for (int l = 0; l < finger.packet_len; l++) { + Serial.print("0x"); Serial.print(f_buf[(k * finger.packet_len) + l], HEX); Serial.print(","); } From a7d23cedbab07fdc0731ba7428163543de52faf2 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Tue, 6 Sep 2022 20:41:18 +0600 Subject: [PATCH 23/31] Update write_to_sensor.ino --- examples/template_transfer/write_to_sensor/write_to_sensor.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/template_transfer/write_to_sensor/write_to_sensor.ino b/examples/template_transfer/write_to_sensor/write_to_sensor.ino index 2d7e2e0..aa2a87f 100644 --- a/examples/template_transfer/write_to_sensor/write_to_sensor.ino +++ b/examples/template_transfer/write_to_sensor/write_to_sensor.ino @@ -45,7 +45,7 @@ uint8_t readnumber(void) { void write_template_data_to_sensor() { uint8_t fingerTemplate[512]; //this where you need to store your template data - memset(fingerTemplate, 0xff, 512); + memset(fingerTemplate, 0xff, 512); //comment this if you've manually put data to the line above /* a template given to store your template data(read from sd or form cloud) in fingerTemplate buffer From ac12296d6ac21af5ce2928c056ea4f4acad989c3 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Thu, 8 Sep 2022 14:58:50 +0600 Subject: [PATCH 24/31] Update Adafruit_Fingerprint.cpp Fixed template buffer size issues --- Adafruit_Fingerprint.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Adafruit_Fingerprint.cpp b/Adafruit_Fingerprint.cpp index d8f0afc..c5f4663 100644 --- a/Adafruit_Fingerprint.cpp +++ b/Adafruit_Fingerprint.cpp @@ -316,9 +316,9 @@ uint8_t Adafruit_Fingerprint::downloadModel(uint8_t buffer_no) { //new addition @returns true/false (successful or not) */ /**************************************************************************/ -boolean Adafruit_Fingerprint::write_template_to_sensor(uint8_t ref_buf[]) { //new addition +boolean Adafruit_Fingerprint::write_template_to_sensor(int temp_Size, uint8_t ref_buf[]) { //new addition if(downloadModel(0x01) != FINGERPRINT_OK)return false; //check if buffer 1 is ready to be loaded - int div=ceil(sizeof(ref_buf)/packet_len); + int div=ceil(temp_Size/packet_len); uint8_t data[packet_len]; memset(data, 0xff, packet_len); Adafruit_Fingerprint_Packet t_packet(FINGERPRINT_DATAPACKET,sizeof(data),data); From 98b322439007f704ac269a54c771c7f4875e39b9 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Thu, 8 Sep 2022 15:00:15 +0600 Subject: [PATCH 25/31] Update Adafruit_Fingerprint.h Fixed template size issues --- Adafruit_Fingerprint.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Adafruit_Fingerprint.h b/Adafruit_Fingerprint.h index 43b02bb..7b7f0d7 100644 --- a/Adafruit_Fingerprint.h +++ b/Adafruit_Fingerprint.h @@ -183,7 +183,7 @@ class Adafruit_Fingerprint { uint8_t getModel(void); uint8_t get_template_buffer(int bufsize,uint8_t ref_buf[]); // new addiiton,for getting template data from sensor uint8_t downloadModel(uint8_t buffer_no); //new addiiton,for loading template data to buffer - boolean write_template_to_sensor(uint8_t ref_buf[]) ; // new addition, for writing template data to sensor + boolean write_template_to_sensor(int temp_Size, uint8_t ref_buf[]) ; // new addition, for writing template data to sensor uint8_t deleteModel(uint16_t id); uint8_t fingerFastSearch(void); uint8_t fingerSearch(uint8_t slot = 1); From 3c69f84d2cb0dd43c68dff3467ce57d2158e54c9 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Thu, 8 Sep 2022 15:06:34 +0600 Subject: [PATCH 26/31] Update write_to_sensor.ino Clarified the buf size issue --- .../write_to_sensor/write_to_sensor.ino | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/examples/template_transfer/write_to_sensor/write_to_sensor.ino b/examples/template_transfer/write_to_sensor/write_to_sensor.ino index aa2a87f..941ecbb 100644 --- a/examples/template_transfer/write_to_sensor/write_to_sensor.ino +++ b/examples/template_transfer/write_to_sensor/write_to_sensor.ino @@ -8,7 +8,7 @@ The teplate data is stored initially in the microcontroller saved within the microcontroller (can be fetched from SD card or cloud) - To work with this example first get the template data from "get_template.ino" example. Then store it in + To work with this example first get the template data from "get_direct_template.ino" example. Then store it in the 'fingerTemplate' array buffer in this code. Then the template data will be written to the sensor and be enrolled against an ID. @@ -44,22 +44,17 @@ uint8_t readnumber(void) { } void write_template_data_to_sensor() { - uint8_t fingerTemplate[512]; //this where you need to store your template data - memset(fingerTemplate, 0xff, 512); //comment this if you've manually put data to the line above - - /* - a template given to store your template data(read from sd or form cloud) in fingerTemplate buffer + int template_buf_size=512; //usually hobby grade sensors have 512 byte template data, watch datasheet to know the info - for(int i=0;i<512;i++){ - fingerTemplate[i]=your_template_data[i]; - } - - or you can manually save the data got from "get_template.ino" example + uint8_t fingerTemplate[512]; //this is where you need to store your template data + /* + you can manually save the data got from "get_template.ino" example like this - uint8_t fingerTemplate[512]={0x03,0x0E,...........}; + uint8_t fingerTemplate[512]={0x03,0x0E,....your template data.....}; */ - + memset(fingerTemplate, 0xff, 512); //comment this line if you've manually put data to the line above + Serial.println("Ready to write template to sensor..."); Serial.println("Enter the id to enroll against, i.e id (1 to 127)"); int id = readnumber(); @@ -68,7 +63,7 @@ void write_template_data_to_sensor() { } Serial.print("Writing template against ID #"); Serial.println(id); - if (finger.write_template_to_sensor(fingerTemplate)) { //telling the sensor to download the template data to it's char buffer from upper computer (this microcontroller's "fingerTemplate" buffer) + if (finger.write_template_to_sensor(template_buf_size,fingerTemplate)) { //telling the sensor to download the template data to it's char buffer from upper computer (this microcontroller's "fingerTemplate" buffer) Serial.println("now writing to sensor..."); } else { Serial.println("writing to sensor failed"); From 854e37d343a75a9cbcff07366ca1618f0a3f14a1 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Thu, 8 Sep 2022 15:08:04 +0600 Subject: [PATCH 27/31] Update and rename examples/template_transfer/get_template/get_template.ino to examples/template_transfer/get_direct_template/get_direct_template.ino --- .../get_direct_template.ino} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename examples/template_transfer/{get_template/get_template.ino => get_direct_template/get_direct_template.ino} (99%) diff --git a/examples/template_transfer/get_template/get_template.ino b/examples/template_transfer/get_direct_template/get_direct_template.ino similarity index 99% rename from examples/template_transfer/get_template/get_template.ino rename to examples/template_transfer/get_direct_template/get_direct_template.ino index 30ccec0..1bb9397 100644 --- a/examples/template_transfer/get_template/get_template.ino +++ b/examples/template_transfer/get_direct_template/get_direct_template.ino @@ -95,7 +95,7 @@ void store_template_to_buf(){ Serial.print(f_buf[(k * finger.packet_len) + l], HEX); Serial.print(","); } - Serial.println("."); + Serial.println(""); } } From 7b9f1e3a2fa82ca5a8e3b24c40f6b94183959adc Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Thu, 8 Sep 2022 15:53:45 +0600 Subject: [PATCH 28/31] Create show_saved_template.ino example to show already saved template data --- .../show_saved_template.ino | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 examples/template_transfer/show_saved_template/show_saved_template.ino diff --git a/examples/template_transfer/show_saved_template/show_saved_template.ino b/examples/template_transfer/show_saved_template/show_saved_template.ino new file mode 100644 index 0000000..57bdf9a --- /dev/null +++ b/examples/template_transfer/show_saved_template/show_saved_template.ino @@ -0,0 +1,86 @@ +/******************************************************************************************* + Author: Md. Asifuzzaman Khan (HAALniner21) + Date:9/3/2022 + + This example shows how to read already saved template data from the sensor + + Happy coding! :) + *******************************************************************************************/ + +#include + +#include +SoftwareSerial swser(6, 7); // RX, TX + +#define mySerial swser + +Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial, 0); + +void setup() +{ Serial.begin(115200); + finger.begin(57600); + delay(5000); + if (finger.verifyPassword()) { + Serial.println("Found fingerprint sensor!"); + } else { + Serial.println("Did not find fingerprint sensor :("); + while (1); + } + + 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(); + Serial.print(F("stored template: ")); Serial.println(finger.templateCount); + + show_from_saved(5); //input the id of the template you want to see, in this example it is 5 + +} + +void show_from_saved(uint16_t id) { + Serial.println("------------------------------------"); + Serial.print("Attempting to load #"); Serial.println(id); + uint8_t p = finger.loadModel(id); + switch (p) { + case FINGERPRINT_OK: + Serial.print("Template "); Serial.print(id); Serial.println(" loaded"); + break; + case FINGERPRINT_PACKETRECIEVEERR: + Serial.println("Communication error"); + return; + default: + Serial.print("Unknown error "); Serial.println(p); + return ; + } + + // OK success! + + Serial.print("Attempting to get #"); Serial.println(id); + p = finger.getModel(); + switch (p) { + case FINGERPRINT_OK: + Serial.print("Template "); Serial.print(id); Serial.println(" transferring:"); + break; + default: + Serial.print("Unknown error "); Serial.println(p); + return; + } + + uint8_t f_buf[512]; + if (finger.get_template_buffer(512, f_buf) == FINGERPRINT_OK) { + for (int k = 0; k < 4; k++) { + for (int l = 0; l < 128; l++) { + Serial.print(f_buf[(k * 128) + l], HEX); + Serial.print(","); + } + Serial.println(""); + } + } +} + + +void loop() {} From 25fef2c82ff8ab5c18a128158aeff3fedd968975 Mon Sep 17 00:00:00 2001 From: HAALniner21 Date: Thu, 8 Sep 2022 16:04:33 +0600 Subject: [PATCH 29/31] Update Adafruit_Fingerprint.cpp --- Adafruit_Fingerprint.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Adafruit_Fingerprint.cpp b/Adafruit_Fingerprint.cpp index c5f4663..b289adc 100644 --- a/Adafruit_Fingerprint.cpp +++ b/Adafruit_Fingerprint.cpp @@ -320,8 +320,8 @@ boolean Adafruit_Fingerprint::write_template_to_sensor(int temp_Size, uint8_t re if(downloadModel(0x01) != FINGERPRINT_OK)return false; //check if buffer 1 is ready to be loaded int div=ceil(temp_Size/packet_len); uint8_t data[packet_len]; - memset(data, 0xff, packet_len); - Adafruit_Fingerprint_Packet t_packet(FINGERPRINT_DATAPACKET,sizeof(data),data); + //memset(data, 0xff, packet_len); + Adafruit_Fingerprint_Packet t_packet(FINGERPRINT_DATAPACKET,packet_len,data); for(int i=0;i Date: Wed, 14 Sep 2022 13:26:52 +0600 Subject: [PATCH 30/31] Update Adafruit_Fingerprint.cpp Fixed issue with memset --- Adafruit_Fingerprint.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Adafruit_Fingerprint.cpp b/Adafruit_Fingerprint.cpp index b289adc..d79f0d1 100644 --- a/Adafruit_Fingerprint.cpp +++ b/Adafruit_Fingerprint.cpp @@ -289,7 +289,7 @@ uint8_t Adafruit_Fingerprint::get_template_buffer(int bufsize,uint8_t ref_buf[]) } } if(i!=rcv_bt_len) return FINGERPRINT_TIMEOUT; - memset(ref_buf, 0xff, 512); + memset(ref_buf, 0xff, bufsize); for(int m=0;m Date: Wed, 14 Sep 2022 15:32:42 +0600 Subject: [PATCH 31/31] Update Adafruit_Fingerprint.cpp --- Adafruit_Fingerprint.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Adafruit_Fingerprint.cpp b/Adafruit_Fingerprint.cpp index d79f0d1..60d8847 100644 --- a/Adafruit_Fingerprint.cpp +++ b/Adafruit_Fingerprint.cpp @@ -276,8 +276,8 @@ uint8_t Adafruit_Fingerprint::getModel(void) { */ /**************************************************************************/ uint8_t Adafruit_Fingerprint::get_template_buffer(int bufsize,uint8_t ref_buf[]) { //new addition - int rcv_bt_len=(packet_len+11)*4; //data packet contains 11 extra bytes(first->2-header,4-address,1-type,2-length,last->2-checksum) excpet the main data int div=ceil(bufsize/packet_len); + int rcv_bt_len=(packet_len+11)*div; //data packet contains 11 extra bytes(first->2-header,4-address,1-type,2-length,last->2-checksum) excpet the main data uint8_t bytesReceived[rcv_bt_len]; memset(bytesReceived, 0xff, rcv_bt_len); uint32_t starttime = millis();