物联网AI MicroPython传感器学习 之 AS608指纹识别模块

学物联网,来万物简单IoT物联网!!在这里插入图片描述

一、产品简介

AS608指纹识别模块是一款高性能的光学指纹识别模块。它采用的是指纹识别芯片公司杭州晟元芯片技术有限公司生产的AS608指纹识别芯片。该芯片内置DSP运算单元,集成了指纹识别算法,能高效快速采集图像并对指纹特征进行识别。 该模块配备了串口和USB接口,用户无需研究复杂的图像处理及指纹识别算法,只需通过简单的串口、USB按照通讯协议便可控制模块。本模块可应用于各种考勤机、保险箱柜 、指纹门禁系统、指纹锁等场合。
本文中主控板和AS608模块之间使用UART进行通信,实际使用过程中最少只需要使用VCC/TX/RX/GND四根引脚和主控板进行通信。模块接口外观及其定义如下:
image.png

引脚定义

名称说明
VCC模块电源正极
TX串行数据输出,TTL逻辑电平
RX串行数据输入,TTL逻辑电平
GND地线
TOUCH触摸板感应信号,默认高电平有效
UA触摸板电源输入,3.3V
D+USB D+数据线
D-USB D-数据线

二、技术参数

  • 供电电压:3.0V~5.5V,典型值:3.3V
  • 工作电流:30~60mA,典型值:40mA
  • ADC测量速率:8Bps~860Bps,可设置
  • UART接口配置(默认波特率:57600,数据位:8,停止位1,校验位:none,TTL电平)
  • USB接口支持全速2.0标准
  • 图像处理时间:<0.4秒
  • 上电延时:<0.1秒,模块上电后需要约 0.1S 初始化工作
  • 指纹搜索时间:<0.3秒
  • 拒真率:<1%
  • 认假率:<0.001%
  • 指纹存容量:300枚
  • 工作环境:温度-20~60摄氏度,湿度<90%(无凝露)

三、软件接口

AS608(uartObj) - 创建AS608驱动对象

  • 函数原型:

as608Obj = AS608(uartObj)

  • 参数说明:
参数类型必选参数?说明
uartObjUART传入uart对象
  • 返回值:

执行成功,返回指纹识别模块对象;创建失败,抛出Exception

  • 示例代码:
from machine import UART,Pin    # 驱动库
import as608               # AS608指纹识别模块库uartObj = UART(1, baudrate=57600,bits = 8,stop = 2, tx=Pin(33), rx=Pin(32))
as608Obj = as608.AS608(uartObj) # AS608指纹识别设备初始化
print("AS608 inited!")
  • 输出:
AS608 inited!

getEmptyPosition - 获取空白位置ID

  • 函数功能:
    查询AS608内部空闲指纹存储ID,即未存储有效指纹模板的存储空间
  • 函数原型:

AS608.getEmptyPosition()

  • 参数说明:

  • 返回值:
    成功返回非负值,代表可用指纹存储ID,失败返回as608.FAIL
  • 示例:
from machine import UART,Pin    # 驱动库
import as608               # AS608指纹识别模块库uartObj = UART(1, baudrate=57600,bits = 8,stop = 2, tx=Pin(33), rx=Pin(32))
as608Obj = as608.AS608(uartObj) # AS608指纹识别设备初始化
print("AS608 inited!")id = as608Obj.getEmptyPosition()
print("available id:", id)
  • 输出:
AS608 inited!
available id: 1

fingerEnroll - 指纹注册

  • 函数功能:
    开始指纹注册操作,指纹识别的是通过将采集到的指纹和指纹库中的指纹进行特征匹配,匹配成功则指纹识别通过;否则指纹识别失败。需要“指纹注册”过程才能完成向指纹库录入指纹的目的。
  • 函数原型:

AS608.fingerEnroll(id)

  • 参数说明:
参数类型必选参数?说明
idint本次指纹注册成功后放在指纹识别库中的位置ID,范围为0~299
  • 返回值:
    成功返回as608.SUCCESS;失败返回as608.FAIL
  • 示例:
from machine import UART,Pin    # 驱动库
import as608               # AS608指纹识别模块库uartObj = UART(1, baudrate=57600,bits = 8,stop = 2, tx=Pin(33), rx=Pin(32))
as608Obj = as608.AS608(uartObj) # AS608指纹识别设备初始化
print("AS608 inited!")id = as608Obj.getEmptyPosition()
print("available id:", id)if id >= 0:fig.fingerEnroll(id)
  • 输出:
AS608 inited!
available id:1
wait for finger print on the pannel
finger detected
take off your finger, please
put on your finger again, please
creating finger model
store finger model
store finger model success

fingerSearch - 指纹识别

  • 函数功能:
    进行指纹识别操作
  • 函数原型:

AS608.fingerSearch()

  • 参数说明:

  • 返回值:
    (result, id, confidence),返回值说明如下:
参数类型说明
resultintas608.SUCCESS代表在指纹库中搜索到指纹;as608.FAIL代表未搜索到指纹
idint该指纹在指纹库中的位置
confidenceint可信度,范围:0~65535,数值越大,可信度越高
  • 示例:
from machine import UART,Pin    # 驱动库
import as608               # AS608指纹识别模块库uartObj = UART(1, baudrate=57600,bits = 8,stop = 2, tx=Pin(33), rx=Pin(32))
as608Obj = as608.AS608(uartObj) # AS608指纹识别设备初始化
print("AS608 inited!")result, id, confidence = as608Obj.fingerSearch()if result == as608.SUCCESS:print('finger search successs,', id, confidence)
else:print('your finger was not enrolled')
  • 输出:
AS608 inited!
finger search successs, 0, 190

deleteModel - 从指纹库中删除特定指纹

  • 函数功能:
    从指纹库中删除特定指纹
  • 函数原型:

AS608.deleteModel(id)

  • 参数说明:
参数类型必选参数?说明
idint要删除的指纹在指纹识别库中的位置ID,范围为0~299
  • 返回值:
    成功返回as608.SUCCESS;失败返回as608.FAIL
  • 示例:
from machine import UART,Pin    # 驱动库
import as608               # AS608指纹识别模块库uartObj = UART(1, baudrate=57600,bits = 8,stop = 2, tx=Pin(33), rx=Pin(32))
as608Obj = as608.AS608(uartObj) # AS608指纹识别设备初始化
print("AS608 inited!")id = 0
as608Obj.deleteModel(id)
print("model delete done")
  • 输出:
AS608 inited!
model delete done

emptyDatabase - 清空指纹库

  • 函数功能:
    清空指纹库

!慎用!

  • 函数原型:

AS608.emptyDatabase()

  • 参数说明:

  • 返回值:
    成功返回as608.SUCCESS;失败返回as608.FAIL
  • 示例:
from machine import UART,Pin    # 驱动库
import as608               # AS608指纹识别模块库uartObj = UART(1, baudrate=57600,bits = 8,stop = 2, tx=Pin(33), rx=Pin(32))
as608Obj = as608.AS608(uartObj) # AS608指纹识别设备初始化
print("AS608 inited!")as608Obj.emptyDatabase()
print("empty database done")
  • 输出:
AS608 inited!
empty database done

下面的API是AS608模块提供的原子功能的API,如果开发者对这个模块的功能比较熟悉,可以采用,但如果开发者对这个模块不熟悉,不建议直接使用下面的API。

getImage - 采集指纹图片

  • 函数功能:
    清空指纹库

!慎用!

  • 函数原型:

AS608.getImage()

  • 参数说明:

  • 返回值:
    成功返回as608.SUCCESS;失败返回as608.FAIL
  • 示例:
    请参考fingerEnroll函数实现里边的用法

image2Character - 指纹图片生成特征值

  • 函数功能:
    清空指纹库

!慎用!

  • 函数原型:

AS608.image2Character(bufferId)

  • 参数说明:
