Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

SAGAR Mini 2

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 49

A Report on

Fingerprint Attendance System.


for
Mini Project-1B of SECOND Year,(SE Sem IV)
in
Electrical Engineering
By

Sagar Pandurang Ingle (18)


Roshit Anil Jain (20)
Prathamesh Govind Kalsekar (21)
Dhruv Pramod Karde (24)

Under the guidance of

Ms.Kalyani Soni

DEPARTMENT OF ELECTRICAL ENGINEERING


ST. FRANCIS INSTITUTE OF TECHNOLOGY
UNIVERSITY OF MUMBAI
AY 2023-2024

1
CERTIFICATE

This is to certify that the project entitled Fingerprint attendance system is a bonafide
work of

Sagar Pandurang Ingle (18)


Roshit Anil Jain (20)
Prathamesh Govind Kalsekar (21)
Dhruv Pramod Karde (24)

submitted to the University of Mumbai in partial fulfillment of the requirement for the award
of Mini Project of SECOND Year,(SE Sem IV) in Electrical Engineering as laid down by
the University of Mumbai during academic year 2023-24.

( ) ( )

Examiner/Reviewer-1 Examiner/ Reviewer -2

MS.KALYANI SONI MS.MEGHA FERNANDES DR.SINCYGEORGE

Guide Head of Department Principal

2
INDEX
SR. NAME OF TOPIC PAGE
NO. NUMBER
1 Introduction 5
1.1 Need
1.2 Definition
2 Comparative study. (similar projects 6
done previously)
3 Problem statement 8
4 Mini project design (principle and 9
working)
4.1 Block diagram
4.2 Principle
4.3 Working
5 Components/tools to be used 11
5.1 Components
5.2 Software
5.3 Source code
6 Troubleshooting 42
6.1 Problems/faults in project
6.2 Steps to solve problems/faults in the project

7 Futurescope 44
8 Project price 45
9 Advantages 46
10 Disadvantages 46
11 Applications 47
12 Result 47
13 Conclusion 48
14 References

3
INDEX

SR. NO. NAME OF TOPIC PAGE NUMBER


1 Figure no.4.1.1 9

2 Figure no.5.1.1 11

References
Appendix: Datasheets of components

4
1. INTRODUCTION :-
1.1 NEED:-
An IoT-based fingerprint attendance system revolutionizes attendance
tracking for businesses, educational institutions, and organizations. By
seamlessly integrating IoT technology with biometric authentication, these
systems offer unparalleled accuracy, security, and convenience. They
streamline administrative processes, providing real-time data insights that
enable prompt decision-making. With the ability to effortlessly scale to
various organizational sizes, these systems ensure compliance with
regulatory requirements while minimizing costs in the long run. Moreover,
their contactless functionality prioritizes data security and promotes health
and safety measures. By fostering accountability through accurate attendance
records and deterring fraudulent behavior, IoT-based fingerprint attendance
systems serve as a cornerstone of efficient, secure, and compliant
organizational operations.

1.2 DEFINITION:-
An IoT-based attendance system is an innovative solution utilized by
organizations and institutions to monitor and manage the attendance of
individuals through the integration of Internet of Things (IoT) technology.
This system operates by capturing and analyzing the unique fingerprint
patterns of individuals using a fingerprint scanner or sensor connected to an
IoT network. By leveraging IoT capabilities, such as real-time data
transmission and remote access, the system accurately identifies and records
attendance by matching fingerprint data with pre-registered templates stored
in a centralized database. This advanced system offers unparalleled accuracy,
security, and efficiency, providing organizations with a reliable and
convenient method for tracking attendance while optimizing administrative
processes.

5
2. COMPARATIVE STUDY :-
Hardware Components:
Project: Utilizes a fingerprint scanner, microcontroller and OLED display
Commercial Products: Similar components are used in commercial solutions,
including fingerprint scanners, microcontrollers, and displays.

Accuracy and Reliability:


Project: Demonstrates high accuracy and reliability, even with clean and wet
fingers.
Commercial Products: Claim high accuracy and reliability, but actual
performance may vary depending on the specific product.

User Interface and Experience:


Project: Offers a simple user interface with a basic OLED display
Commercial Products: Often feature more advanced user interfaces, such as
touch screens and keypads, enhancing the overall user experience.

Data Storage and Security:


Project: Attendance data is stored in an embedded database and encrypted for
security.
Commercial Products: Typically offer robust data storage and security
features, including options for cloud-based storage and secure access control.

Cost and Scalability:


Project: Likely to be more cost-effective for small-scale implementations but
may have limitations in scalability.
Commercial Products: May involve higher initial costs but often offer
scalability to accommodate growing organizational needs.

6
Integration and Connectivity:
Project: Limited integration capabilities with other systems due to its
embedded nature.
Commercial Products: Often designed for seamless integration with other
organizational systems and may offer connectivity options such as Wi-Fi or
Bluetooth.

Maintenance and Support:


Project: Requires self-maintenance and limited support resources.
Commercial Products: Typically come with maintenance packages and
customer support services to address any issues or updates.

Customization and Flexibility:


Project: Offers limited customization options and flexibility due to its
predefined architecture.
Commercial Products: Often provide customizable features and
configurations to adapt to specific organizational requirements.

7
3. PROBLEM STATEMENT :-
 Susceptibility to Damage and Breakage: The system is sensitive and
prone to damage or breakage, requiring special care and handling to avoid
harm. This susceptibility increases the risk of downtime and operational
disruptions.
 Vulnerability to Tampering and Misuse: The system lacks security
features to prevent tampering, alteration, or misuse through dishonest or
unethical methods. This vulnerability compromises the integrity of
attendance data and undermines the system's trustworthiness.
 Absence of GPS Tracking Functionality: The system does not incorporate
GPS tracking technology, essential for real-time location monitoring.
Without GPS tracking, the system cannot trace the whereabouts of
individuals, limiting its applicability in scenarios where location tracking
is crucial for security or operational purposes.

8
4. Mini Project Design :-
4.1 Circuit Diagram:-

Figure no.4.1.1 Circuit Diagram

4.2 Principle :-
The above image shows a detailed circuit diagram built using an
ESP8266 microcontroller. In this setup, there are components,
including a fingerprint sensor and an OLED display(128*64). The
fingerprint module is R307 . All of these components are connected to
one another using various wires. This circuit diagram provides a clear
picture of the design and engineering involved in creating this system.

9
4.3 Working:-
The working of a Iot based fingerprint attendance system involves several steps
to accurately record and manage attendance. Here's a simplified explanation of
how such a system typically operates.
Fingerprint Enrollment: Initially, individuals who need to be tracked for
attendance, such as employees or students, must enroll in the system. During this
process, they place their finger on a fingerprint scanner. The scanner captures
their unique fingerprint pattern and creates a biometric template for future
verification.
Fingerprint Recognition: When it's time to record attendance, individuals simply
place their finger on the fingerprint scanner again. The system then compares the
presented fingerprint with the stored templates to identify the individual.
Verification: The system matches the captured fingerprint with the stored
template. If there's a match, the individual's attendance is recorded as present. If
there's no match, the attendance is not recorded, indicating an absence.
Attendance Logging: Successful verifications result in attendance records, which
are typically stored in a database. These records include a timestamp, the
individual's identity, and whether they were present or absent.

1
5.COMPONENTS/TOOLS TO BE USED :-
5.1 COMPONENTS :-

Figure no.5.1.1

ESP8266 :-
The ESP8266 is a versatile Wi-Fi module developed by Espressif Systems,
integrating a microcontroller unit and Wi-Fi radio. Widely used in IoT
projects due to its low cost and ease of use, it enables connectivity to Wi-Fi
networks and execution of custom code. Programmed using Arduino IDE,
Lua scripting, or other environments, it empowers developers to create a wide
range of Wi- Fi-enabled devices. Its compact size and popularity make it a
cornerstone in DIY electronics and IoT communities.

R307 fingerprint module:-


