如今,指纹信息的采集已成为产品安全系统中验证身份的重要手段之一。本文主要介绍如何通过EsDA开发套件,快速实现指纹信息的采集与验证。
简介指纹是人体的一项具有唯一特征性的信息之一,是可以识别身份的可靠标识之一,因此指纹信息的采集和验证成了很多嵌入式产品实现安防功能的基础需求。在嵌入式开发中,我们时不时便要采集指纹信息进行记入、保存、以及验证,从而为产品登入认证、安全检测、身份验证等功能,提供信息依据与支撑。本文主要讲述如何在EsDA技术支持下,使用AWFlow Designer中的指纹节点(zn101)与按键节点(button)以及按键处理节点(button_expand),实现对指纹信息进行采集与检测验证。信号处理过程,如下: 入门基础本章内容,除了讲解如何使用指纹节点以外,还需使用到基础的button节点、button_expand节点、fscript节点、以及log节点。同时,还需具备一定基础的AWFlow Designer开发经验。若刚开始接触,可阅读以下文章,进行基础知识的学习。
EsDAMPC-ZC1入门(一)——软件安装
EsDAMPC-ZC1入门(二)——LED控制
基于EsDAMPC-ZC1快速实现——按键高级应用
硬件前提
1. MPC-ZC1开发套件(其中物联网卡与4G天线,本章未使用)
2. 基础按键模块(使用普通按键模块即可,未必要与本章相同)
3.zn101指纹模块(FPM383C型号)
4.USB转TTL模块(使用普通模块即可,未必要与本章相同)5. 硬件连接如下图所示
本章流图解析
具体功能流图如下:
本流图分别由一个button节点、5个button_expand节点(显示名称分别为:单击、双击、三击、四击、五击)、6个fscript节点(显示名称分别为:录入指纹、检测指纹、删除第一个指纹、清空指纹数据库、获取指纹模板、结果处理)、一个zn101节点、一个log节点组成。其中button_expand节点通过对button节点所产生的信号信息进行处理判断,识别是单击还是多击操作,进而触发对应fscript节点向zn101节点发送对应的命令。zn101节点根据对应指令,执行对应操作,并向log节点输出指令操作结果。
节点解析
1. button节点
此处我们选用引脚P4.6,触发方式为下降沿触发。
2. button_expand节点
本章中,我们使用button_expand节点来处理从button节点中传递而出的信号,从而做到识别单击、双击、三击、四击、五击等操作。各button_expand节点配置如下。2.1 单击
此处配置,我们统一使用continuous mode(trigger)操作模式与动作间隔为1000ms,改变按键次数配置分别为1,即相邻两次按下间隔在1000ms以内时,重新开始计数,超时则停止,当计数值达分别达到1时,触发后续节点。
该节点的具体使用规则以及模式讲解,请参考基于 EsDA MPC-ZC1 快速实现——按键高级应用。2.2双击
此处配置,我们统一使用continuous mode(trigger)操作模式与动作间隔为1000ms,改变按键次数配置分别为2,即相邻两次按下间隔在1000ms以内时,重新开始计数,超时则停止,当计数值达分别达到2时,触发后续节点。
该节点的具体使用规则以及模式讲解,请参考基于EsDA MPC-ZC1 快速实现——按键高级应用。
2.3三击
此处配置,我们统一使用continuous mode(trigger)操作模式与动作间隔为1000ms,改变按键次数配置分别为3,即相邻两次按下间隔在1000ms以内时,重新开始计数,超时则停止,当计数值达分别达到3时,触发后续节点。
该节点的具体使用规则以及模式讲解,请参考基于EsDA MPC-ZC1 快速实现——按键高级应用。
2.4四击
此处配置,我们统一使用continuous mode(trigger)操作模式与动作间隔为1000ms,改变按键次数配置分别为4,即相邻两次按下间隔在1000ms以内时,重新开始计数,超时则停止,当计数值达分别达到4时,触发后续节点。
该节点的具体使用规则以及模式讲解,请参考基于EsDA MPC-ZC1 快速实现——按键高级应用。
2.5五击
此处配置,我们统一使用continuous mode(trigger)操作模式与动作间隔为1000ms,改变按键次数配置分别为5,即相邻两次按下间隔在1000ms以内时,重新开始计数,超时则停止,当计数值达分别达到5时,触发后续节点。
该节点的具体使用规则以及模式讲解,请参考基于EsDA MPC-ZC1 快速实现——按键高级应用。
3. zn101节点
该节点为指纹模块节点,可根据上一个节点所发送的命令,进行相应的数据操作,并向下一个节点返回数据应答。其使用串口通信协议,实际数值用户可根据实际修改,此处我们使用MPC-ZC1板上的串口二。其余波特率、字节数、奇偶检验位、停止位、流控位,均与硬件设备配置参数有关,此处设置为576000、8、N、1、N。Awaken_Gpio为gpio唤醒模式配置引脚,但此参数暂不生效。接收命令与反馈如下。
3.1 录入指纹命令3.1.1 输入3.1.2 输出
cmd为命令参数,值为"add",如果添加成功,节点输出result参数值为"ok",以及存储位置参数stormb_id值为无符号16进制数值,否则输出result参数值为"error"。如果存储数量已达最大可存储数,则输出result参数值为"full"。若发送命令后,无手指按压进行指纹采集,则节点不触发输出。
其中,output、msg等对象为的实际意义可参照fscript节点的帮助信息,如下:
- msg. 访问当前消息对象的属性。
- flow. 访问其它节点的属性。
- output. 访问输出的对象的属性。
- global. 访问全局对象的属性。
- app_conf. 访问配置对象的属性(可持久保存)。
如果设置了output的属性,则将output对象分发给后继节点,否则将msg对象分发给后继节点。
3.2 检测指纹
3.2.1 输入3.2.2 输出同理,命令参数值为"check",如果检测通过,则输出result参数值为"ok",以及模板页面ID位置参数pageid和匹配分数参数score,两参数数值均为无符号16进制数值,否则输出result参数值为"error"。若发送命令后,无手指按压进行指纹采集,则节点不触发输出。
3.3删除对应位置与数量的指纹
3.3.1 输入3.3.2 输出
同理,命令参数为"delete",配置附加参数为页面ID参数pageid与删除数量num,两参数数值均为无符号16进制数值,否则输出result参数值为"error"。
3.4清空指纹数据库
3.4.1 输入3.4.2 输出同理, 命令参数为"delete_all",若删除成功,则输出result参数值为"ok",否则输出result参数值为"error"。
3.5获取有效模板数
3.5.1 输入3.5.2 输出
同理,命令参数为"get_num",若获取成功,则输出result参数值为"ok",模板数量参数值num为无符号16进制数值,否则输出result参数值为"error"。
4. fscript节点
该节点主要用于对zn101(指纹模块)节点进行命令下发与结果处理。若对fscript脚本语法不了解,可参考FScript脚本引擎语法规则。下图为向zn101节点发送录入指纹命令的代码段语句,以及所填配置,即显示名称为录入指纹(1)的fscript节点的配置信息。
录入指纹:
同理,亦可配置其余fscript节点,分别向zn101节点输入不同的指令。具体命令代码段汇总如下:
//显示名称为 录入指纹(1) 的fscript节点代码段output.cmd = "add";
//显示名称为 检测指纹(2) 的fscript节点代码段output.cmd = "check";
//显示名称为 删除第一个指纹(3) 的fscript节点代码段output.cmd = "delete";output.pageid = 0;output.num = 1;
//显示名称为 清空指纹数据库(4) 的fscript节点代码段output.cmd = "delete_all";
//显示名称为 获取指纹模板数量(5) 的fscript节点代码段output.cmd = "get_num";
其中,output、msg等对象为的实际意义可参照fscript节点的帮助信息,如下:
- msg. 访问当前消息对象的属性。
- flow. 访问其它节点的属性。
- output. 访问输出的对象的属性。
- global. 访问全局对象的属性。
- app_conf. 访问配置对象的属性(可持久保存)。
如果设置了output的属性,则将output对象分发给后继节点,否则将msg对象分发给后继节点。
5. 结果处理(fscript节点)
该脚本文件主要实现,对zn101节点所输出的结果数据进行处理,同时向log节点发送对应的打印变量,同时串口输出对应于不同命令的参数值。具体实现如下。
if(msg.cmd == "add"){ if(msg.result == "ok"){ print(msg.stormb_id); output.payload = "get_ok"; } else if(msg.result == "error"){ output.payload = "get_error"; } else if(msg.result == "full"){ output.payload = "get_full"; }}else if(msg.cmd == "check"){ if(msg.result == "ok"){ print(msg.pageid); print(msg.score); output.payload = check_ok; }else if(msg.result == "error"){ output.payload = "check_error"; }}else if(msg.cmd == "delete"){ if(msg.result == "ok"){ output.payload = "clean_one_ok"; }else if(msg.result == "error"){ output.payload = "clean_one_error"; }}else if(msg.cmd == "delete_all"){ if(msg.result == "ok"){ output.payload = "clean_all_ok"; }else if(msg.result == "error"){ output.payload = "clean_all_error"; }}else if(msg.cmd == "get_num"){ if(msg.result == "ok"){ print(msg.num); output.payload = "get_num_ok"; }else if(msg.result == "error"){ output.payload = "get_num_error"; }}
6. log节点该节点主要用于将上一个节点所传递数据展示于调试窗口或打印于串口。
效果展示
注意:Debug串口窗口配置为波特率921600、数据为8、停止位1、无校验与流控位。具体COM口根据实际情况而定,若用户不知道串口是多少,可打开设备管理器,重新插拔电源,查看COM口新增情况来确定。
1. 按一下按钮,并将手指按在指纹模块上,录取指纹成功,串口窗口显示如下:
2. 连续按两下按钮,同一手指按在指纹模块上,验证通过,串口窗口显示如下:
3. 连续按三下按钮,删除第一个指纹成功,串口窗口显示如下:
4. 再次重复操作二,此时验证未通过,串口窗口显示如下:5. 连续多次重复操作一和操作二,录入与验证指纹均通过,串口窗口显示同上。6. 连续按下五次按钮,获取指纹模板数成功,串口窗口显示数据如下:
7. 连续按四下按钮,清空指纹空成功,串口窗口显示如下:8. 再次重复操作二,此时验证未通过,串口窗口显示与操作二相同。
-
检测
+关注
关注
5文章
4412浏览量
91300 -
ESDA
+关注
关注
0文章
28浏览量
7496
发布评论请先 登录
相关推荐
评论