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