The R307 Fingerprint Module is a compact biometric sensor known for its
high accuracy in fingerprint recognition. It communicates via UART, has
adjustable user capacity, and is widely used in access control and time
attendance systems. Its versatility makes it suitable for integration into
various platforms for biometric verification projects.

1
OLED display (128*64) :-
An OLED display with a resolution of 128x64 is a type of display panel
utilizing organic compounds to emit light. It features 128 pixels horizontally
and 64 pixels vertically. Renowned for low power consumption and high
contrast, it's commonly employed in wearable tech, portable devices, and IoT
projects. Interfaced with microcontrollers, it displays graphical or textual
information, offering versatility for diverse applications.

Wires :-
Jumper wires are short, insulated wires with connectors at both ends used in
electronics and prototyping. They come in different types, including male-to-
male, male-to-female, and female-to-female, with various lengths and colors.
Jumper wires are designed for quick and temporary connections between
electronic components like sensors, microcontrollers, and breadboards. They
are flexible, reusable, and an essential tool for circuit building, testing, and
experimentation in electronics and educational projects.

1
5.2 Software :-
Arduino ide :–
The Arduino IDE (Integrated Development Environment) is a pivotal
component of the Arduino platform, offering an open-source, user-friendly,
and versatile environment for programming Arduino microcontroller boards.
It simplifies coding with a straightforward interface, extensive code libraries,
and compatibility with a wide range of Arduino boards. The IDE fosters open
collaboration and is available on multiple operating systems. Its active
community provides support, making it a powerful tool for both beginners
and experienced developers. With continuous updates and extensibility, the
Arduino IDE has become a gateway to innovative projects and educational
endeavors in the realm of embedded systems.

1
5.3 Source Code :-

#include <SPI.h>

#include <Wire.h>

#include

<WiFiClient.h>

#include <ESP8266WiFi.h>

#include <SoftwareSerial.h>

#include <ESP8266WebServer.h>

#include <ESP8266HTTPClient.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SH110X.h> // Include the Adafruit_SH110X library for

SH110X #include <Adafruit_Fingerprint.h>

#define Finger_Rx 0 // D3

#define Finger_Tx 2 // D4

#define SCREEN_WIDTH

128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1 // SH1106 does not require a reset pin

Adafruit_SH1106G display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

SoftwareSerial mySerial(Finger_Rx, Finger_Tx);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);


const char *ssid = "123456789";
const char *password =
"123456789"; String postData ;

String link =
"http://192.168.6.77/biometricattendance/getdata.php"; int
FingerID = 0;
uint8_t id;

#define Wifi_start_width 54

#define Wifi_start_height 49

const uint8_t PROGMEM Wifi_start_bits[]


= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00

1
,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x1f,0xf0,0x00,0x00,0x00

,0x00,0x03,0xff,0xff,0x80,0x00,0x00

,0x00,0x1f,0xf0,0x1f,0xf0,0x00,0x00

,0x00,0x7e,0x00,0x00,0xfc,0x00,0x00

,0x01,0xf0,0x00,0x00,0x1f,0x00,0x00

,0x03,0xc0,0x00,0x00,0x07,0xc0,0x00

,0x0f,0x00,0x00,0x00,0x01,0xe0,0x00

,0x1c,0x00,0x00,0x00,0x00,0x70,0x00

,0x38,0x00,0x07,0xc0,0x00,0x38,0x00

,0x70,0x00,0xff,0xfe,0x00,0x1e,0x00

,0xe0,0x03,0xfc,0x7f,0xc0,0x0e,0x00

,0x00,0x1f,0x80,0x03,0xf0,0x00,0x00

,0x00,0x3c,0x00,0x00,0x78,0x00,0x00

,0x00,0xf0,0x00,0x00,0x1c,0x00,0x00

,0x01,0xe0,0x00,0x00,0x0c,0x00,0x00

,0x03,0x80,0x00,0x00,0x00,0x00,0x00

,0x03,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x3f,0xf8,0x07,0x1e,0x00

,0x00,0x00,0xff,0xfe,0x1f,0xbf,0x80

,0x00,0x03,0xe0,0x04,0x7f,0xff,0xc0

,0x00,0x07,0x80,0x00,0xff,0xff,0xe0

,0x00,0x0e,0x00,0x00,0xff,0xff,0xe0

,0x00,0x0c,0x00,0x00,0x7f,0xff,0xc0
,0x00,0x00,0x00,0x00,0xfe,0x07,0xe0

,0x00,0x00,0x00,0x03,0xf8,0x03,0xf8

,0x00,0x00,0x07,0xe7,0xf9,0xf1,0xfc

,0x00,0x00,0x1f,0xe7,0xf1,0xf9,0xfc

,0x00,0x00,0x1f,0xe7,0xf3,0xf9,0xfc

,0x00,0x00,0x3f,0xe7,0xf3,0xf9,0xfc

,0x00,0x00,0x3f,0xe7,0xf1,0xf1,0xfc

,0x00,0x00,0x3f,0xe3,0xf8,0xe3,0xfc

,0x00,0x00,0x3f,0xf3,0xfc,0x07,0xf8

,0x00,0x00,0x1f,0xf0,0x7f,0x0f,0xc0

,0x00,0x00,0x0f,0xe0,0x7f,0xff,0xe0

,0x00,0x00,0x07,0xc0,0xff,0xff,0xe0

1
,0x00,0x00,0x00,0x00,0x7f,0xff,0xe0

,0x00,0x00,0x00,0x00,0x3f,0xff,0x80

,0x00,0x00,0x00,0x00,0x1f,0xbf,0x00

,0x00,0x00,0x00,0x00,0x03,0x18,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};

#define Wifi_connected_width 63

#define Wifi_connected_height 49

const uint8_t PROGMEM Wifi_connected_bits[] =

{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x03,0xff,0xff,0x80,0x00,0x00

,0x00,0x00,0x3f,0xff,0xff,0xf8,0x00,0x00

,0x00,0x01,0xff,0xff,0xff,0xff,0x00,0x00

,0x00,0x0f,0xff,0xff,0xff,0xff,0xe0,0x00
,0x00,0x3f,0xff,0xc0,0x07,0xff,0xf8,0x00

,0x00,0xff,0xf8,0x00,0x00,0x3f,0xfe,0x00

,0x03,0xff,0x80,0x00,0x00,0x03,0xff,0x80

,0x07,0xfe,0x00,0x00,0x00,0x00,0xff,0xc0

,0x1f,0xf8,0x00,0x00,0x00,0x00,0x3f,0xf0

,0x3f,0xe0,0x01,0xff,0xff,0x00,0x0f,0xf8

,0x7f,0x80,0x0f,0xff,0xff,0xe0,0x03,0xfc

,0xff,0x00,0x7f,0xff,0xff,0xfc,0x01,0xfe

,0xfc,0x01,0xff,0xff,0xff,0xff,0x00,0x7e

,0x78,0x07,0xff,0xc0,0x07,0xff,0xc0,0x3c

,0x00,0x0f,0xfc,0x00,0x00,0x7f,0xe0,0x00

,0x00,0x1f,0xf0,0x00,0x00,0x1f,0xf0,0x00

1
,0x00,0x3f,0xc0,0x00,0x00,0x07,0xf8,0x00

,0x00,0x7f,0x00,0x01,0x00,0x01,0xfc,0x00

,0x00,0x7e,0x00,0x7f,0xfc,0x00,0xfc,0x00

,0x00,0x3c,0x03,0xff,0xff,0x80,0x78,0x00

,0x00,0x00,0x07,0xff,0xff,0xc0,0x00,0x00

,0x00,0x00,0x1f,0xff,0xff,0xf0,0x00,0x00

,0x00,0x00,0x3f,0xf0,0x1f,0xf8,0x00,0x00

,0x00,0x00,0x3f,0x80,0x03,0xf8,0x00,0x00

,0x00,0x00,0x3f,0x00,0x01,0xf8,0x00,0x00

,0x00,0x00,0x1c,0x00,0x00,0x70,0x00,0x00

,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x0f,0xe0,0x00,0x00,0x00

,0x00,0x00,0x00,0x1f,0xf0,0x00,0x00,0x00

,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00

,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00

,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00

,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00

,0x00,0x00,0x00,0x1f,0xf0,0x00,0x00,0x00

,0x00,0x00,0x00,0x0f,0xe0,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};

