技术标签: python HaaS硬件积木 HaaS 物联网 传感器 iot
ATK-AS608指纹识别模块是ALIENTEK推出的一款高性能的光学指纹识别模块。它采用的是指纹识别芯片公司杭州晟元芯片技术有限公司生产的AS608指纹识别芯片。该芯片内置DSP运算单元,集成了指纹识别算法,能高效快速采集图像并对指纹特征进行识别。 该模块配备了串口和USB接口,用户无需研究复杂的图像处理及指纹识别算法,只需通过简单的串口、USB按照通讯协议便可控制模块。本模块可应用于各种考勤机、保险箱柜 、指纹门禁系统、指纹锁等场合。
本文中主控板和AS608模块之间使用UART进行通信,实际使用过程中最少只需要使用VCC/TX/RX/GND四根引脚和主控板进行通信。模块接口外观及其定义如下:
名称 | 说明 |
VCC | 模块电源正极 |
TX | 串行数据输出,TTL逻辑电平 |
RX | 串行数据输入,TTL逻辑电平 |
GND | 地线 |
TOUCH | 触摸板感应信号,默认高电平有效 |
UA | 触摸板电源输入,3.3V |
D+ | USB D+数据线 |
D- | USB D-数据线 |
AS608指纹识别模块HaaS Python驱动:下载地址
fig = AS608(uartObj)
参数 | 类型 | 必选参数? | 说明 |
uartObj | UART | 是 | 调用此函数前需确保uartObj对象已经处于open状态 |
执行成功,返回指纹识别模块对象;创建失败,抛出Exception
from driver import UART # 驱动库
import as608 # AS608指纹识别模块库
uartDev = UART()
uartDev.open('as608') # 按照board.json中名为"as608"的设备节点的配置参数(主设备UART波特率、起始位、数据位及停止位长度等)初始化UART类型设备对象
fig = as608.AS608(uartDev) # AS608指纹识别设备初始化
print("AS608 inited!")
uartDev.close() # 关闭UART设备
del fig # 删除AS608指纹识别设备对象
AS608 inited!
ADS1115.getEmptyPosition()
无
from driver import UART # 驱动库
import as608 # AS608指纹识别模块库
uartDev = UART()
uartDev.open('as608') # 按照board.json中名为"as608"的设备节点的配置参数(主设备UART波特率、起始位、数据位及停止位长度等)初始化UART类型设备对象
fig = as608.AS608(uartDev) # AS608指纹识别设备初始化
print("AS608 inited!")
id = fig.getEmptyPosition()
print("available id:", id)
uartDev.close() # 关闭UART设备
del fig # 删除AS608指纹识别设备对象
AS608 inited!
available id: 1
AS608.fingerEnroll(id)
参数 | 类型 | 必选参数? | 说明 |
id | int | 是 | 本次指纹注册成功后放在指纹识别库中的位置ID,范围为0~299 |
from driver import UART # 驱动库
import as608 # AS608指纹识别模块库
uartDev = UART()
uartDev.open('as608') # 按照board.json中名为"as608"的设备节点的配置参数(主设备UART波特率、起始位、数据位及停止位长度等)初始化UART类型设备对象
fig = as608.AS608(uartDev) # AS608指纹识别设备初始化
print("AS608 inited!")
id = fig.getEmptyPosition()
print("available id:", id)
if id >= 0:
fig.fingerEnroll(id)
uartDev.close() # 关闭UART设备
del fig # 删除AS608指纹识别设备对象
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
AS608.fingerSearch()
无
参数 | 类型 | 说明 |
result | int | as608.SUCCESS代表在指纹库中搜索到指纹;as608.FAIL代表未搜索到指纹 |
id | int | 该指纹在指纹库中的位置 |
confidence | int | 可信度,范围:0~65535,数值越大,可信度越高 |
from driver import UART # 驱动库
import as608 # AS608指纹识别模块库
uartDev = UART()
uartDev.open('as608') # 按照board.json中名为"as608"的设备节点的配置参数(主设备UART波特率、起始位、数据位及停止位长度等)初始化UART类型设备对象
fig = as608.AS608(uartDev) # AS608指纹识别设备初始化
print("AS608 inited!")
result, id, confidence = fig.fingerSearch()
if result == as608.SUCCESS:
print('finger search successs,', id, confidence)
else:
print('your finger was not enrolled')
uartDev.close() # 关闭UART设备
del fig # 删除AS608指纹识别设备对象
AS608 inited!
finger search successs, 0, 190
AS608.deleteModel(id)
参数 | 类型 | 必选参数? | 说明 |
id | int | 是 | 要删除的指纹在指纹识别库中的位置ID,范围为0~299 |
from driver import UART # 驱动库
import as608 # AS608指纹识别模块库
uartDev = UART()
uartDev.open('as608') # 按照board.json中名为"as608"的设备节点的配置参数(主设备UART波特率、起始位、数据位及停止位长度等)初始化UART类型设备对象
fig = as608.AS608(uartDev) # AS608指纹识别设备初始化
print("AS608 inited!")
id = 0
fig.deleteModel(id)
print("model delete done")
uartDev.close() # 关闭UART设备
del fig # 删除AS608指纹识别设备对象
AS608 inited!
model delete done
!慎用!
AS608.emptyDatabase()
无
from driver import UART # 驱动库
import as608 # AS608指纹识别模块库
uartDev = UART()
uartDev.open('as608') # 按照board.json中名为"as608"的设备节点的配置参数(主设备UART波特率、起始位、数据位及停止位长度等)初始化UART类型设备对象
fig = as608.AS608(uartDev) # AS608指纹识别设备初始化
print("AS608 inited!")
fig.emptyDatabase()
print("empty database done")
uartDev.close() # 关闭UART设备
del fig # 删除AS608指纹识别设备对象
AS608 inited!
empty database done
下面的API是AS608模块提供的原子功能的API,如果开发者对这个模块的功能比较熟悉,可以采用,但如果开发者对这个模块不熟悉,不建议直接使用下面的API。
!慎用!
AS608.getImage()
无
!慎用!
AS608.image2Character(bufferId)
参数 | 类型 | 必选参数? | 说明 |
bufferId | int | 否 | 转换后的特征值存储缓冲区ID, 1代表将特征值存储在Buffer1中;2代表将特征值存储在Buffer2中 |
AS608.createModel()
无
AS608.storeModel(id)
参数 | 类型 | 必选参数? | 说明 |
id | int | 否 | 指纹存储在指纹库中的位置,范围[0,299] |
AS608.search()
参数 | 类型 | 说明 |
result | int | as608.SUCCESS代表在指纹库中搜索到指纹;as608.FAIL代表未搜索到指纹 |
id | int | 该指纹在指纹库中的位置 |
confidence | int | 可信度,范围:0~65535,数值越大,可信度越高 |
此使用实例在board.json中定义了名为as608的UART类型的对象。在Python脚本中首先录制指纹,然后周期性的进行指纹识别
{
"name": "board-name",
"version": "1.0.0",
"io": {
"as608": {
"type": "UART",
"port": 2,
"dataWidth": 8,
"baudRate": 57600,
"stopBits": 2,
"flowControl": "disable",
"parity": "none"
}
},
"debugLevel": "ERROR",
"repl": "disable"
}
from driver import UART # 驱动库
import as608 # AS608指纹识别模块库
uartDev = UART()
uartDev.open('as608') # 按照board.json中名为"as608"的设备节点的配置参数(主设备UART波特率、起始位、数据位及停止位长度等)初始化UART类型设备对象
fig = as608.AS608(uartDev) # AS608指纹识别设备初始化
print("AS608 inited!")
id = fig.getEmptyPosition()
print("empty record id:", id)
ret = fig.fingerEnroll(id)
if ret:
print("finger enroll failed!")
else:
print("finger enroll success!")
while True:
ret, id, score = fig.fingerSearch()
print(ret, id, score)
uartDev.close() # 关闭UART设备
del fig # 删除AS608指纹识别设备对象
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) | 2 | 4 | 1 | 2 | 1 | N | N | N | 2 |
内容 | 0xEF01 | xxxx | 01 | N= |
AS608模块回复的响应都遵循如下的格式:
名称 | 包头 | 芯片地址 | 包标识 | 包长度 | 确认码 | 返回参数 | 校验和 |
字节数(单位:bytes) | 2 | 4 | 1 | 2 | 1 | N | 2 |
内容 | 0xEF01 | xxxx | 01 | N= |
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 | 指纹库满 |
实际控制此指纹识别模块进行指纹录入和指纹识别的流程请参考下图。
[1] AS60x指纹识别SoC通讯手册
[2] 购买链接
文章浏览阅读5.2k次,点赞8次,收藏8次。什么是性能调优?性能调优就是对计算机硬件、操作系统和应用有相当深入的了解,调节三者之间的关系,实现整个系统(包括硬件、操作系统、应用)的性能最大化,并能不断的满足现有的业务需求。性能优化的目的流畅(解决:卡顿)稳定(解决:内存溢出、崩溃)低耗损(解决:耗电快、流量大、网络慢)小安装包(解决:APK过大)性能优化原则:先优化瓶颈问题;方案简单,尽量不引入更多复杂性,尽量不降低业务体验;满足系统性能要求即可,不引入新的bug。为什么需要性能调优?为了获得更好的系统性能(就是你现_论软件的性能优化设计
文章浏览阅读1.3w次,点赞2次,收藏26次。例1: 批量 查询部门号为 "10" 号的并把它们打印出来 . DECLARE TYPE emp_table_type IS TABLE OF my_emp%ROWTYPE INDEX BY BINARY_INTEGER; v_emp_table emp_table_type; BEGIN SELECT * BULK COLLECT INTO v_emp__bulk collect into 写表
文章浏览阅读1.4w次,点赞12次,收藏120次。python爬虫资源抓取--urllib/requests/requests-html、正则表达式、数据解析-Beautiful Soup/lxml/selectolax、自动化爬虫--selenium、爬虫框架--Scrapy/pyspider、模拟登录与验证码识别、autoscraper_python爬虫教程
文章浏览阅读686次。点量Html5视频加密是基于js加密或者内嵌C+变异后的代码做安全。该方案对使用者来说非常方便,是因为不用安装任何插件,二期可以在手机电脑中直接观看,打开链接即可。对于开发者来说,不用考虑具体加密原理,直接对接使用,而且还可以和网校或者现有系统在用的会员等做对接。Html5视频加密播放的原理大体是怎样的呢?该方案包含以下过程。首先是使用点量专用加密工具对网站的视频进行加密处理,然后传到服务器上去,..._h5网页视频加密
文章浏览阅读7.9k次,点赞9次,收藏32次。利用基本动画、滑动动画、淡入淡出、自定义动画和事件实现下拉列表框。我只是将所学的知识统统实现了一遍,但是如果加上排列和组合不止这九种。(这么神奇,又在吹牛吧。)附代码如下<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title>_jquery下拉
文章浏览阅读1.5k次。npm$ npm i vue-lazyload -Syarn$ yarn add vue-lazyload在plugins文件夹新建vue-lazyload.js文件import Vue from 'vue'import VueLazyLoad from 'vue-lazyload'const loadimage = require('../static/i.gif')const errorimage = require('../static/i.gif')Vue.use(VueL_nuxt3 图片懒加载
文章浏览阅读674次。对文本进行提取,利用结巴分词进行分词,然后进行word2vec训练(维度设置为100),得到每个词的词向量.对于每一个用户,通过其发表的内容,得到用户所使用的词汇,然后求得用户的平均词向量.(词向量和除以词的数量)通过训练集,分别对用户地区,年龄,性别进行建模2017CSDN用户画像竞赛用户内容主题词生成:给定若干用户文档(博客或帖子),为每一篇文档生成3个最合适的主题词。要求生成的主题..._word2vec文本相关性
文章浏览阅读1.5k次。开发工具:visual studio code(vs code) 一、从官网下载app https://code.visualstudio.com/ 执行安装。 sudo dpkg -i code*.deb 从开始菜单启动程序。 二、设置界面为中文 同时按下ctrl ..._麒麟系统c++编辑器中文版
文章浏览阅读779次。这个问题是因为没有配置JAVA_HOME系统变量1、在环境变量里面新建系统变量一般最新的elk里面带有java在jdk或者也可以使用自己安装的,配置完成重启命令行就行了_启动elasticsearch报错usage 0f java_home
文章浏览阅读5.7k次,点赞20次,收藏80次。解读AXI协议原子化访问的部分,涵盖排他性操作的过程,信号列表,访问要求和为什么从AXI3到AXI4取消了Locked Type等内容。_axi 原子访问
文章浏览阅读1.7k次。CSS实现的一个漂亮分页按钮样式.pagination{overflow:hidden;margin:0;padding:10px 10px 6px 10px;border-top:1px solid #f60;_zoom:1;}.pagination *{display:inline;float:left;margin:0;padding:0;font-size:12px;}.paginatio..._html翻页按钮怎么写
文章浏览阅读1.8k次。菜鸟错误大全(六)我们都是从新手一步一个坑踩过来的,下面我们来讲讲会遇到的常见错误和解决办法: Unknown URL content://com.exaple.databasetest.provider/book:这是写错包名了,应该为“content://com.example.databasetest.provider/book”_unknown url