参数类型必选参数?说明
bufferIdint转换后的特征值存储缓冲区ID, 1代表将特征值存储在Buffer1中;2代表将特征值存储在Buffer2中
  • 返回值:
    成功返回0;失败返回as608.FAIL
  • 示例:
    请参考fingerEnroll函数实现里边的用法

createModel - 合并特征并生成模板

  • 函数功能:
    合并特征并生成模板
  • 函数原型:

AS608.createModel()

  • 参数说明:

  • 返回值:
    成功返回as608.SUCCESS;失败返回as608.FAIL
  • 示例:
    请参考fingerEnroll函数实现里边的用法

storeModel - 存储模板

  • 函数功能:
    将指纹对应的特征模板存放到指纹数据库中
  • 函数原型:

AS608.storeModel(id)

  • 参数说明:
参数类型必选参数?说明
idint指纹存储在指纹库中的位置,范围[0,299]
  • 返回值:
    成功返回as608.SUCCESS;失败返回as608.FAIL
  • 示例:
    请参考fingerEnroll函数实现里边的用法

search - 在指纹库中搜索指纹

  • 函数功能:
    在指纹库中搜索特征模板
  • 函数原型:

AS608.search()

  • 参数说明:
  • 返回值:

(result, id, confidence),变量说明如下:

参数类型说明
resultintas608.SUCCESS代表在指纹库中搜索到指纹;as608.FAIL代表未搜索到指纹
idint该指纹在指纹库中的位置
confidenceint可信度,范围:0~65535,数值越大,可信度越高
  • 示例:
    请参考fingerSearch函数实现里边的用法

四、接口案例

  • 案例代码:
from machine import UART,Pin    # 驱动库
import as608               # AS608指纹识别模块库uartObj = UART(1, baudrate=57600,bits = 8,stop = 2, tx=Pin(33), rx=Pin(32))
as608Obj = as608.AS608(uartObj) # AS608指纹识别设备初始化
print("AS608 inited!")id = as608Obj.getEmptyPosition()
print("empty record id:", id)ret = as608Obj.fingerEnroll(id)
if ret:print("finger enroll failed!")
else:print("finger enroll success!")while True:ret, id, score = as608Obj.fingerSearch()print(ret, id, score)
  • 输出:
AS608 inited!
empty record id:1
wait for finger print on the pannel
finger detected
take off your finger, please
put on your finger again, please
creating finger model
store finger model
store finger model success
finger enroll success!

五、通信协议

主控芯片和AS608之间采用UART进行通信。
发往AS608模块的指令都遵循如下的格式:

名称包头芯片地址包标识包长度指令标识参数1参数n校验和
字节数(单位:bytes)24121NNN2
内容0xEF01xxxx01N=

AS608模块回复的响应都遵循如下的格式:

名称包头芯片地址包标识包长度确认码返回参数校验和
字节数(单位:bytes)24121N2
内容0xEF01xxxx01N=

AS608模组共提供31条指令,实际使用中最常用的指令有如下几条:

指令码功能说明
01H从传感器上读入图像存于图像缓冲区
02H根据原始图像生成指纹特征存于CharBuffer1或CharBuffer2
03H精确比对CharBuffer1与CharBuffer2中的特征文件
04H以CharBuffer1或CharBuffer2中的特征文件搜索整个或部分指纹库
05H将CharBuffer1与CharBuffer2中的特征文件合并生成模板存于CharBuffer1与CharBuffer2
06H将特征缓冲区中的文件储存到flash指纹库中
0CH删除flash指纹库中的一个特征文件
0DH清空flash指纹库
0EH设置系统参数
0FH读系统基本参数
1BH高速搜索FLASH
1DH读有效模板个数

AS608模块回复的响应包中的确认码如下:

