电子说
概述
使用生物识别技术保护您的项目-这种多功能的光学指纹传感器将使添加指纹检测和验证超级简单。这些模块通常用于保险柜中-有一个高性能的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
全部0条评论
快来发表一下你的评论吧 !