#define FinPr_start_width 64

#define FinPr_start_height 64

const uint8_t PROGMEM FinPr_start_bits[] =

{ 0x00,0x00,0x00,0x1f,0xe0,0x00,0x00,0x00
,0x00,0x00,0x01,0xff,0xfe,0x00,0x00,0x00

,0x00,0x00,0x03,0xff,0xff,0x80,0x00,0x00

,0x00,0x00,0x0f,0xc0,0x0f,0xe0,0x00,0x00

,0x00,0x00,0x1f,0x00,0x01,0xf8,0x00,0x00

,0x00,0x00,0x3c,0x00,0x00,0x7c,0x00,0x00

1
,0x00,0x00,0x78,0x00,0x00,0x3e,0x00,0x00

,0x00,0x00,0xf0,0x3f,0xf8,0x0f,0x00,0x00

,0x00,0x01,0xe0,0xff,0xfe,0x07,0x80,0x00

,0x00,0x03,0xc3,0xff,0xff,0x03,0x80,0x00

,0x00,0x03,0x87,0xc0,0x07,0xc3,0xc0,0x00

,0x00,0x07,0x0f,0x00,0x03,0xe1,0xc0,0x00

,0x00,0x0f,0x0e,0x00,0x00,0xe0,0xe0,0x00

,0x00,0x0e,0x1c,0x00,0x00,0xf0,0xe0,0x00

,0x00,0x0c,0x3c,0x1f,0xe0,0x70,0xe0,0x00

,0x00,0x00,0x38,0x3f,0xf0,0x38,0x70,0x00

,0x00,0x00,0x78,0x78,0xf8,0x38,0x70,0x00

,0x00,0x00,0x70,0x70,0x3c,0x18,0x70,0x00

,0x00,0x00,0xe0,0xe0,0x1e,0x1c,0x70,0x00

,0x00,0x03,0xe1,0xe0,0x0e,0x1c,0x70,0x00

,0x00,0x0f,0xc1,0xc3,0x0e,0x1c,0x70,0x00

,0x00,0x3f,0x03,0xc3,0x8e,0x1c,0x70,0x00

,0x00,0x3e,0x03,0x87,0x0e,0x1c,0x70,0x00

,0x00,0x30,0x07,0x07,0x0e,0x18,0xe0,0x00

,0x00,0x00,0x0e,0x0e,0x0e,0x38,0xe0,0x00

,0x00,0x00,0x3e,0x1e,0x1e,0x38,0xe0,0x00

,0x00,0x00,0xf8,0x1c,0x1c,0x38,0xe0,0x00

,0x00,0x03,0xf0,0x38,0x3c,0x38,0xe0,0x00

,0x00,0x3f,0xc0,0xf8,0x78,0x38,0xe0,0x00

,0x00,0x7f,0x01,0xf0,0x70,0x38,0xf0,0x00
,0x00,0x78,0x03,0xe0,0xe0,0x38,0x70,0x00

,0x00,0x00,0x0f,0x81,0xe0,0x38,0x7c,0x00

,0x00,0x00,0x3f,0x03,0xc0,0x38,0x3e,0x00

,0x00,0x00,0xfc,0x0f,0x80,0x38,0x1e,0x00

,0x00,0x07,0xf0,0x1f,0x1c,0x1c,0x04,0x00

,0x00,0x3f,0xc0,0x3e,0x3f,0x1e,0x00,0x00

,0x00,0x7f,0x00,0xf8,0x7f,0x0f,0x00,0x00

,0x00,0x38,0x01,0xf0,0xf7,0x07,0xc0,0x00

,0x00,0x00,0x07,0xe1,0xe3,0x83,0xf8,0x00

,0x00,0x00,0x3f,0x87,0xc3,0xc0,0xfc,0x00

,0x00,0x01,0xfe,0x0f,0x81,0xe0,0x3c,0x00

,0x00,0x0f,0xf8,0x1f,0x00,0xf0,0x00,0x00

1
,0x00,0x1f,0xc0,0x7c,0x00,0x7c,0x00,0x00

,0x00,0x1e,0x01,0xf8,0x00,0x3f,0x00,0x00

,0x00,0x00,0x07,0xe0,0x78,0x0f,0xc0,0x00

,0x00,0x00,0x3f,0x81,0xfe,0x07,0xf0,0x00

,0x00,0x01,0xfe,0x07,0xff,0x01,0xf0,0x00

,0x00,0x07,0xf8,0x0f,0x87,0x80,0x30,0x00

,0x00,0x07,0xc0,0x3f,0x03,0xe0,0x00,0x00

,0x00,0x06,0x00,0xfc,0x01,0xf8,0x00,0x00

,0x00,0x00,0x03,0xf0,0x00,0x7e,0x00,0x00

,0x00,0x00,0x0f,0xc0,0x00,0x3f,0x80,0x00

,0x00,0x00,0x7f,0x00,0xf8,0x0f,0x80,0x00

,0x00,0x00,0xfc,0x03,0xfe,0x01,0x80,0x00

,0x00,0x00,0xf0,0x1f,0xff,0x80,0x00,0x00

,0x00,0x00,0x00,0x7f,0x07,0xe0,0x00,0x00

,0x00,0x00,0x00,0xfc,0x03,0xf8,0x00,0x00

,0x00,0x00,0x03,0xf0,0x00,0x78,0x00,0x00

,0x00,0x00,0x0f,0xc0,0x00,0x18,0x00,0x00

,0x00,0x00,0x0f,0x01,0xf8,0x00,0x00,0x00

,0x00,0x00,0x00,0x07,0xfe,0x00,0x00,0x00

,0x00,0x00,0x00,0x1f,0xfe,0x00,0x00,0x00

,0x00,0x00,0x00,0x1e,0x0e,0x00,0x00,0x00

,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00

};

#define FinPr_valid_width 64
#define FinPr_valid_height 64

const uint8_t PROGMEM FinPr_valid_bits[] =