确认码功能说明
00H表示指令执行完毕或OK
01H表示数据包接收错误
02H表示传感器上没有手指
03H表示录入指纹图像失败
04H表示指纹图像太干、太淡而生不成特征
05H表示指纹图像太湿、太糊而生不成特征
06H表示指纹图像太乱而生不成特征
07H表示指纹图像正常,但特征点太少(或面积太小)而生不成特征
08H表示指纹不匹配
09H表示没搜索到指纹
0aH表示特征合并失败
0bH表示访问指纹库时地址序号超出指纹库范围
0cH表示从指纹库读模板出错或无效
0dH表示上传特征失败
0eH表示模块不能接受后续数据包
0fH表示上传图像失败
10H表示删除模板失败
11H表示清空指纹库失败
13H表示口令不正确
15H表示缓冲区内没有有效原始图而生不成图像
18H表示读写 FLASH 出错
19H未定义错误
1AH无效寄存器号
1BH寄存器设定内容错误号
1CH记事本页码指定错误
1DH端口操作失败
1EH自动注册失败
1FH指纹库满

实际控制此指纹识别模块进行指纹录入和指纹识别的流程请参考下图。
image.png

参考文献及购买链接

[1] AS60x指纹识别SoC通讯手册
[2] AS60x指纹识别购买链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23.项目开发之量化交易抓取数据QuantTradeData(二)

后端业务&#xff1a;定时更新“A股日线行情”数据 需求说明 为了获取前一天的最新数据&#xff0c;我们需要每天晚上10点定时刷新daily股票列表基础信息&#xff0c;并将最新数据插入或更新到数据库中。 如果该内容是在当天交易日信息未更新前查询&#xff08;15~16点之前&a…

《数据结构、算法与应用C++语言描述》使用C++语言实现数组循环队列

《数据结构、算法与应用C语言描述》使用C语言实现数组循环队列 定义 队列的定义 队列&#xff08;queue&#xff09;是一个线性表&#xff0c;其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾&#xff08;back或rear&#xff09;&#xff0c;删除元素的那一…

rabbitmq发送json格式 utf8编码数据

参考文章&#xff1a;Spring-Cloud RabbitMQ 用法 - 发送json对象 - 简书 生产者&#xff1a; 消费者&#xff1a;

哪家堡垒机支持国密算法?有哪些功能?

国密算法即国家密码局认定的国产密码算法&#xff0c;即商用密码。最近看到有不少小伙伴在问&#xff0c;哪家堡垒机支持国密算法&#xff1f;有哪些功能&#xff1f; 哪家堡垒机支持国密算法&#xff1f; 行云堡垒支持SM2、SM3、SM4等国产密码算法&#xff0c;同时支持国密…

C++使用openssl对AES-256-ECB PKCS7 加解密

