Adafruit光学指纹传感器的使用教程

电子说

1.3w人已加入

描述

概述

光学指纹传感器

使用生物识别技术保护您的项目-这种多功能的光学指纹传感器将使添加指纹检测和验证超级简单。这些模块通常用于保险柜中-有一个高性能的DSP芯片可以进行图像渲染,计算,特征查找和搜索。使用TTL串行连接到任何微控制器或系统,并发送数据包以拍照,检测打印,哈希和搜索。您也可以直接注册新手指-板载闪存中最多可以存储162个指纹。

我们喜欢这种特殊的传感器,因为它不仅是易于使用,它还带有相当简单的Windows软件,使模块的测试变得简单-您甚至可以使用该软件进行注册,并在计算机屏幕上查看指纹图像。但是,当然,我们不会给您数据表和“好运”! -我们编写了完整的Arduino库,因此您可以在10分钟内开始运行。该图书馆可以注册和搜索,因此非常适合任何项目。我们还编写了有关接线和使用的详细教程。这是迄今为止您可以获得的最好的指纹传感器。

电源电压: 3.6-6.0VDC

工作电流:最大120mA

峰值电流:最大150mA

指纹成像时间: 《1.0秒

窗口区域: 14mm x 18mm

签名文件: 256字节

模板文件: 512字节

存储容量: 162个模板

安全等级(1-5低到高安全性)

错误接受率: 《0.001%(安全级别3)

错误拒绝率: 《1.0%(安全级别3)

接口: TTL串行

波特率::9600、19200、28800、38400、57600(默认为57600)

工作温度等级: -20C至+ 50C

工作湿度:相对湿度40%-85%

完整尺寸: 56 x 20 x 21.5mm

暴露尺寸(放置在盒子中):21mm x 21mm x 21mm三角形

重量: 20克

注册与搜索

使用光学指纹传感器基本上有两个要求。首先,您需要注册指纹-这意味着为每个打印件分配ID号,以便以后查询。登记完所有打印件后,您可以轻松地“搜索”传感器,要求其识别当前正在拍摄的ID(如果有)。

您可以使用Windows软件进行登记(最简单,最简洁的方法是显示)

或使用Arduino草图(适合在没有Windows机器的情况下使用或在路上报名)。

使用Windows注册新用户

注册新指纹的最简单方法是使用Windows软件。不幸的是,该界面/测试软件仅用于Windows,但 您只需使用一次即可注册,以获取要存储在模块中的指纹。

首先向上,您将需要通过USB串行转换器将传感器连接到计算机。最简单的方法是将其直接连接到Arduino中的USB/串行转换器。为此,您需要上传一个“空白草图”,该草图对于“传统” Arduino(例如Uno和Mega)非常有效:

下载:Project Zip 或 blank.ino | 在Github上查看

复制代码

// this sketch will allow you to bypass the Atmega chip

// and connect the fingerprint sensor directly to the USB/Serial

// chip converter.

// Red connects to +5V

// Black connects to Ground

// White goes to Digital 0

// Green goes to Digital 1

void setup() {}

void loop() {}

// this sketch will allow you to bypass the Atmega chip

// and connect the fingerprint sensor directly to the USB/Serial

// chip converter.

// Red connects to +5V

// Black connects to Ground

// White goes to Digital 0

// Green goes to Digital 1

void setup() {}

void loop() {}

“空白”草图不适用于基于Leonard,Micro,Zero等基于“原生USB”的Arduino!如果您使用的是Leonardo,Micro,Yun,Zero或其他基于ATSAMD21或ATmega32U4的原生USB设备,请改用Leo_passthru草图!

控制器,请使用Leo_passthru草图而不是“空白”草图。

下载:Project Zip or Leo_passthru.ino | 在Github上查看

复制代码

//Leo_passthru

// Allows Leonardo to pass serial data between fingerprint reader and Windows.

//

// Red connects to +5V

// Black connects to Ground

// Green goes to Digital 0

// White goes to Digital 1

void setup() {

// put your setup code here, to run once:

Serial1.begin(57600);

Serial.begin(57600);

}

void loop() {

while (Serial.available())

Serial1.write(Serial.read());

while (Serial1.available())

Serial.write(Serial1.read());

} //Leo_passthru