{ 0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00
,0x00,0x00,0x1f,0xff,0xe0,0x00,0x00,0x00

,0x00,0x00,0x7f,0xff,0xf8,0x00,0x00,0x00

,0x00,0x00,0xfc,0x00,0xfe,0x00,0x00,0x00

,0x00,0x03,0xe0,0x00,0x1f,0x00,0x00,0x00

,0x00,0x07,0xc0,0x00,0x07,0x80,0x00,0x00

,0x00,0x0f,0x80,0x00,0x03,0xe0,0x00,0x00

,0x00,0x0e,0x03,0xff,0x01,0xe0,0x00,0x00

,0x00,0x1c,0x1f,0xff,0xe0,0xf0,0x00,0x00

,0x00,0x3c,0x3f,0xff,0xf0,0x78,0x00,0x00

1
,0x00,0x78,0x7c,0x00,0xf8,0x3c,0x00,0x00

,0x00,0x70,0xf0,0x00,0x3c,0x1c,0x00,0x00

,0x00,0xe1,0xe0,0x00,0x1e,0x1c,0x00,0x00

,0x00,0xe1,0xc0,0x00,0x0f,0x0e,0x00,0x00

,0x00,0xc3,0x81,0xfc,0x07,0x0e,0x00,0x00

,0x00,0x03,0x83,0xff,0x07,0x8e,0x00,0x00

,0x00,0x07,0x07,0x8f,0x83,0x87,0x00,0x00

,0x00,0x0f,0x0f,0x03,0xc3,0x87,0x00,0x00

,0x00,0x1e,0x0e,0x01,0xc3,0x87,0x00,0x00

,0x00,0x3c,0x1c,0x00,0xe1,0x87,0x00,0x00

,0x00,0xf8,0x1c,0x30,0xe1,0x87,0x00,0x00

,0x07,0xf0,0x38,0x70,0xe1,0x86,0x00,0x00

,0x07,0xc0,0x78,0x70,0xe3,0x8e,0x00,0x00

,0x02,0x00,0xf0,0xf0,0xe3,0x8e,0x00,0x00

,0x00,0x01,0xe0,0xe0,0xe3,0x8e,0x00,0x00

,0x00,0x03,0xc1,0xe1,0xc3,0x8e,0x00,0x00

,0x00,0x0f,0x83,0xc3,0xc3,0x8e,0x00,0x00

,0x00,0x7f,0x07,0x83,0x83,0x0e,0x00,0x00

,0x07,0xfc,0x0f,0x07,0x83,0x0e,0x00,0x00

,0x07,0xf0,0x1e,0x0f,0x03,0x0e,0x00,0x00

,0x07,0x80,0x7c,0x1e,0x03,0x07,0x00,0x00

,0x00,0x00,0xf8,0x3c,0x03,0x87,0x80,0x00

,0x00,0x03,0xf0,0x78,0x03,0x83,0xc0,0x00

,0x00,0x1f,0xc0,0xf0,0x02,0x00,0x00,0x00
,0x00,0xff,0x01,0xe1,0xc0,0x0c,0x00,0x00

,0x07,0xfc,0x03,0xc3,0xe1,0xff,0xc0,0x00

,0x07,0xe0,0x0f,0x87,0xc7,0xff,0xf0,0x00

,0x07,0x00,0x3f,0x0f,0x0f,0xff,0xfc,0x00

,0x00,0x00,0x7c,0x3e,0x3f,0xff,0xfe,0x00

,0x00,0x03,0xf8,0x7c,0x3f,0xff,0xff,0x00

,0x00,0x1f,0xe0,0xf0,0x7f,0xff,0xff,0x80

,0x00,0xff,0x83,0xe0,0xff,0xff,0xff,0x80

,0x01,0xfc,0x07,0xc1,0xff,0xff,0xe3,0xc0

,0x01,0xe0,0x1f,0x01,0xff,0xff,0xc3,0xc0

,0x00,0x00,0xfe,0x01,0xff,0xff,0x87,0xe0

,0x00,0x03,0xf8,0x13,0xff,0xff,0x0f,0xe0

2
,0x00,0x1f,0xe0,0x73,0xff,0xfe,0x1f,0xe0

,0x00,0x7f,0x81,0xf3,0xff,0xfc,0x1f,0xe0

,0x00,0xfc,0x03,0xe3,0xef,0xf8,0x3f,0xe0

,0x00,0x60,0x0f,0xc3,0xc7,0xf0,0x7f,0xe0

,0x00,0x00,0x3f,0x03,0xc3,0xe0,0xff,0xe0

,0x00,0x00,0xfc,0x03,0xc1,0xc1,0xff,0xe0

,0x00,0x07,0xf0,0x13,0xe0,0x83,0xff,0xe0

,0x00,0x0f,0xc0,0x7b,0xf8,0x07,0xff,0xe0

,0x00,0x0f,0x01,0xf9,0xfc,0x0f,0xff,0xc0

,0x00,0x00,0x07,0xf1,0xfe,0x1f,0xff,0xc0

,0x00,0x00,0x1f,0xc0,0xff,0x3f,0xff,0x80

,0x00,0x00,0x7e,0x00,0xff,0xff,0xff,0x80

,0x00,0x00,0xfc,0x00,0x7f,0xff,0xff,0x00

,0x00,0x00,0xf0,0x1f,0x3f,0xff,0xfe,0x00

,0x00,0x00,0x00,0x7f,0x1f,0xff,0xfc,0x00

,0x00,0x00,0x01,0xff,0x8f,0xff,0xf8,0x00

,0x00,0x00,0x03,0xe0,0xe3,0xff,0xe0,0x00

,0x00,0x00,0x01,0x80,0x00,0x7f,0x00,0x00

};

#define FinPr_invalid_width 64

#define FinPr_invalid_height 64

const uint8_t PROGMEM FinPr_invalid_bits[] =


{ 0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00

,0x00,0x00,0x1f,0xff,0xe0,0x00,0x00,0x00

,0x00,0x00,0x7f,0xff,0xf8,0x00,0x00,0x00

,0x00,0x00,0xfc,0x00,0xfe,0x00,0x00,0x00

,0x00,0x03,0xe0,0x00,0x1f,0x00,0x00,0x00

,0x00,0x07,0xc0,0x00,0x07,0x80,0x00,0x00

,0x00,0x0f,0x80,0x00,0x03,0xe0,0x00,0x00

,0x00,0x0e,0x03,0xff,0x01,0xe0,0x00,0x00

,0x00,0x1c,0x1f,0xff,0xe0,0xf0,0x00,0x00

,0x00,0x3c,0x3f,0xff,0xf0,0x78,0x00,0x00

,0x00,0x78,0x7c,0x00,0xf8,0x3c,0x00,0x00

,0x00,0x70,0xf0,0x00,0x3c,0x1c,0x00,0x00

,0x00,0xe1,0xe0,0x00,0x1e,0x1c,0x00,0x00

,0x00,0xe1,0xc0,0x00,0x0f,0x0e,0x00,0x00

2
,0x00,0xc3,0x81,0xfc,0x07,0x0e,0x00,0x00

,0x00,0x03,0x83,0xff,0x07,0x8e,0x00,0x00

,0x00,0x07,0x07,0x8f,0x83,0x87,0x00,0x00

,0x00,0x0f,0x0f,0x03,0xc3,0x87,0x00,0x00

,0x00,0x1e,0x0e,0x01,0xc3,0x87,0x00,0x00

,0x00,0x3c,0x1c,0x00,0xe1,0x87,0x00,0x00

,0x00,0xf8,0x1c,0x30,0xe1,0x87,0x00,0x00

,0x07,0xf0,0x38,0x70,0xe1,0x86,0x00,0x00

,0x07,0xc0,0x78,0x70,0xe3,0x8e,0x00,0x00

,0x02,0x00,0xf0,0xf0,0xe3,0x8e,0x00,0x00

,0x00,0x01,0xe0,0xe0,0xe3,0x8e,0x00,0x00

,0x00,0x03,0xc1,0xe1,0xc3,0x8e,0x00,0x00

,0x00,0x0f,0x83,0xc3,0xc3,0x8e,0x00,0x00

,0x00,0x7f,0x07,0x83,0x83,0x0e,0x00,0x00

,0x07,0xfc,0x0f,0x07,0x83,0x0e,0x00,0x00

,0x07,0xf0,0x1e,0x0f,0x03,0x0e,0x00,0x00

,0x07,0x80,0x7c,0x1e,0x03,0x07,0x00,0x00

,0x00,0x00,0xf8,0x3c,0x03,0x87,0x80,0x00

,0x00,0x03,0xf0,0x78,0x03,0x83,0xc0,0x00

,0x00,0x1f,0xc0,0xf0,0x02,0x00,0x00,0x00

,0x00,0xff,0x01,0xe1,0xc0,0x00,0x00,0x00

,0x07,0xfc,0x03,0xc3,0xe1,0xff,0xc0,0x00

,0x07,0xe0,0x0f,0x87,0xc7,0xff,0xf0,0x00

,0x07,0x00,0x3f,0x0f,0x0f,0xff,0xf8,0x00
,0x00,0x00,0x7c,0x3e,0x1f,0xff,0xfe,0x00

,0x00,0x03,0xf8,0x7c,0x3f,0xff,0xff,0x00

,0x00,0x1f,0xe0,0xf0,0x7f,0xff,0xff,0x00

,0x00,0xff,0x83,0xe0,0xfe,0xff,0xbf,0x80

,0x01,0xfc,0x07,0xc0,0xfc,0x7f,0x1f,0xc0

,0x01,0xe0,0x1f,0x01,0xf8,0x3e,0x0f,0xc0

,0x00,0x00,0xfe,0x01,0xf8,0x1c,0x07,0xe0

,0x00,0x03,0xf8,0x13,0xf8,0x00,0x0f,0xe0

,0x00,0x1f,0xe0,0x73,0xfc,0x00,0x1f,0xe0

,0x00,0x7f,0x81,0xf3,0xfe,0x00,0x3f,0xe0

,0x00,0xfc,0x03,0xe3,0xff,0x00,0x7f,0xe0

,0x00,0x60,0x0f,0xc3,0xff,0x80,0xff,0xe0

2
,0x00,0x00,0x3f,0x03,0xff,0x00,0x7f,0xe0

,0x00,0x00,0xfc,0x03,0xfe,0x00,0x3f,0xe0

,0x00,0x07,0xf0,0x13,0xfc,0x00,0x1f,0xe0

,0x00,0x0f,0xc0,0x79,0xf8,0x08,0x0f,0xe0

,0x00,0x0f,0x01,0xf9,0xf8,0x1c,0x0f,0xc0

,0x00,0x00,0x07,0xf1,0xfc,0x3e,0x1f,0xc0

,0x00,0x00,0x1f,0xc0,0xfe,0x7f,0x3f,0x80

,0x00,0x00,0x7e,0x00,0xff,0xff,0xff,0x80

,0x00,0x00,0xfc,0x00,0x7f,0xff,0xff,0x00

,0x00,0x00,0xf0,0x1f,0x3f,0xff,0xfe,0x00

,0x00,0x00,0x00,0x7f,0x1f,0xff,0xfc,0x00

,0x00,0x00,0x01,0xff,0x8f,0xff,0xf8,0x00

,0x00,0x00,0x03,0xe0,0xe3,0xff,0xe0,0x00

,0x00,0x00,0x01,0x80,0x00,0x7f,0x00,0x00

};

