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")