/** AES-256-ECB PKCS7 加密 函数* input:经过PKCS7填充后的明文数据* outhex:加密后的命名数据16进制数,可以使用base64_encode转换为base64格式字符串密文* key:密钥* len:经过PKCS7填充后的明文数据长度*/ void AesEcb256Pkcs7Encrypt(u8 *input, u8 *outhex, u8 *key, int …

基于Java的旅游网站系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

2023年中国GPS导航设备产量、销量及市场规模分析[图]

GPS导航设备行业是指生产和销售用于导航、定位和监控目的的GPS设备的行业&#xff0c;可以用于汽车、船只、飞机、人员和其他物体的定位和导航&#xff0c;以及用于地理信息系统&#xff08;GIS&#xff09;、测绘、海洋抢险、森林监测、地质勘探、气象预报、交通管理、物流跟踪…

Java项目-网页聊天程序

目录 项目介绍 项目功能简介 项目创建 用户管理模块 1.数据库设计及代码实现 2.前后端交互接口的设计 3.服务器代码开发 好友管理模块 数据库设计 好友表设计的两个重要问题 设计前后端交互接口 服务器代码 会话管理模块 会话的数据库设计 获取会话信息 约定前后…

滴滴弹性云基于 K8S 的调度实践

上篇文章详细介绍了弹性云混部的落地历程&#xff0c;弹性云是滴滴内部提供给网约车等核心服务的容器平台&#xff0c;其基于 k8s 实现了对海量 node 的管理和 pod 的调度。本文重点介绍弹性云的调度能力&#xff0c;分为以下部分&#xff1a; 调度链路图&#xff1a;介绍当前弹…

服务器数据恢复-RAID信息破坏导致服务器操作系统无法启动的数据恢复案例

服务器数据恢复环境&#xff1a; 一台服务器&#xff0c;8块硬盘组建了一组raid5磁盘阵列&#xff0c;服务器安装的是windows server操作系统&#xff0c;上层部署ORACLE数据库。 服务器故障&#xff1a; 在服务器运行过程中&#xff0c;2块硬盘报警&#xff0c;服务器操作系统…

【75. 颜色分类】

目录 一、题目描述二、算法思想三、代码实现 一、题目描述 二、算法思想 三、代码实现 class Solution { public:void sortColors(vector<int>& nums) {int nnums.size();for(int left-1,rightn,i0;i<right;){if(nums[i]0)swap(nums[i],nums[left]);else if(nums…

Android SurfaceControlViewHost介绍及使用

概要介绍 SurfaceControlViewHost是一个工具类&#xff0c; 用于帮助在其他进程中显示本进程的view。 SurfaceControlViewHost 为绘制进程持有&#xff0c;其中的SurfacePackage 交给另外的显示进程&#xff0c;在显示进程中的SurfaceView中通过SurfaceView.setChildSurface…

华测监测预警系统 2.2---任意文件读取漏洞

目录 1. 资产搜集 2. 漏洞复现 3. 实战总结 1. 资产搜集 直接上fofa 和 hunter 个人推荐hunter可以看到icp备案公司直接提交盒子就行了 FOFA语法 app”华测监测预警系统2.2” Hunter语法 web.body”华测监测预警系统2.2” 2. 漏洞复现 这里手动复现的&#xff0c;目录是/…

Godot2D角色导航-自动寻路教程(Godot获取导航路径)

文章目录 开始准备获取路径全局点坐标 开始准备 首先创建一个导航场景&#xff0c;具体内容参考下列文章&#xff1a; Godot实现角色随鼠标移动 然后我们需要设置它的导航目标位置&#xff0c;具体关于位置的讲解在下面这个文章&#xff1a; Godot设置导航代理的目标位置 获取…

【自动化测试】基于Selenium + Python的web自动化框架

一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化工具&#xff0c;她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid&#xff1a;  1、Selenium IDE&…

吐血整理,服务端性能测试中间件-项目集成redis实战,一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Linux下Redis安装…

Jmeter性能测试:高并发分布式性能测试

一、为什么要进行分布式性能测试 当进行高并发性能测试的时候&#xff0c;受限于Jmeter工具本身和电脑硬件的原因&#xff0c;无法满足我们对大并发性能测试的要求。 基于这种场景下&#xff0c;我们就需要采用分布式的方式来实现我们高并发的性能测试要求。 二、分布式性能…

深入探求:中国精益生产与管理实践的崭新视角

经过多方位的了解&#xff0c;比之制造行业上的精益管理上的表现情况&#xff0c;认为目前国内的精益生产精益管理实践仍处于自我认知的水平。目前很多的企业前进的步伐还是主要依据市场经济发展所衍生出来的较为先进的工具运用&#xff0c;其战略性的管理处于局部优化再而达到…

线上软件的故障排查方法

线上软件的故障排查是确保软件系统正常运行和快速解决问题的重要任务。以下是一些通用的线上软件故障排查方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 监控系统&#xff1a; 使用监控工具来追…

Chrome 浏览器关闭后再打开,需要重新登录账号,解决办法

最近&#xff08;2023-10-15&#xff09;每次打开 Chrome 浏览器&#xff0c;Chrome 自身账号以及各个网站账号都需要重新登录&#xff0c;电脑本身为家用&#xff0c;使用时间不多的情况下&#xff0c;频繁登录账号很痛苦&#xff0c;也很迷惑。现找到解决办法&#xff0c;记录…