// Allows Leonardo to pass serial data between fingerprint reader and Windows.

//

// Red connects to +5V

// Black connects to Ground

// Green goes to Digital 0

// White goes to Digital 1

void setup() {

// put your setup code here, to run once:

Serial1.begin(57600);

Serial.begin(57600);

}

void loop() {

while (Serial.available())

Serial1.write(Serial.read());

while (Serial1.available())

Serial.write(Serial1.read());

}

上传草图后,按照草图注释中的接线图连接传感器。由于传感器的导线太细又短,因此我们将导线剥开一点并熔化一些焊料,以使其接触更好,但如果接触不良,则可能需要将导线焊接到插头或类似的端子上。插入电源时,您可能会看到LED闪烁以指示传感器正在工作。

光学指纹传感器

如果传感器具有所有相同颜色的导线,则从左起的第一根导线接地,然后是两个数据引脚,然后上电。

RX与白线相同

TX与绿线相同

光学指纹传感器

如果传感器使用不同的电线,则首先从左起的导线应为黑线接地,然后是两个数据引脚,RX为白线,TX为绿线,然后为红色电源线。

光学指纹传感器

启动SFGDemo软件,然后单击左下角的打开设备。选择Arduino使用的 COM端口。

光学指纹传感器

,然后按OK。您应该看到以下内容,并在底部角落显示蓝色成功消息和一些设备统计信息。您可以在左下角更改波特率,以及“安全级别”(它的敏感程度),但是我们建议您不要更改这些波特率,直到您一切正常并且想要尝试。它们应默认为57600波特和安全级别3,因此如果输入错误,请进行设置

如果打开设备时出现错误,请检查接线,并尝试交换传感器上的RX和TX线,这是常见的混合现象!

光学指纹传感器

让我们注册一根新手指!点击预览复选框,然后按其旁边的 Enroll 按钮( Con Enroll 表示“连续”注册,如果您想要有很多手指可以注册)。出现对话框时,输入您要使用的ID#。您最多可以使用162个ID号。

光学指纹传感器

软件将要求您将手指按到传感器上

光学指纹传感器

然后,您可以查看指纹的预览(如果选中了预览复选框)。

光学指纹传感器

然后您将不得不重复该过程,以获得一个第二次清洁打印。用同一根手指!

成功,您会收到通知。

光学指纹传感器

,如果出现打印质量差或图像不好的问题,则必须再次进行操作。

使用软件进行搜索

一旦您注册了手指,最好进行一次快速测试以确保可以在数据库中找到它。单击右侧的搜索按钮。

系统提示时,将另一根/相同的手指按到传感器上。

如果是同一根手指,则应该与ID#

光学指纹传感器

如果不是数据库中的手指,则会收到失败通知。

光学指纹传感器

用于Arduino的接线

测试完传感器后,现在就可以在草图中使用它来验证指纹。我们需要重新连接传感器。断开绿线和白线的连接,然后将绿线插入数字 2 ,白线插入数字 3 。 (对于ESP8266,请使用 4 和 5 ,对于具有硬件UART的设备,请使用 0 和 1 )

传感器正常闪烁LED通电后很快就会消失,直到您开始向其请求数据

光学指纹传感器

如果您的传感器使用不同的导线,则从左侧开始的第一根导线应为黑色导线接地,然后是两个数据引脚, RX是白线,TX是绿线,然后是红色电源线。您必须切割,剥皮和焊接导线。

光学指纹传感器

如果传感器具有所有相同颜色的电线,则从左开始的第一根电线接地,然后是两个数据引脚,然后通电。

RX与白线相同

TX与绿线相同

Arduino UNO和兼容的布线

此示例草图使用引脚 2 和 3 进行软件串行(默认情况下在ATmega328P型板上)-并非所有板都支持软件所有引脚均为串行,请查阅电路板文档!例如在ESP8266上,我们使用 4 和 5

您可以通过 3.3V 或 5V为传感器供电

在下图中,我们显示了直接插入电线的电线。 Arduino的。但是,这不能很好地工作,因为电线太细并且它们没有接触。您应该将较粗的实芯线焊接到每根导线上,以实现良好的接触。注意:电缆的两端都插入指纹传感器-在切断任何东西之前,请确保已卸下其正确的一端。您的接线顺序应该与上面的图像匹配,并且指纹传感器朝上。

