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