Simple test
Ensure your device works with this simple test.
examples/fingerprint_simpletest.py
1# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
2# SPDX-License-Identifier: MIT
3
4import time
5import board
6import busio
7from digitalio import DigitalInOut, Direction
8import adafruit_fingerprint
9
10led = DigitalInOut(board.D13)
11led.direction = Direction.OUTPUT
12
13uart = busio.UART(board.TX, board.RX, baudrate=57600)
14
15# If using with a computer such as Linux/RaspberryPi, Mac, Windows with USB/serial converter:
16# import serial
17# uart = serial.Serial("/dev/ttyUSB0", baudrate=57600, timeout=1)
18
19# If using with Linux/Raspberry Pi and hardware UART:
20# import serial
21# uart = serial.Serial("/dev/ttyS0", baudrate=57600, timeout=1)
22
23finger = adafruit_fingerprint.Adafruit_Fingerprint(uart)
24
25##################################################
26
27
28def get_fingerprint():
29 """Get a finger print image, template it, and see if it matches!"""
30 print("Waiting for image...")
31 while finger.get_image() != adafruit_fingerprint.OK:
32 pass
33 print("Templating...")
34 if finger.image_2_tz(1) != adafruit_fingerprint.OK:
35 return False
36 print("Searching...")
37 if finger.finger_search() != adafruit_fingerprint.OK:
38 return False
39 return True
40
41
42# pylint: disable=too-many-branches
43def get_fingerprint_detail():
44 """Get a finger print image, template it, and see if it matches!
45 This time, print out each error instead of just returning on failure"""
46 print("Getting image...", end="")
47 i = finger.get_image()
48 if i == adafruit_fingerprint.OK:
49 print("Image taken")
50 else:
51 if i == adafruit_fingerprint.NOFINGER:
52 print("No finger detected")
53 elif i == adafruit_fingerprint.IMAGEFAIL:
54 print("Imaging error")
55 else:
56 print("Other error")
57 return False
58
59 print("Templating...", end="")
60 i = finger.image_2_tz(1)
61 if i == adafruit_fingerprint.OK:
62 print("Templated")
63 else:
64 if i == adafruit_fingerprint.IMAGEMESS:
65 print("Image too messy")
66 elif i == adafruit_fingerprint.FEATUREFAIL:
67 print("Could not identify features")
68 elif i == adafruit_fingerprint.INVALIDIMAGE:
69 print("Image invalid")
70 else:
71 print("Other error")
72 return False
73
74 print("Searching...", end="")
75 i = finger.finger_fast_search()
76 # pylint: disable=no-else-return
77 # This block needs to be refactored when it can be tested.
78 if i == adafruit_fingerprint.OK:
79 print("Found fingerprint!")
80 return True
81 else:
82 if i == adafruit_fingerprint.NOTFOUND:
83 print("No match found")
84 else:
85 print("Other error")
86 return False
87
88
89# pylint: disable=too-many-statements
90def enroll_finger(location):
91 """Take a 2 finger images and template it, then store in 'location'"""
92 for fingerimg in range(1, 3):
93 if fingerimg == 1:
94 print("Place finger on sensor...", end="")
95 else:
96 print("Place same finger again...", end="")
97
98 while True:
99 i = finger.get_image()
100 if i == adafruit_fingerprint.OK:
101 print("Image taken")
102 break
103 if i == adafruit_fingerprint.NOFINGER:
104 print(".", end="")
105 elif i == adafruit_fingerprint.IMAGEFAIL:
106 print("Imaging error")
107 return False
108 else:
109 print("Other error")
110 return False
111
112 print("Templating...", end="")
113 i = finger.image_2_tz(fingerimg)
114 if i == adafruit_fingerprint.OK:
115 print("Templated")
116 else:
117 if i == adafruit_fingerprint.IMAGEMESS:
118 print("Image too messy")
119 elif i == adafruit_fingerprint.FEATUREFAIL:
120 print("Could not identify features")
121 elif i == adafruit_fingerprint.INVALIDIMAGE:
122 print("Image invalid")
123 else:
124 print("Other error")
125 return False
126
127 if fingerimg == 1:
128 print("Remove finger")
129 time.sleep(1)
130 while i != adafruit_fingerprint.NOFINGER:
131 i = finger.get_image()
132
133 print("Creating model...", end="")
134 i = finger.create_model()
135 if i == adafruit_fingerprint.OK:
136 print("Created")
137 else:
138 if i == adafruit_fingerprint.ENROLLMISMATCH:
139 print("Prints did not match")
140 else:
141 print("Other error")
142 return False
143
144 print("Storing model #%d..." % location, end="")
145 i = finger.store_model(location)
146 if i == adafruit_fingerprint.OK:
147 print("Stored")
148 else:
149 if i == adafruit_fingerprint.BADLOCATION:
150 print("Bad storage location")
151 elif i == adafruit_fingerprint.FLASHERR:
152 print("Flash storage error")
153 else:
154 print("Other error")
155 return False
156
157 return True
158
159
160##################################################
161
162
163def get_num():
164 """Use input() to get a valid number from 1 to 127. Retry till success!"""
165 i = 0
166 while (i > 127) or (i < 1):
167 try:
168 i = int(input("Enter ID # from 1-127: "))
169 except ValueError:
170 pass
171 return i
172
173
174while True:
175 print("----------------")
176 if finger.read_templates() != adafruit_fingerprint.OK:
177 raise RuntimeError("Failed to read templates")
178 print("Fingerprint templates:", finger.templates)
179 print("e) enroll print")
180 print("f) find print")
181 print("d) delete print")
182 print("----------------")
183 c = input("> ")
184
185 if c == "e":
186 enroll_finger(get_num())
187 if c == "f":
188 if get_fingerprint():
189 print("Detected #", finger.finger_id, "with confidence", finger.confidence)
190 else:
191 print("Finger not found")
192 if c == "d":
193 if finger.delete_model(get_num()) == adafruit_fingerprint.OK:
194 print("Deleted!")
195 else:
196 print("Failed to delete")