Skip to content

Commit a03e236

Browse files
Added another example based on the default one
1 parent 263b435 commit a03e236

File tree

1 file changed

+207
-0
lines changed

1 file changed

+207
-0
lines changed
Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
import time
2+
import board
3+
import busio
4+
from digitalio import DigitalInOut, Direction
5+
import adafruit_fingerprint
6+
7+
led = DigitalInOut(board.D13)
8+
led.direction = Direction.OUTPUT
9+
10+
#uart = busio.UART(board.TX, board.RX, baudrate=57600)
11+
12+
# If using with a computer such as Linux/RaspberryPi, Mac, Windows with USB/serial converter:
13+
#import serial
14+
#uart = serial.Serial("/dev/ttyUSB0", baudrate=57600, timeout=1)
15+
16+
# If using with Linux/Raspberry Pi and hardware UART:
17+
#import serial
18+
#uart = serial.Serial("/dev/ttyS0", baudrate=57600, timeout=1)
19+
20+
# If using with Linux/Raspberry Pi 3 with pi3-disable-bt
21+
import serial
22+
uart = serial.Serial("/dev/ttyAMA0", baudrate=57600, timeout=1)
23+
24+
finger = adafruit_fingerprint.Adafruit_Fingerprint(uart)
25+
26+
##################################################
27+
28+
29+
def get_fingerprint():
30+
"""Get a finger print image, template it, and see if it matches!"""
31+
print("Waiting for image...")
32+
while finger.get_image() != adafruit_fingerprint.OK:
33+
pass
34+
print("Templating...")
35+
if finger.image_2_tz(1) != adafruit_fingerprint.OK:
36+
return False
37+
print("Searching...")
38+
if finger.finger_fast_search() != adafruit_fingerprint.OK:
39+
return False
40+
return True
41+
42+
# pylint: disable=too-many-branches
43+
def 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="", flush=True)
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="", flush=True)
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="", flush=True)
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+
# pylint: disable=too-many-statements
89+
def 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="", flush=True)
94+
else:
95+
print("Place same finger again...", end="", flush=True)
96+
97+
while True:
98+
i = finger.get_image()
99+
if i == adafruit_fingerprint.OK:
100+
print("Image taken")
101+
break
102+
elif i == adafruit_fingerprint.NOFINGER:
103+
print(".", end="", flush=True)
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="", flush=True)
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="", flush=True)
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("Storing model #%d..." % location, end="", flush=True)
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+
def get_num(max_number):
162+
"""Use input() to get a valid number from 0 to the maximum size
163+
of the library. Retry till success!"""
164+
i = -1
165+
while (i > max_number - 1) or (i < 0):
166+
try:
167+
i = int(input("Enter ID # from 0-{}: ".format(max_number - 1)))
168+
except ValueError:
169+
pass
170+
return i
171+
172+
173+
while 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+
if finger.count_templates() != adafruit_fingerprint.OK:
179+
raise RuntimeError('Failed to read templates')
180+
print("Number of templates found: ", finger.template_count)
181+
if finger.read_sysparam() != adafruit_fingerprint.OK:
182+
raise RuntimeError('Failed to get system parameters')
183+
print("Size of template library: ", finger.library_size)
184+
print("e) enroll print")
185+
print("f) find print")
186+
print("d) delete print")
187+
print("r) reset library")
188+
print("----------------")
189+
c = input("> ")
190+
191+
if c == 'e':
192+
enroll_finger(get_num(finger.library_size))
193+
if c == 'f':
194+
if get_fingerprint():
195+
print("Detected #", finger.finger_id, "with confidence", finger.confidence)
196+
else:
197+
print("Finger not found")
198+
if c == 'd':
199+
if finger.delete_model(get_num(finger.library_size)) == adafruit_fingerprint.OK:
200+
print("Deleted!")
201+
else:
202+
print("Failed to delete")
203+
if c == 'r':
204+
if finger.empty_library() == adafruit_fingerprint.OK:
205+
print("Library empty!")
206+
else:
207+
print("Failed to empty library")

0 commit comments

Comments
 (0)