#define FinPr_failed_width 64

#define FinPr_failed_height 64

const uint8_t PROGMEM FinPr_failed_bits[] =

{ 0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00
,0x00,0x01,0xff,0xfe,0x00,0x00,0x00,0x00

,0x00,0x0f,0xc0,0x1f,0x80,0x00,0x00,0x00

,0x00,0x1e,0x00,0x03,0xc0,0x00,0x00,0x00

,0x00,0x78,0x00,0x00,0xf0,0x00,0x00,0x00

,0x00,0xe0,0x00,0x00,0x38,0x00,0x00,0x00
,0x01,0xc0,0x00,0x00,0x1c,0x00,0x00,0x00

,0x03,0x80,0x00,0x00,0x0e,0x00,0x00,0x00

,0x07,0x00,0x7f,0xe0,0x07,0x00,0x00,0x00

,0x06,0x01,0xff,0xf8,0x03,0x00,0x00,0x00

,0x0c,0x03,0xc0,0x3c,0x03,0x80,0x00,0x00

,0x1c,0x0f,0x00,0x0e,0x01,0x80,0x00,0x00

,0x18,0x0c,0x00,0x03,0x00,0xc0,0x00,0x00

,0x18,0x18,0x00,0x01,0x80,0xc0,0x00,0x00

,0x30,0x38,0x00,0x01,0xc0,0xe0,0x00,0x00

,0x30,0x30,0x0f,0x00,0xc0,0x60,0x00,0x00

,0x30,0x30,0x3f,0xc0,0xe0,0x60,0x00,0x00

,0x70,0x60,0x78,0xe0,0x60,0x60,0x00,0x00

2
,0x60,0x60,0x60,0x60,0x60,0x70,0x00,0x00

,0x60,0x60,0x60,0x60,0x60,0x30,0x00,0x00

,0x60,0x60,0x60,0x60,0x30,0x30,0x00,0x00

,0x60,0x60,0x60,0x30,0x30,0x20,0x00,0x00

,0x60,0x60,0x60,0x30,0x30,0x01,0xe0,0x00

,0x60,0x60,0x60,0x30,0x30,0x0f,0xfc,0x00

,0x60,0x60,0x60,0x30,0x30,0x3f,0xff,0x00

,0x60,0x60,0x60,0x30,0x18,0x78,0x03,0x80

,0x60,0x60,0x60,0x30,0x1c,0x60,0x01,0x80

,0x60,0x60,0x30,0x38,0x0c,0xc0,0x00,0xc0

,0x00,0x60,0x30,0x18,0x00,0xc0,0x00,0xc0

,0x00,0x60,0x30,0x18,0x00,0xc0,0x00,0xc0

,0x00,0xe0,0x30,0x0c,0x01,0xc0,0x00,0xe0

,0x00,0xc0,0x18,0x0e,0x01,0xc0,0x00,0xe0

,0x60,0xc0,0x18,0x07,0x01,0xc0,0x00,0xe0

,0x01,0xc0,0x1c,0x03,0x81,0xc0,0x00,0xe0

,0x01,0x80,0x0c,0x01,0xc1,0xc0,0x00,0xe0

,0x03,0x80,0x0e,0x00,0xf1,0xc0,0x00,0xe0

,0x0f,0x00,0x06,0x00,0x01,0xc0,0x00,0xe0

,0x3e,0x01,0x03,0x00,0x01,0xc0,0x00,0xe0

,0x30,0x03,0x83,0x80,0x1f,0xff,0xff,0xfe

,0x00,0x03,0x81,0xc0,0x3f,0xff,0xff,0xff

,0x00,0x07,0xc0,0xe0,0x30,0x00,0x00,0x03

,0x00,0x0e,0xc0,0x78,0x30,0x00,0x00,0x03
,0x00,0x3c,0x60,0x1e,0x30,0x00,0x00,0x03

,0x00,0x78,0x70,0x0f,0x30,0x00,0x00,0x03

,0x03,0xe0,0x38,0x03,0x30,0x00,0x00,0x03

,0x07,0x80,0x1c,0x00,0x30,0x00,0x00,0x03

,0xc0,0x00,0x0f,0x00,0x30,0x00,0x00,0x03

,0xc0,0x00,0x03,0x80,0x30,0x01,0xe0,0x03

,0x00,0x18,0x01,0xe0,0x30,0x03,0xf0,0x03

,0x00,0x18,0x00,0x7c,0x30,0x07,0x38,0x03

,0x00,0x0c,0x00,0x1f,0x30,0x06,0x18,0x03

,0x18,0x0e,0x00,0x07,0x30,0x06,0x18,0x03

,0x0c,0x07,0x80,0x00,0x30,0x07,0x38,0x03

,0x0e,0x03,0xc0,0x00,0x30,0x03,0x30,0x03

2
,0x07,0x00,0xf0,0x00,0x30,0x03,0x30,0x03

,0x03,0x00,0x7e,0x00,0x30,0x03,0x30,0x03

,0x01,0x80,0x1f,0xc0,0x30,0x03,0x30,0x03

,0x01,0xc0,0x03,0xe1,0x30,0x07,0xf8,0x03

,0x00,0xf0,0x00,0x01,0x30,0x03,0xf0,0x03

,0x00,0x38,0x00,0x00,0x30,0x00,0x00,0x03

,0x00,0x1e,0x00,0x00,0x30,0x00,0x00,0x03

,0x00,0x07,0xc0,0x00,0x30,0x00,0x00,0x03

,0x00,0x01,0xff,0x80,0x3f,0xff,0xff,0xff

,0x00,0x00,0x3f,0x80,0x1f,0xff,0xff,0xfe

};

#define FinPr_scan_width 64

#define FinPr_scan_height 64

const uint8_t PROGMEM FinPr_scan_bits[] =


