如今,指紋信息的采集已成為產(chǎn)品安全系統(tǒng)中驗(yàn)證身份的重要手段之一。本文主要介紹如何通過EsDA開發(fā)套件,快速實(shí)現(xiàn)指紋信息的采集與驗(yàn)證。 ?
簡介指紋是人體的一項(xiàng)具有唯一特征性的信息之一,是可以識(shí)別身份的可靠標(biāo)識(shí)之一,因此指紋信息的采集和驗(yàn)證成了很多嵌入式產(chǎn)品實(shí)現(xiàn)安防功能的基礎(chǔ)需求。在嵌入式開發(fā)中,我們時(shí)不時(shí)便要采集指紋信息進(jìn)行記入、保存、以及驗(yàn)證,從而為產(chǎn)品登入認(rèn)證、安全檢測、身份驗(yàn)證等功能,提供信息依據(jù)與支撐。本文主要講述如何在EsDA技術(shù)支持下,使用AWFlow Designer中的指紋節(jié)點(diǎn)(zn101)與按鍵節(jié)點(diǎn)(button)以及按鍵處理節(jié)點(diǎn)(button_expand),實(shí)現(xiàn)對(duì)指紋信息進(jìn)行采集與檢測驗(yàn)證。信號(hào)處理過程,如下: ?入門基礎(chǔ)本章內(nèi)容,除了講解如何使用指紋節(jié)點(diǎn)以外,還需使用到基礎(chǔ)的button節(jié)點(diǎn)、button_expand節(jié)點(diǎn)、fscript節(jié)點(diǎn)、以及l(fā)og節(jié)點(diǎn)。同時(shí),還需具備一定基礎(chǔ)的AWFlow Designer開發(fā)經(jīng)驗(yàn)。若剛開始接觸,可閱讀以下文章,進(jìn)行基礎(chǔ)知識(shí)的學(xué)習(xí)。
EsDAMPC-ZC1入門(一)——軟件安裝
EsDAMPC-ZC1入門(二)——LED控制
基于EsDAMPC-ZC1快速實(shí)現(xiàn)——按鍵高級(jí)應(yīng)用
?硬件前提
1. MPC-ZC1開發(fā)套件(其中物聯(lián)網(wǎng)卡與4G天線,本章未使用)
2. 基礎(chǔ)按鍵模塊(使用普通按鍵模塊即可,未必要與本章相同)
3.zn101指紋模塊(FPM383C型號(hào))
4.USB轉(zhuǎn)TTL模塊(使用普通模塊即可,未必要與本章相同)5.?硬件連接如下圖所示
?本章流圖解析
具體功能流圖如下:
本流圖分別由一個(gè)button節(jié)點(diǎn)、5個(gè)button_expand節(jié)點(diǎn)(顯示名稱分別為:單擊、雙擊、三擊、四擊、五擊)、6個(gè)fscript節(jié)點(diǎn)(顯示名稱分別為:錄入指紋、檢測指紋、刪除第一個(gè)指紋、清空指紋數(shù)據(jù)庫、獲取指紋模板、結(jié)果處理)、一個(gè)zn101節(jié)點(diǎn)、一個(gè)log節(jié)點(diǎn)組成。其中button_expand節(jié)點(diǎn)通過對(duì)button節(jié)點(diǎn)所產(chǎn)生的信號(hào)信息進(jìn)行處理判斷,識(shí)別是單擊還是多擊操作,進(jìn)而觸發(fā)對(duì)應(yīng)fscript節(jié)點(diǎn)向zn101節(jié)點(diǎn)發(fā)送對(duì)應(yīng)的命令。zn101節(jié)點(diǎn)根據(jù)對(duì)應(yīng)指令,執(zhí)行對(duì)應(yīng)操作,并向log節(jié)點(diǎn)輸出指令操作結(jié)果。
?節(jié)點(diǎn)解析
1. button節(jié)點(diǎn)
此處我們選用引腳P4.6,觸發(fā)方式為下降沿觸發(fā)。
2. button_expand節(jié)點(diǎn)
本章中,我們使用button_expand節(jié)點(diǎn)來處理從button節(jié)點(diǎn)中傳遞而出的信號(hào),從而做到識(shí)別單擊、雙擊、三擊、四擊、五擊等操作。各button_expand節(jié)點(diǎn)配置如下。2.1 單擊
此處配置,我們統(tǒng)一使用continuous mode(trigger)操作模式與動(dòng)作間隔為1000ms,改變按鍵次數(shù)配置分別為1,即相鄰兩次按下間隔在1000ms以內(nèi)時(shí),重新開始計(jì)數(shù),超時(shí)則停止,當(dāng)計(jì)數(shù)值達(dá)分別達(dá)到1時(shí),觸發(fā)后續(xù)節(jié)點(diǎn)。
該節(jié)點(diǎn)的具體使用規(guī)則以及模式講解,請(qǐng)參考基于 EsDA MPC-ZC1 快速實(shí)現(xiàn)——按鍵高級(jí)應(yīng)用。2.2雙擊
此處配置,我們統(tǒng)一使用continuous mode(trigger)操作模式與動(dòng)作間隔為1000ms,改變按鍵次數(shù)配置分別為2,即相鄰兩次按下間隔在1000ms以內(nèi)時(shí),重新開始計(jì)數(shù),超時(shí)則停止,當(dāng)計(jì)數(shù)值達(dá)分別達(dá)到2時(shí),觸發(fā)后續(xù)節(jié)點(diǎn)。
該節(jié)點(diǎn)的具體使用規(guī)則以及模式講解,請(qǐng)參考基于EsDA MPC-ZC1 快速實(shí)現(xiàn)——按鍵高級(jí)應(yīng)用。
2.3三擊
此處配置,我們統(tǒng)一使用continuous mode(trigger)操作模式與動(dòng)作間隔為1000ms,改變按鍵次數(shù)配置分別為3,即相鄰兩次按下間隔在1000ms以內(nèi)時(shí),重新開始計(jì)數(shù),超時(shí)則停止,當(dāng)計(jì)數(shù)值達(dá)分別達(dá)到3時(shí),觸發(fā)后續(xù)節(jié)點(diǎn)。
該節(jié)點(diǎn)的具體使用規(guī)則以及模式講解,請(qǐng)參考基于EsDA MPC-ZC1 快速實(shí)現(xiàn)——按鍵高級(jí)應(yīng)用。
2.4四擊
此處配置,我們統(tǒng)一使用continuous mode(trigger)操作模式與動(dòng)作間隔為1000ms,改變按鍵次數(shù)配置分別為4,即相鄰兩次按下間隔在1000ms以內(nèi)時(shí),重新開始計(jì)數(shù),超時(shí)則停止,當(dāng)計(jì)數(shù)值達(dá)分別達(dá)到4時(shí),觸發(fā)后續(xù)節(jié)點(diǎn)。
該節(jié)點(diǎn)的具體使用規(guī)則以及模式講解,請(qǐng)參考基于EsDA MPC-ZC1 快速實(shí)現(xiàn)——按鍵高級(jí)應(yīng)用。
2.5五擊
此處配置,我們統(tǒng)一使用continuous mode(trigger)操作模式與動(dòng)作間隔為1000ms,改變按鍵次數(shù)配置分別為5,即相鄰兩次按下間隔在1000ms以內(nèi)時(shí),重新開始計(jì)數(shù),超時(shí)則停止,當(dāng)計(jì)數(shù)值達(dá)分別達(dá)到5時(shí),觸發(fā)后續(xù)節(jié)點(diǎn)。
該節(jié)點(diǎn)的具體使用規(guī)則以及模式講解,請(qǐng)參考基于EsDA MPC-ZC1 快速實(shí)現(xiàn)——按鍵高級(jí)應(yīng)用。
3. zn101節(jié)點(diǎn)
該節(jié)點(diǎn)為指紋模塊節(jié)點(diǎn),可根據(jù)上一個(gè)節(jié)點(diǎn)所發(fā)送的命令,進(jìn)行相應(yīng)的數(shù)據(jù)操作,并向下一個(gè)節(jié)點(diǎn)返回?cái)?shù)據(jù)應(yīng)答。其使用串口通信協(xié)議,實(shí)際數(shù)值用戶可根據(jù)實(shí)際修改,此處我們使用MPC-ZC1板上的串口二。其余波特率、字節(jié)數(shù)、奇偶檢驗(yàn)位、停止位、流控位,均與硬件設(shè)備配置參數(shù)有關(guān),此處設(shè)置為576000、8、N、1、N。Awaken_Gpio為gpio喚醒模式配置引腳,但此參數(shù)暫不生效。接收命令與反饋如下。
3.1 錄入指紋命令3.1.1 輸入3.1.2?輸出
cmd為命令參數(shù),值為"add",如果添加成功,節(jié)點(diǎn)輸出result參數(shù)值為"ok",以及存儲(chǔ)位置參數(shù)stormb_id值為無符號(hào)16進(jìn)制數(shù)值,否則輸出result參數(shù)值為"error"。如果存儲(chǔ)數(shù)量已達(dá)最大可存儲(chǔ)數(shù),則輸出result參數(shù)值為"full"。若發(fā)送命令后,無手指按壓進(jìn)行指紋采集,則節(jié)點(diǎn)不觸發(fā)輸出。
其中,output、msg等對(duì)象為的實(shí)際意義可參照fscript節(jié)點(diǎn)的幫助信息,如下:
- msg. 訪問當(dāng)前消息對(duì)象的屬性。
- flow. 訪問其它節(jié)點(diǎn)的屬性。
- output. 訪問輸出的對(duì)象的屬性。
- global. 訪問全局對(duì)象的屬性。
- app_conf. 訪問配置對(duì)象的屬性(可持久保存)。
如果設(shè)置了output的屬性,則將output對(duì)象分發(fā)給后繼節(jié)點(diǎn),否則將msg對(duì)象分發(fā)給后繼節(jié)點(diǎn)。
3.2 檢測指紋
3.2.1 輸入3.2.2 輸出同理,命令參數(shù)值為"check",如果檢測通過,則輸出result參數(shù)值為"ok",以及模板頁面ID位置參數(shù)pageid和匹配分?jǐn)?shù)參數(shù)score,兩參數(shù)數(shù)值均為無符號(hào)16進(jìn)制數(shù)值,否則輸出result參數(shù)值為"error"。若發(fā)送命令后,無手指按壓進(jìn)行指紋采集,則節(jié)點(diǎn)不觸發(fā)輸出。
3.3刪除對(duì)應(yīng)位置與數(shù)量的指紋
3.3.1 輸入3.3.2 輸出
同理,命令參數(shù)為"delete",配置附加參數(shù)為頁面ID參數(shù)pageid與刪除數(shù)量num,兩參數(shù)數(shù)值均為無符號(hào)16進(jìn)制數(shù)值,否則輸出result參數(shù)值為"error"。
3.4清空指紋數(shù)據(jù)庫
3.4.1 輸入3.4.2 輸出同理,?命令參數(shù)為"delete_all",若刪除成功,則輸出result參數(shù)值為"ok",否則輸出result參數(shù)值為"error"。
3.5獲取有效模板數(shù)
3.5.1 輸入3.5.2 輸出
同理,命令參數(shù)為"get_num",若獲取成功,則輸出result參數(shù)值為"ok",模板數(shù)量參數(shù)值num為無符號(hào)16進(jìn)制數(shù)值,否則輸出result參數(shù)值為"error"。
4. fscript節(jié)點(diǎn)
該節(jié)點(diǎn)主要用于對(duì)zn101(指紋模塊)節(jié)點(diǎn)進(jìn)行命令下發(fā)與結(jié)果處理。若對(duì)fscript腳本語法不了解,可參考FScript腳本引擎語法規(guī)則。下圖為向zn101節(jié)點(diǎn)發(fā)送錄入指紋命令的代碼段語句,以及所填配置,即顯示名稱為錄入指紋(1)的fscript節(jié)點(diǎn)的配置信息。
錄入指紋:
同理,亦可配置其余fscript節(jié)點(diǎn),分別向zn101節(jié)點(diǎn)輸入不同的指令。具體命令代碼段匯總?cè)缦拢?/p>
//顯示名稱為 錄入指紋(1) 的fscript節(jié)點(diǎn)代碼段output.cmd = "add";
//顯示名稱為 檢測指紋(2) 的fscript節(jié)點(diǎn)代碼段output.cmd = "check";
//顯示名稱為 刪除第一個(gè)指紋(3) 的fscript節(jié)點(diǎn)代碼段output.cmd = "delete";output.pageid = 0;output.num = 1;
//顯示名稱為 清空指紋數(shù)據(jù)庫(4) 的fscript節(jié)點(diǎn)代碼段output.cmd = "delete_all";
//顯示名稱為 獲取指紋模板數(shù)量(5) 的fscript節(jié)點(diǎn)代碼段output.cmd = "get_num";
其中,output、msg等對(duì)象為的實(shí)際意義可參照fscript節(jié)點(diǎn)的幫助信息,如下:
- msg. 訪問當(dāng)前消息對(duì)象的屬性。
- flow. 訪問其它節(jié)點(diǎn)的屬性。
- output. 訪問輸出的對(duì)象的屬性。
- global. 訪問全局對(duì)象的屬性。
- app_conf. 訪問配置對(duì)象的屬性(可持久保存)。
如果設(shè)置了output的屬性,則將output對(duì)象分發(fā)給后繼節(jié)點(diǎn),否則將msg對(duì)象分發(fā)給后繼節(jié)點(diǎn)。
5. 結(jié)果處理(fscript節(jié)點(diǎn))
該腳本文件主要實(shí)現(xiàn),對(duì)zn101節(jié)點(diǎn)所輸出的結(jié)果數(shù)據(jù)進(jìn)行處理,同時(shí)向log節(jié)點(diǎn)發(fā)送對(duì)應(yīng)的打印變量,同時(shí)串口輸出對(duì)應(yīng)于不同命令的參數(shù)值。具體實(shí)現(xiàn)如下。
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節(jié)點(diǎn)該節(jié)點(diǎn)主要用于將上一個(gè)節(jié)點(diǎn)所傳遞數(shù)據(jù)展示于調(diào)試窗口或打印于串口。
?效果展示
注意:Debug串口窗口配置為波特率921600、數(shù)據(jù)為8、停止位1、無校驗(yàn)與流控位。具體COM口根據(jù)實(shí)際情況而定,若用戶不知道串口是多少,可打開設(shè)備管理器,重新插拔電源,查看COM口新增情況來確定。
1. 按一下按鈕,并將手指按在指紋模塊上,錄取指紋成功,串口窗口顯示如下:
2. 連續(xù)按兩下按鈕,同一手指按在指紋模塊上,驗(yàn)證通過,串口窗口顯示如下:
3. 連續(xù)按三下按鈕,刪除第一個(gè)指紋成功,串口窗口顯示如下:
4. 再次重復(fù)操作二,此時(shí)驗(yàn)證未通過,串口窗口顯示如下:5. 連續(xù)多次重復(fù)操作一和操作二,錄入與驗(yàn)證指紋均通過,串口窗口顯示同上。6. 連續(xù)按下五次按鈕,獲取指紋模板數(shù)成功,串口窗口顯示數(shù)據(jù)如下:
7. 連續(xù)按四下按鈕,清空指紋空成功,串口窗口顯示如下:8. 再次重復(fù)操作二,此時(shí)驗(yàn)證未通過,串口窗口顯示與操作二相同。
-
檢測
+關(guān)注
關(guān)注
5文章
4413瀏覽量
91305 -
ESDA
+關(guān)注
關(guān)注
0文章
28瀏覽量
7496
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論