光学指纹传感器

硬件序列接线

如果您的设备带有硬件串行,则应该改用该设备。通常是引脚#0和#1

光学指纹传感器

下一步,您需要安装Adafruit指纹传感器库(也可以从github获得)。

打开Arduino库管理器:

光学指纹传感器

键入指纹,直到出现 Adafruit指纹库为止!

光学指纹传感器

点击“安装”!而已。现在您应该可以选择文件→示例→Adafruit_Fingerprint→指纹示例草图。

软和硬串行

默认情况下,草图使用软件串行(Arduino UNO和兼容版本)。如果您使用的是带有硬件串行的设备,例如没有USB串行转换器芯片,请改用它!通常这些位于针脚0和1

下载:文件

复制代码

// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white

// uncomment this line:

#define mySerial Serial1

// For UNO and others without hardware serial, we must use software serial.。.

// pin #2 is IN from sensor (GREEN wire)

// pin #3 is OUT from arduino (WHITE wire)

// comment these two lines if using hardware serial

//#include

//SoftwareSerial mySerial(2, 3); // On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white

// uncomment this line:

#define mySerial Serial1

// For UNO and others without hardware serial, we must use software serial.。.

// pin #2 is IN from sensor (GREEN wire)

// pin #3 is OUT from arduino (WHITE wire)

// comment these two lines if using hardware serial

//#include

//SoftwareSerial mySerial(2, 3);

如有必要,取消注释/注释行以支持硬件串行

上传

照常将其上传到Arduino。以9600波特打开串行监视器,并在出现提示时将手指放在已经注册的传感器上。

您应该看到以下内容:

光学指纹传感器

“信心”是一个分数(从0到255),表示得分印刷品的匹配度越高,越好。请注意,如果完全匹配,则意味着传感器非常有信心,因此除非对高安全性应用有意义,否则您不必注意信心数字。

当然,您必须拥有首先注册指纹!如果您使用Windows程序执行此操作,那就很好了。如果尚未打印,则至少应打印Found fingerprint sensor!。您可以继续进行下一步以注册指纹。