{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00,0x00

,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00

,0x00,0x00,0x01,0xfc,0x7f,0xc0,0x00,0x00

,0x00,0x00,0x03,0xc0,0x03,0xe0,0x00,0x00

,0x00,0x00,0x07,0x80,0x00,0xf0,0x00,0x00

,0x00,0x00,0x0e,0x00,0x00,0x3c,0x00,0x00

,0x00,0x00,0x1c,0x1f,0xfc,0x1c,0x00,0x00

,0x00,0x00,0x38,0x7f,0xfe,0x0e,0x00,0x00

,0x00,0x00,0x78,0xf8,0x0f,0x87,0x00,0x00

,0x00,0x00,0x71,0xe0,0x03,0xc7,0x00,0x00

,0x00,0x00,0xe3,0x80,0x01,0xc3,0x80,0x00

,0x00,0x00,0xc3,0x83,0xc0,0xe3,0x80,0x00

,0x00,0x00,0xc7,0x0f,0xf0,0x71,0x80,0x00

,0x00,0x00,0x06,0x1f,0xf8,0x71,0xc0,0x00

,0x00,0x00,0x0e,0x1c,0x3c,0x31,0xc0,0x00

,0x00,0x00,0x1c,0x38,0x1c,0x31,0xc0,0x00

,0x00,0x00,0x38,0x70,0x0e,0x39,0xc0,0x00

2
,0x00,0x01,0xf0,0x71,0x8e,0x39,0xc0,0x00

,0x00,0x03,0xe0,0xe1,0x86,0x31,0xc0,0x00

,0x00,0x03,0x81,0xe3,0x8e,0x31,0x80,0x00

,0x00,0x00,0x03,0xc3,0x8e,0x33,0x80,0x00

,0x00,0x00,0x07,0x87,0x0c,0x73,0x80,0x00

,0x00,0x00,0x1f,0x0e,0x1c,0x73,0x80,0x00

,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xfe

,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff

,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff

,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xfe

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x03,0xf0,0x1e,0x3e,0x1c,0x00,0x00

,0x00,0x03,0x80,0x7c,0x77,0x0f,0x00,0x00

,0x00,0x00,0x01,0xf0,0xe3,0x07,0xc0,0x00

,0x00,0x00,0x07,0xe3,0xc3,0x81,0xf0,0x00

,0x00,0x00,0x3f,0x87,0x81,0xc0,0x60,0x00

,0x00,0x01,0xfc,0x1f,0x00,0xf0,0x00,0x00

,0x00,0x01,0xe0,0x3c,0x00,0x7c,0x00,0x00

,0x00,0x00,0x00,0xf8,0x78,0x1f,0x00,0x00

,0x00,0x00,0x07,0xe0,0xfc,0x0f,0xc0,0x00

,0x00,0x00,0x3f,0x83,0xef,0x03,0xc0,0x00

,0x00,0x00,0xfc,0x0f,0x87,0x80,0x00,0x00
,0x00,0x00,0x70,0x1f,0x03,0xe0,0x00,0x00

,0x00,0x00,0x00,0x7c,0x00,0xf8,0x00,0x00

,0x00,0x00,0x01,0xf0,0x00,0x3e,0x00,0x00

,0x00,0x00,0x0f,0xc0,0xf8,0x0f,0x00,0x00

,0x00,0x00,0x1f,0x03,0xfe,0x02,0x00,0x00

,0x00,0x00,0x0c,0x0f,0x8f,0x80,0x00,0x00

,0x00,0x00,0x00,0x3f,0x03,0xe0,0x00,0x00

,0x00,0x00,0x00,0xf8,0x00,0xf0,0x00,0x00

,0x00,0x00,0x01,0xe0,0x00,0x30,0x00,0x00

,0x00,0x00,0x01,0xc0,0xf8,0x00,0x00,0x00

,0x00,0x00,0x00,0x07,0xfe,0x00,0x00,0x00

,0x00,0x00,0x00,0x0f,0x8e,0x00,0x00,0x00

2
,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};

void setup() {

Serial.begin(115200);

if(!display.begin(0x3C)) { // Address 0x3C for

SH110X Serial.println(F("SH110X allocation failed"));


for(;;); // Don't proceed, loop forever

display.display();

delay(2000); // Pause for 2 seconds

display.clearDisplay();

connectToWiFi();
f

inger.begin(57600); Serial.println("\n\
nAdafruit finger detect test"); if
(finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height,


SH110X_WHITE);

display.display();

} else {

Serial.println("Did not find fingerprint sensor :

("); display.clearDisplay();

display.drawBitmap( 32, 0, FinPr_failed_bits, FinPr_failed_width, FinPr_failed_height,

SH110X_WHITE);

display.display();
while (1) { delay(1);
}
}
f

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

void loop() {

//check if there's a connection to WiFi or

not if(WiFi.status() != WL_CONNECTED)

{ connectToWiFi();
}

FingerID = getFingerprintID();
delay(50);
DisplayFingerprintID();
ChecktoAddID();
ChecktoDeleteID();

void DisplayFingerprintID(){

if (FingerID > 0){

display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height,

SH110X_WHITE);

display.display();

SendFingerprintID( FingerID );
}
else if (FingerID == 0)

{ display.clearDisplay()

display.drawBitmap( 32, 0, FinPr_start_bits, FinPr_start_width, FinPr_start_height,

SH110X_WHITE);
display.display();

else if (FingerID == -1)


{ display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_invalid_bits, FinPr_invalid_width, FinPr_invalid_height,


SH110X_WHITE);
display.display();

//-

//Didn't find the scanner or there an error


2
else if (FingerID == -2)
{ display.clearDisplay();
display.drawBitmap( 32, 0, FinPr_failed_bits, FinPr_failed_width, FinPr_failed_height,

SH110X_WHITE);
display.display();

void SendFingerprintID( int finger )

{ WiFiClient client;
HTTPClient http;

postData = "FingerID=" +
String(finger); http.begin(client,link);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");

int httpCode = http.POST(postData); //Send the request

String payload = http.getString(); //Get the response payload


Serial.println(httpCode); //Print HTTP return code
Serial.println(payload); //Print request response payload
Serial.println(postData); //Post Data

Serial.println(finger); //Print fingerprint

ID if (payload.substring(0, 5) == "login") {

String user_name = payload.substring(5);

// Serial.println(user_name);

display.clearDisplay();

display.setTextSize(2);

// Normal 2:2 pixel scale

display.setTextColor(SH110X_WHITE);

display.setCursor(15,0);
// Draw white text
// Start at top-left corner
display.print(F("Welcome"));
display.setCursor(0,20);
display.print(user_name);
display.display();

else if (payload.substring(0, 6) == "logout")

{ String user_name = payload.substring(6);

2
// Serial.println(user_name);
display.clearDisplay();
display.setTextSize(2);

// Normal 2:2 pixel scale

display.setTextColor(SH110X_WHITE);

display.setCursor(10,0);
// Draw white text

// Start at top-left corner

display.print(F("Good Bye"));

display.setCursor(0,20);

display.print(user_name);

display.display();
}

delay(1000);

postData = "";

http.end(); //Close connection

//********************Get the Fingerprint ID******************


int 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 0;

case FINGERPRINT_PACKETRECIEVEERR:

//Serial.println("Communication error");

return -2;
case FINGERPRINT_IMAGEFAIL:

//Serial.println("Imaging error");

return -2;
default:

//Serial.println("Unknown error");
3
return -2;

// OK success!

p=
finger.image2Tz();
switch (p) {

case FINGERPRINT_OK:

//Serial.println("Image converted");
break;

case FINGERPRINT_IMAGEMESS:

//Serial.println("Image too messy");

return -1;
case FINGERPRINT_PACKETRECIEVEERR:

//Serial.println("Communication error");

return -2;
case FINGERPRINT_FEATUREFAIL:

//Serial.println("Could not find fingerprint


features"); return -2;
case FINGERPRINT_INVALIDIMAGE:

//Serial.println("Could not find fingerprint


features"); return -2;

default:

//Serial.println("Unknown error");
return -2;

// 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 -2;
} else if (p == FINGERPRINT_NOTFOUND) {

//Serial.println("Did not find a

match"); return -1;


} else {

//Serial.println("Unknown error");
3
return -2;

// found a match!

//Serial.print("Found ID #"); Serial.print(finger.fingerID);

//Serial.print(" with confidence of ");

Serial.println(finger.confidence); return finger.fingerID;


}

//******************Check if there a Fingerprint ID to delete******************

void ChecktoDeleteID(){
WiFiClient client;

HTTPClient http; //Declare object of class HTTPClient


//Post Data

postData = "DeleteID=check"; // Add the Fingerprint ID to the Post array in order to send it

// Post methode

http.begin(client,link); //initiate HTTP request, put your Website URL or Your Computer IP

http.addHeader("Content-Type", "application/x-www-form-urlencoded"); //Specify content-type

header

int httpCode = http.POST(postData); //Send the request

String payload = http.getString(); //Get the response payload

if (payload.substring(0, 6) == "del-id") {

String del_id =
payload.substring(6);
Serial.println(del_id);
deleteFingerprint( del_id.toInt() );
}
http.end(); //Close connection

//******************Delete Finpgerprint ID*****************


uint8_t deleteFingerprint( int id) {

uint8_t p = -1;

p = finger.deleteModel(id);

if (p == FINGERPRINT_OK) {

//Serial.println("Deleted!");

display.clearDisplay();

display.setTextSize(2);

// Normal 2:2 pixel scale

display.setTextColor(SH110X_WHITE);
3
display.setCursor(0,0);

// Draw white text

// Start at top-left corner

display.print(F("Deleted!\n"));

display.display();
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {

//Serial.println("Communication error");

display.clearDisplay();

display.setTextSize(1);

// Normal 1:1 pixel scale

display.setTextColor(SH110X_WHITE);

display.setCursor(0,0);
// Draw white text

// Start at top-left corner

display.print(F("Communication error!\n"));

display.display();
return p;

} else if (p == FINGERPRINT_BADLOCATION) {

//Serial.println("Could not delete in that


location"); display.clearDisplay();

display.setTextSize(1);

// Normal 1:1 pixel scale

display.setTextColor(SH110X_WHITE);

display.setCursor(0,0);
// Draw white text

// Start at top-left corner

display.print(F("Could not delete in that location!\


n")); display.display();

return p;

} else if (p == FINGERPRINT_FLASHERR) {

//Serial.println("Error writing to
flash"); display.clearDisplay();
display.setTextSize(1);

// Normal 1:1 pixel scale

display.setTextColor(SH110X_WHITE);

display.setCursor(0,0);

3
// Draw white text

// Start at top-left corner

display.print(F("Error writing to flash!\n"));

display.display();
return p;

} else {

//Serial.print("Unknown error: 0x"); Serial.println(p,


HEX); display.clearDisplay();

display.setTextSize(2);

// Normal 2:2 pixel scale

display.setTextColor(SH110X_WHITE);

display.setCursor(0,0);
// Draw white text

// Start at top-left corner

display.print(F("Unknown error:\n"));

display.display();
return p;

} return p;

//******************Check if there a Fingerprint ID to add******************

void ChecktoAddID(){
WiFiClient client;

HTTPClient http; //Declare object of class HTTPClient

//Post Data
postData = "Get_Fingerid=get_id"; // Add the Fingerprint ID to the Post array in order to send it

// Post methode

http.begin(client,link); //initiate HTTP request, put your Website URL or Your Computer IP

http.addHeader("Content-Type", "application/x-www-form-urlencoded"); //Specify content-type

header

int httpCode = http.POST(postData); //Send the request

String payload = http.getString(); //Get the response payload

if (payload.substring(0, 6) == "add-id")

{ String add_id = payload.substring(6);

Serial.println(add_id);
id = add_id.toInt();

3
getFingerprintEnroll();

http.end(); //Close connection

//******************Enroll a Finpgerprint ID*****************

uint8_t getFingerprintEnroll() {

int p = -1;

display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_scan_bits, FinPr_scan_width, FinPr_scan_height, SH110X_WHITE);

display.display();
while (p != FINGERPRINT_OK) {

p=

finger.getImage();

switch (p) {
case FINGERPRINT_OK:

//Serial.println("Image taken");
display.clearDisplay();
display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height,

SH110X_WHITE);

display.display();

break;
case FINGERPRINT_NOFINGER:
//Serial.println(".");

display.setTextSize(1); // Normal 2:2 pixel scale


display.setTextColor(SH110X_WHITE); // Draw white
text display.setCursor(0,0); // Start at top-left corner
display.print(F("scanning"));

display.display();

break;
case FINGERPRINT_PACKETRECIEVEERR:

display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_invalid_bits, FinPr_invalid_width, FinPr_invalid_height,


SH110X_WHITE);

display.display();
break;

case FINGERPRINT_IMAGEFAIL:
3
Serial.println("Imaging error");
break;
default:

Serial.println("Unknown error");
break;

// OK success!

p=
finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:

display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height,

SH110X_WHITE);

display.display();
break;
case FINGERPRINT_IMAGEMESS:

display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_invalid_bits, FinPr_invalid_width,


FinPr_invalid_height, SH110X_WHITE);
display.display();

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

display.clearDisplay();

display.setTextSize(2); // Normal 2:2 pixel scale

display.setTextColor(SH110X_WHITE); // Draw white

text display.setCursor(0,0); // Start at top-left corner

display.print(F("Remove"));

display.setCursor(0,20);

display.print(F("finger"));

display.display();

//Serial.println("Remove finger");

delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {

p = finger.getImage();

Serial.print("ID "); Serial.println(id);


p = -1;
display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_scan_bits, FinPr_scan_width, FinPr_scan_height, SH110X_WHITE);


display.display();

while (p != FINGERPRINT_OK) {

p=
finger.getImage();
switch (p) {

case FINGERPRINT_OK:

//Serial.println("Image taken");

display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height,


SH110X_WHITE);
display.display();
break;

case FINGERPRINT_NOFINGER:

//Serial.println(".");

display.setTextSize(1); // Normal 2:2 pixel scale

display.setTextColor(SH110X_WHITE); // Draw white

text display.setCursor(0,0); // Start at top-left corner

display.print(F("scanning"));
3
display.display();
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");

display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height,

SH110X_WHITE);

display.display();
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:
3
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!");

display.clearDisplay();

display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height,

SH110X_WHITE);
display.display();

} 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!");
display.clearDisplay();
display.drawBitmap( 34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height,

SH110X_WHITE);

display.display();

confirmAdding();
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {

Serial.println("Communication error");

return p;
} else if (p == FINGERPRINT_BADLOCATION) {

Serial.println("Could not store in that location");

3
return p;

} else if (p == FINGERPRINT_FLASHERR) {

Serial.println("Error writing to

flash"); return p;

} else {

Serial.println("Unknown error");

return p;
}

return p;

//******************Check if there a Fingerprint ID to add******************


void confirmAdding(){

WiFiClient client;

HTTPClient http; //Declare object of class HTTPClient

//Post Data

postData = "confirm_id=" + String(id); // Add the Fingerprint ID to the Post array in order to send it

// Post methode

http.begin(client,link); //initiate HTTP request, put your Website URL or Your Computer IP

http.addHeader("Content-Type", "application/x-www-form-urlencoded"); //Specify content-type

header

int httpCode = http.POST(postData); //Send the request

String payload = http.getString(); //Get the response payload

display.clearDisplay();
display.setTextSize(1.5);

// Normal 1:1 pixel scale


display.setTextColor(SH110X_WHITE);
// Draw white text
display.setCursor(0,0);
display.print(payload);
display.display();
delay(1000);
Serial.println(payload);

// Start at top-left corner


http.end(); //Close connection

4
//********************connect to the WiFi******************
void connectToWiFi(){
WiFi.mode(WIFI_OFF);

delay(1000);

WiFi.mode(WIFI_STA);

//Prevents reconnection issue (taking too long to


connect) Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

display.clearDisplay();

display.setTextSize(1);

// Normal 1:1 pixel scale

display.setTextColor(SH110X_WHITE);

display.setCursor(0, 0);
// Draw white text
// Start at top-left corner
display.print(F("Connecting to \n"));
display.setCursor(0, 50);
display.setTextSize(2);
display.print(ssid);

display.drawBitmap( 73, 10, Wifi_start_bits, Wifi_start_width, Wifi_start_height, SH110X_WHITE);


display.display();
while (WiFi.status() != WL_CONNECTED)

{ delay(500);
Serial.print(".");

Serial.println("");
Serial.println("Connected");
display.clearDisplay();
display.setTextSize(2);

// Normal 1:1 pixel scale


display.setTextColor(SH110X_WHITE);
display.setCursor(8, 0);

// Draw white text

// Start at top-left corner

display.print(F("Connected \n"));

4
display.drawBitmap( 33, 15, Wifi_connected_bits, Wifi_connected_width, Wifi_connected_height,
SH110X_WHITE);
display.display();

Serial.print("IP address:

");
Serial.println(WiFi.localIP()); //IP address assigned to your ESP

6.Troubleshooting:-

6.1 Problems/Faults in Project :-


False acceptance and rejection rates can lead to unauthorized access or denied
entry.
Fingerprint quality issues, such as worn or dry fingers, may affect recognition.
Environmental factors like dust, moisture, or extreme temperatures can result
in inaccurate readings.
Enrollment errors can occur if the process is not well-documented or
conducted improperly.
Poor system integration can lead to data discrepancies and administrative
difficulties.
Security concerns, including the risk of data breaches, highlight the
importance of strong encryption and protective measures.
High initial costs for hardware and software can be a barrier to adoption,
especially for smaller organizations.
Regular maintenance and calibration of fingerprint sensors add to the total cost
of ownership.

4
6.2 Steps to solve problems/faults in the project :-
Regular Maintenance and Calibration: Schedule routine maintenance to clean
and calibrate sensors, ensuring accuracy and durability.
Enrollment Procedures: Properly train personnel responsible for fingerprint
enrollment, document the process well, and perform multiple scans to account
for fingerprint quality variations.
Quality Fingerprint Sensors: Invest in high-quality sensors with anti-spoofing
features to reduce false acceptance rates.

Backup Methods: Implement alternative attendance recording methods (e.g.,


RFID cards or PINs) for use when fingerprint recognition fails.
Security Measures: Enhance data security through encryption, secure storage,
and access controls to protect biometric data.
Environmental Considerations: Shield sensors from environmental factors
like dust and moisture with proper enclosures and controls.
System Integration: Ensure seamless integration with other systems to
minimize data discrepancies and streamline administrative tasks.
Compliance: Stay informed about data protection regulations and comply
with relevant laws to safeguard user privacy and data security.
User Privacy and Consent: Obtain user consent and provide clear
explanations of data usage and protection.
Cost Considerations: Evaluate the total cost of ownership, including initial,
maintenance, and training costs, while considering long-term savings from
reduced fraud and administrative work.

4
7) FUTURESCOPE :-
 Biometric technology is effective for identity verification and fraud
detection.
 It can set and confirm the user's identity, making it valuable for various
applications.
 Expanding the use of biometrics can enhance fraud detection in
educational institutions and organizations.
 It offers efficiency and performance benefits compared to traditional
attendance systems.
 Data is well-structured and stored using flash memory.
 The system is user-friendly and highly reliable.
 It can be implemented in both organizations and educational institutions.
 Future enhancements can include features to indicate if employees or
students are late.
 Expanding flash memory for storing complete details of students is a
potential improvement.
 Tracking arrival and exit times for additional monitoring is another
enhancement option.

4
8) PROJECT PRICE :-

SR COMPONENTS PRICE

1 ESP8266 240/-

2 FINGERPRINT SENSOR 900/-


MODULE

3 OLED display (128*64) 400/-

4 WIRES 60/-

TOTAL COST 1600/-

4
9) ADVANTAGES :-
1. Accuracy: Highly precise identification through fingerprint recognition.
2. Efficiency: Real-time data capture and transmission reduce administrative
workload.
3. Convenience: Employees easily clock in/out with a simple fingerprint scan.
4. Security: Fingerprint uniqueness provides robust authentication,
minimizing fraud.
5. Cost-effectiveness: Long-term savings through reduced paperwork and
improved efficiency.
6. Remote Access: Managers can monitor attendance from anywhere with
internet access.
7. Integration: Seamless integration with HR and payroll software for
streamlined processes.
8. Scalability: Easily adapts to organizational growth or changes in workforce
size.
9. Compliance: Helps meet labor regulations and audit requirements
through accurate record-keeping.
10.Analytics: Insights into attendance patterns and productivity trends
inform decision-making.

10) DISADVANTAGES :-
1. Hygiene Concerns: Sharing scanners can raise hygiene issues.
2. False Rejection Rates: Some users may struggle with consistent
recognition.
3. Privacy Concerns: Biometric data storage raises privacy issues.
4. System Vulnerabilities: Susceptible to hacking or spoofing attacks.
5. Costs: Initial setup and ongoing maintenance can be expensive.
6. Environmental Factors: Dust, moisture, or extreme temperatures can
affect performance.
7. Legal Compliance: Regulations around biometric data may pose
challenges.
8. Dependency on Electricity and Connectivity: Reliance on power and
network connectivity.
9. Integration Challenges: Difficulty in integrating with existing systems.

4
11) APPLICATIONS :-
1. Workplaces: Track employee attendance.
2. Schools: Monitor student attendance.
3. Healthcare: Manage staff attendance.
4. Government Offices: Record government employee attendance.
5. Construction Sites: Monitor worker attendance.
6. Events: Track attendee participation.
7. Gyms: Record member attendance.
8. Research Facilities: Track researcher attendance.
9. Prisons: Monitor inmate and staff movements.
10.Financial Institutions: Ensure secure access and track employee
attendance.

12) RESULT :-
1. Accuracy: Provides precise tracking of attendance due to the uniqueness
of fingerprints.
2. Efficiency: Streamlines attendance recording, reducing administrative
workload and errors.
3. Accountability: Holds individuals accountable for their attendance,
discouraging tardiness or absenteeism.
4. Security: Enhances security by restricting access to authorized personnel
only.
5. Data Insights: Generates data for analysis, enabling better workforce
management and resource allocation.
6. Compliance: Helps in meeting regulatory requirements for attendance
tracking.
7. Cost Savings: Optimizes resource utilization and reduces costs associated
with manual attendance tracking.
8. Transparency: Promotes transparency in attendance management,
fostering trust within the organization.
9. Productivity: Encourages punctuality and discipline, potentially boosting
overall productivity.
10.Automation: Automates attendance processes, freeing up time for more
strategic tasks.

4
13) CONCLUSION :-
In conclusion, the implementation of a fingerprint attendance system offers
numerous benefits including enhanced accuracy, efficiency, and security in
tracking attendance. Through the utilization of biometric technology, the
system ensures accountability, promotes transparency, and facilitates
compliance with regulatory requirements. Additionally, it provides valuable
data insights for better workforce management and resource allocation. While
there may be some challenges such as initial setup costs and privacy concerns,
the overall advantages outweigh the drawbacks. Ultimately, the fingerprint
attendance system represents a valuable tool for organizations seeking to
streamline attendance management processes and optimize operational
efficiency.

REFERENCES :-

1. Mohamed Basheer K P and Raghu C V “Fingerprint Attendance System


for classroom needs”- published in 2012 Annual IEEE Indian Conference
2. Z. C. A. Kassem, M. Hamad and S. E. Dahdaah, “An rfid attendance and
monitoring system for university applications,” in 17th IEEE International
Conference on Electronics, Circuits, and Systems (ICECS), 2010, pp. 851
– 854.
3. L. X. LI Jian-po, ZHU Xu-ning and Z. Zhi-ming, “Wireless fingerprint
attendance system based on zigbee technology,” in 2nd International
Workshop on Intelligent Systems and Applications (ISA), May 2010, pp. 1
–4

4
4

You might also like