如果得到Did not find fingerprint sensor :(检查接线,则也许要交换RX和TX线,因为这是常见问题。

如果要拥有更详细的报告,请更改 loop()以运行 getFingerprintID(),而不是 getFingerprintIDez(),这将为您提供详细报告传感器在搜索过程中每个点正要检测的内容。

使用Arduino注册

我们确实整理了一个简单的草图,用于通过Arduino注册新手指-它不像Windows程序那样容易使用,但确实可以使用!

运行文件→示例→Adafruit_Fingerprint→注册草图并将其上传到Arduino,使用与上述相同的接线。

打开串行监视器时,它将要求您输入要注册的ID-在顶部的框中输入数字,然后单击发送。

光学指纹传感器

然后按照指示完成注册过程。成功注册手指后,它将打印已存储!

光学指纹传感器

完成注册以确保一切都很好时,别忘了进行搜索测试!

Python和CircuitPython

将光学指纹传感器与Python和CircuitPython以及Adafruit CircuitPython Fingerprint模块一起使用很容易。此模块可让您轻松编写读取,注册或删除指纹的Python代码。

由于使用了我们的CircuitPython- Adafruit_Blinka,您可以将此传感器与任何CircuitPython微控制器板或具有GPIO和Python的计算机一起使用。 for-Python兼容性库。

传感器接线

光学指纹传感器

如果您的传感器有不同的电线,从左开始的第一根电线应该是黑线,然后是两个数据引脚,RX是白线,TX是绿线,然后是红色电源线。您必须将较粗的导线切割,剥皮并焊接到当前导线上。

光学指纹传感器

如果传感器具有所有相同颜色的电线,则从左起的第一根电线接地,然后是两个数据引脚,然后通电。

RX与白线相同

TX与绿线相同

在下图中,我们显示了已插入的电线直接放入小饰品。但是,这不能很好地工作,因为电线太细并且它们没有接触。您应该将较粗的实芯线焊接到每根导线上,以实现良好的接触。注意:电缆的两端都插入指纹传感器-在切断任何东西之前,请确保已卸下其正确的一端。您的接线顺序应与上面的图像匹配,且指纹传感器朝下。

CircuitPython微控制器接线

首先,按照与Arduino前几页完全相同的方式将指纹传感器连接到板上。这是使用UART将小饰品M0接线到传感器的示例:

每个CircuitPython板都有一个硬件UART。检查产品页面或查找板上写的 RX 和 TX 。请记住,来自传感器的RX到达板上的TX!如果您遇到问题,请尝试交换它们,这是一个常见错误

光学指纹传感器

Python计算机接线

由于有数十种Linux计算机/主板可以使用,因此我们将显示Raspberry的接线皮。对于其他平台,请访问Linux上的CircuitPython指南,以了解您的平台是否受支持。

在这里,您有两个选择:外部USB到串行转换器,或USB上的内置UART。 Pi的TX/RX引脚。下面是连接USB到串行转换器的示例:

传感器VCC(红线)到 USB 5V 或 3V (USB控制台电缆上的红线)

传感器GND(黑线)至 USB接地(黑线)

传感器RX(白线)到 USB TX (绿色线)

传感器TX (绿线)到 USB RX (白线)

光学指纹传感器

以下是使用Pi的内置UART的示例:

光学指纹传感器

Pi GND 至传感器GND(黑色k线)

Pi TX 到传感器RX(白线)

Pi RX 到传感器TX(绿线)

Pi 3.3v 到传感器VCC(红线)

如果要使用内置UART,则需要禁用串行控制台并启用 raspi-config 中的串行端口硬件。有关如何执行此操作的详细说明,请参见《 Raspberry Pi上CircuitPython指南》的“ UART/串行”部分。

注意Raspberry Pi以外的SBC板在I/O引脚上可能有或没有可用的硬件UART,或者可能已将它们永久映射到控制台等。请参考您的板的文档以查看是否存在是一个硬件UART,其位置,启用方式以及是否可用于除控制台以外的串行设备进行编程。

CircuitPython指纹库安装

要使用指纹传感器,您需要安装Adafruit Circuitp板上的CircuitPython指纹库。

首先请确保您正在为板运行最新版本的Adafruit CircuitPython。

接下来,您需要安装必要的库才能使用硬件- -认真遵循他一步步从Adafruit的CircuitPython库捆绑包中查找和安装这些库。我们的简介指南上有一个很棒的页面,介绍了如何为快装板和非快装板安装库捆绑包。

将必要的文件从库捆绑包复制到《您的 lib 文件夹中strong》 CIRCUITPY 驱动器:

adafruit_fingerprint.mpy

在继续之前,请确保主板的 lib 文件夹复制了 adafruit_fingerprint.mpy 文件。

下一步连接到开发板的串行REPL,因此您在CircuitPython上》》》 提示

指纹库的Python安装

您需要安装 Adafruit_Blinka 库,该库在Python中提供了CircuitPython支持。这可能还需要在您的平台上启用硬件UART(请参见上面的红色说明)并确认您正在运行Python3。由于每个平台都略有不同,并且Linux经常更改,请访问Linux上的CircuitPython指南以使您的计算机准备就绪!

完成后,从命令行运行以下命令:

sudo pip3 install adafruit-circuitpython-fingerprint

如果您的默认设置Python是版本3,您可能需要运行‘pip’。只要确保您不尝试在Python 2.x上使用CircuitPython,就不支持它!

CircuitPython和Python的用法

为演示传感器的用法,我们将使用该库附带的示例python脚本。该传感器非常复杂,因此仅通过REPL很难运行。

CircuitPython微控制器用法

一旦安装了库,请运行此 code.py 在CircuitPython开发板上的示例。

使用Python的Linux/Computer/Raspberry Pi

如果您在Raspberry Pi(或任何计算机)上运行Fingerprint_simpletest.py,则必须进行一些更改。

在Raspberry Pi上,注释掉uart = busio.UART(。..)行,并取消注释相应的import serial和uart = serial.Serial(。..)行,具体取决于您使用的是USB串行还是硬件UART。现在,您可以使用以下命令运行该程序:

下载:文件

复制代码

python3 fingerprint_simpletest.py python3 fingerprint_simpletest.py

示例代码

下载:Project Zip 或 fingerprint_simpletest.py | 在Github上查看

复制代码

import time

import board

import busio

from digitalio import DigitalInOut, Direction

import adafruit_fingerprint

led = DigitalInOut(board.D13)

led.direction = Direction.OUTPUT

uart = busio.UART(board.TX, board.RX, baudrate=57600)

# If using with a computer such as Linux/RaspberryPi, Mac, Windows with USB/serial converter:

#import serial

#uart = serial.Serial(“/dev/ttyUSB0”, baudrate=57600, timeout=1)

# If using with Linux/Raspberry Pi and hardware UART:

#import serial

#uart = serial.Serial(“/dev/ttyS0”, baudrate=57600, timeout=1)

finger = adafruit_fingerprint.Adafruit_Fingerprint(uart)

##################################################

def get_fingerprint():

“”“Get a finger print image, template it, and see if it matches!”“”

print(“Waiting for image.。.”)

while finger.get_image() != adafruit_fingerprint.OK:

pass

print(“Templating.。.”)

if finger.image_2_tz(1) != adafruit_fingerprint.OK:

return False

print(“Searching.。.”)

if finger.finger_fast_search() != adafruit_fingerprint.OK:

return False

return True

# pylint: disable=too-many-branches

def get_fingerprint_detail():

“”“Get a finger print image, template it, and see if it matches!

This time, print out each error instead of just returning on failure”“”

print(“Getting image.。.”, end=“”, flush=True)

i = finger.get_image()

if i == adafruit_fingerprint.OK:

print(“Image taken”)

else:

if i == adafruit_fingerprint.NOFINGER:

print(“No finger detected”)

elif i == adafruit_fingerprint.IMAGEFAIL:

print(“Imaging error”)

else:

print(“Other error”)

return False

print(“Templating.。.”, end=“”, flush=True)

i = finger.image_2_tz(1)

if i == adafruit_fingerprint.OK:

print(“Templated”)

else:

if i == adafruit_fingerprint.IMAGEMESS:

print(“Image too messy”)

elif i == adafruit_fingerprint.FEATUREFAIL:

print(“Could not identify features”)

elif i == adafruit_fingerprint.INVALIDIMAGE:

print(“Image invalid”)

else:

print(“Other error”)

return False

print(“Searching.。.”, end=“”, flush=True)

i = finger.finger_fast_search()

# pylint: disable=no-else-return

# This block needs to be refactored when it can be tested.

if i == adafruit_fingerprint.OK:

print(“Found fingerprint!”)

return True

else:

if i == adafruit_fingerprint.NOTFOUND:

print(“No match found”)

else:

print(“Other error”)

return False

# pylint: disable=too-many-statements

def enroll_finger(location):

“”“Take a 2 finger images and template it, then store in ‘location’”“”

for fingerimg in range(1, 3):

if fingerimg == 1:

print(“Place finger on sensor.。.”, end=“”, flush=True)

else:

print(“Place same finger again.。.”, end=“”, flush=True)

while True:

i = finger.get_image()

if i == adafruit_fingerprint.OK:

print(“Image taken”)

break

elif i == adafruit_fingerprint.NOFINGER:

print(“。”, end=“”, flush=True)

elif i == adafruit_fingerprint.IMAGEFAIL:

print(“Imaging error”)

return False

else:

print(“Other error”)

return False

print(“Templating.。.”, end=“”, flush=True)

i = finger.image_2_tz(fingerimg)

if i == adafruit_fingerprint.OK:

print(“Templated”)

else:

if i == adafruit_fingerprint.IMAGEMESS:

print(“Image too messy”)

elif i == adafruit_fingerprint.FEATUREFAIL:

print(“Could not identify features”)

elif i == adafruit_fingerprint.INVALIDIMAGE:

print(“Image invalid”)

else:

print(“Other error”)

return False

if fingerimg == 1:

print(“Remove finger”)

time.sleep(1)

while i != adafruit_fingerprint.NOFINGER:

i = finger.get_image()

print(“Creating model.。.”, end=“”, flush=True)

i = finger.create_model()

if i == adafruit_fingerprint.OK:

print(“Created”)

else:

if i == adafruit_fingerprint.ENROLLMISMATCH:

print(“Prints did not match”)

else:

print(“Other error”)

return False

print(“Storing model #%d.。.” % location, end=“”, flush=True)

i = finger.store_model(location)

if i == adafruit_fingerprint.OK:

print(“Stored”)

else:

if i == adafruit_fingerprint.BADLOCATION:

print(“Bad storage location”)

elif i == adafruit_fingerprint.FLASHERR:

print(“Flash storage error”)

else:

print(“Other error”)

return False

return True

##################################################

def get_num():

“”“Use input() to get a valid number from 1 to 127. Retry till success!”“”

i = 0

while (i 》 127) or (i 《 1):

try:

i = int(input(“Enter ID # from 1-127: ”))

except ValueError:

pass

return i

while True:

print(“----------------”)

if finger.read_templates() != adafruit_fingerprint.OK:

raise RuntimeError(‘Failed to read templates’)

print(“Fingerprint templates:”, finger.templates)

print(“e) enroll print”)

print(“f) find print”)

print(“d) delete print”)

print(“----------------”)

c = input(“》 ”)

if c == ‘e’:

enroll_finger(get_num())

if c == ‘f’:

if get_fingerprint():

print(“Detected #”, finger.finger_id, “with confidence”, finger.confidence)

else:

print(“Finger not found”)

if c == ‘d’:

if finger.delete_model(get_num()) == adafruit_fingerprint.OK:

print(“Deleted!”)

else:

print(“Failed to delete”)

import time

import board

import busio

from digitalio import DigitalInOut, Direction

import adafruit_fingerprint

led = DigitalInOut(board.D13)

led.direction = Direction.OUTPUT

uart = busio.UART(board.TX, board.RX, baudrate=57600)

# If using with a computer such as Linux/RaspberryPi, Mac, Windows with USB/serial converter:

#import serial

#uart = serial.Serial(“/dev/ttyUSB0”, baudrate=57600, timeout=1)

# If using with Linux/Raspberry Pi and hardware UART:

#import serial

#uart = serial.Serial(“/dev/ttyS0”, baudrate=57600, timeout=1)

finger = adafruit_fingerprint.Adafruit_Fingerprint(uart)

##################################################

def get_fingerprint():

“”“Get a finger print image, template it, and see if it matches!”“”

print(“Waiting for image.。.”)

while finger.get_image() != adafruit_fingerprint.OK:

pass

print(“Templating.。.”)

if finger.image_2_tz(1) != adafruit_fingerprint.OK:

return False

print(“Searching.。.”)

if finger.finger_fast_search() != adafruit_fingerprint.OK:

return False

return True

# pylint: disable=too-many-branches

def get_fingerprint_detail():

“”“Get a finger print image, template it, and see if it matches!

This time, print out each error instead of just returning on failure”“”

print(“Getting image.。.”, end=“”, flush=True)

i = finger.get_image()

if i == adafruit_fingerprint.OK:

print(“Image taken”)

else:

if i == adafruit_fingerprint.NOFINGER:

print(“No finger detected”)

elif i == adafruit_fingerprint.IMAGEFAIL:

print(“Imaging error”)

else:

print(“Other error”)

return False

print(“Templating.。.”, end=“”, flush=True)

i = finger.image_2_tz(1)

if i == adafruit_fingerprint.OK:

print(“Templated”)

else:

if i == adafruit_fingerprint.IMAGEMESS:

print(“Image too messy”)

elif i == adafruit_fingerprint.FEATUREFAIL:

print(“Could not identify features”)

elif i == adafruit_fingerprint.INVALIDIMAGE:

print(“Image invalid”)

else:

print(“Other error”)

return False

print(“Searching.。.”, end=“”, flush=True)

i = finger.finger_fast_search()

# pylint: disable=no-else-return

# This block needs to be refactored when it can be tested.

if i == adafruit_fingerprint.OK:

print(“Found fingerprint!”)

return True

else:

if i == adafruit_fingerprint.NOTFOUND:

print(“No match found”)

else:

print(“Other error”)

return False

# pylint: disable=too-many-statements

def enroll_finger(location):

“”“Take a 2 finger images and template it, then store in ‘location’”“”

for fingerimg in range(1, 3):

if fingerimg == 1:

print(“Place finger on sensor.。.”, end=“”, flush=True)

else:

print(“Place same finger again.。.”, end=“”, flush=True)

while True:

i = finger.get_image()

if i == adafruit_fingerprint.OK:

print(“Image taken”)

break

elif i == adafruit_fingerprint.NOFINGER:

print(“。”, end=“”, flush=True)

elif i == adafruit_fingerprint.IMAGEFAIL:

print(“Imaging error”)

return False

else:

print(“Other error”)

return False

print(“Templating.。.”, end=“”, flush=True)

i = finger.image_2_tz(fingerimg)

if i == adafruit_fingerprint.OK:

print(“Templated”)

else:

if i == adafruit_fingerprint.IMAGEMESS:

print(“Image too messy”)

elif i == adafruit_fingerprint.FEATUREFAIL:

print(“Could not identify features”)

elif i == adafruit_fingerprint.INVALIDIMAGE:

print(“Image invalid”)

else:

print(“Other error”)

return False

if fingerimg == 1:

print(“Remove finger”)

time.sleep(1)

while i != adafruit_fingerprint.NOFINGER:

i = finger.get_image()

print(“Creating model.。.”, end=“”, flush=True)

i = finger.create_model()

if i == adafruit_fingerprint.OK:

print(“Created”)

else:

if i == adafruit_fingerprint.ENROLLMISMATCH:

print(“Prints did not match”)

else:

print(“Other error”)

return False

print(“Storing model #%d.。.” % location, end=“”, flush=True)

i = finger.store_model(location)

if i == adafruit_fingerprint.OK:

print(“Stored”)

else:

if i == adafruit_fingerprint.BADLOCATION:

print(“Bad storage location”)

elif i == adafruit_fingerprint.FLASHERR:

print(“Flash storage error”)

else:

print(“Other error”)

return False

return True

##################################################

def get_num():

“”“Use input() to get a valid number from 1 to 127. Retry till success!”“”

i = 0

while (i 》 127) or (i 《 1):

try:

i = int(input(“Enter ID # from 1-127: ”))

except ValueError:

pass

return i

while True:

print(“----------------”)

if finger.read_templates() != adafruit_fingerprint.OK:

raise RuntimeError(‘Failed to read templates’)

print(“Fingerprint templates:”, finger.templates)

print(“e) enroll print”)

print(“f) find print”)

print(“d) delete print”)

print(“----------------”)

c = input(“》 ”)

if c == ‘e’:

enroll_finger(get_num())

if c == ‘f’:

if get_fingerprint():

print(“Detected #”, finger.finger_id, “with confidence”, finger.confidence)

else:

print(“Finger not found”)

if c == ‘d’:

if finger.delete_model(get_num()) == adafruit_fingerprint.OK:

print(“Deleted!”)

else:

print(“Failed to delete”)

虽然相当长,但是它可以帮助您设置和测试传感器!

首次启动时,您应该得到以下内容:

光学指纹传感器

如果出现类似RuntimeError: Failed to read data from sensor的错误,则表明出现了问题-检查接线和波特率!

此菜单系统非常简单,您可以做三件事

注册打印-您将用手指拍摄图像并将模型“存储”在传感器中

查找打印-det确定是否知道并存储了指纹

删除打印-清除模型

注册指纹

注册指纹很容易。键入 e 开始该过程。您需要选择一个位置。该传感器最多可以存储127个打印位置。选择一个有效的数字,然后手指两次注册。

光学指纹传感器

请注意,成功后,指纹模板:[。..] 打印输出将包括新的模板ID。

如果发生错误,传感器将为您提供一个错误,例如,如果两个打印件不匹配,或者存储或生成模型失败:

光学指纹传感器

查找指纹

一旦您注册了指纹,就可以对其进行测试。运行 f ind命令,然后尝试各种手指!识别出指纹ID后,它会告诉您位置编号,在这种情况下为#5

光学指纹传感器

删除指纹

如果输入有误,可以从数据库中删除指纹模型。例如,以下是删除#5的方法。请注意指纹模板:[。..] 打印输出更改!

光学指纹传感器

下载

github上的Arduino接口库

用户手册

数据表(它并不是一个很好的数据表,

英文版的《用户手册》

“ SFGDemo”仅用于Windows的测试软件

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分