指紋認証 / Fingerprint module (MCU)

(2016.2.29 Created)

(2017.5.26 Update)

 このページではマイコンを用いて指紋センサを使用するクラスライブラリを紹介しています。

In this page, the class library for the fingerprint module from microcomputer is introduced.

 このクラスはUART基底クラス(DKS::UART::IUART)を使用しています。ArduinoとSTM32の一部は派生クラスを作成していますが、必要に応じて派生クラスを作成してください。こちらからダウンロードできます。

The class useses UART base class(DKS::UART::IUART). The derived classes for Arduino and a part of STM32 are provided here, but others are not. Please create if needed.

 このクラスは仕様書にある全コマンドを実装しています。ここですべてを説明するのは困難なので、ソースコードを参照してください。仕様書と同じ関数名になっているので容易に理解していただけると期待しています。

The class implements all functions which are listed in the datasheet. Please see the source code for the details. The name of functions are set as same as the names in the data sheet.

Sample code

 下に示すサンプルコードはSTM32F3Discovery基板用です。STM32 Nucleo F401 や Arduinoでもほぼ同じコードを使用することができます。

The sample code shown below is for STM32F3Dicovery. However almost same code can be used for Nucleo F401RE or Arduino.

 サンプルコードの内容ですが、電源投入直後に指紋をスキャンし、登録されていればLED3が点灯、他の場合は状況に応じたLEDが点灯します。

The sample works as follows. Scan immediately after the power on. And if the fingerprint found in the library, LED3 will turn on, if others, other LED are on.

#include "DKS_Common_F303xC.h"
#include "DKS_UART_F303xC.h"
#include "DKS_DiscoF3.h"
#include "DKS_FPM.h"
#include "string.h"

DKS::UART::UART *uart;

void GotoError(DKS::IDigitalOut *led)
{
    led->write(1);
    while (true);
}

int main(void)
{
    DKS::InitSystem();

    //Tx=PC4 (white), Rx=PC5 (Green)
    uart = new DKS::UART::UART(USART1, 1, 1);
    DKS::FingerPrint::ZFM zfm(uart, 57600);
    DKS::DiscoF3 disco;
    disco.Init_LED();

    uint8_t pwd[] = { 0, 0, 0, 0 };
    DKS::FingerPrint::ZFM_Result res;
    if (zfm.VfyPwd(pwd) != DKS::FingerPrint::ZFM_OK)
        GotoError(disco.led10);

    uint16_t SystemStatus, FingerLibrarySize;
    uint8_t SecurityLevel, PackageSize, BaudRate;
    uint8_t address[4];
    res = zfm.ReadSysPara(SystemStatus,
                          FingerLibrarySize,
                          SecurityLevel, address,
                          PackageSize, BaudRate);
    //Set packet size less than UART buffer size.
    if (PackageSize > 1)
        res = zfm.SetSysPara(
                  DKS::FingerPrint::ZFM_DataPackageLength,
                  1);
    if (res != DKS::FingerPrint::ZFM_OK)
        GotoError(disco.led10);

    //capture
    res = zfm.GenImg();
    if (res == DKS::FingerPrint::ZFM_No_Finger)
        GotoError(disco.led9);
    else if (res != DKS::FingerPrint::ZFM_OK) 
        GotoError(disco.led10);

    // create character data.
    res = zfm.Img2Tz(0x01);
    if (res != DKS::FingerPrint::ZFM_OK)
        GotoError(disco.led8);

    // search from template library
    uint16_t pageID, score;
    res = zfm.Search(0x01, 0x00, 999, pageID, score);
    if (res == DKS::FingerPrint::ZFM_OK)
        disco.led3->write(1);
    else if (res == DKS::FingerPrint::ZFM_Not_Found)
        GotoError(disco.led6);
    else GotoError(disco.led5);

    while (true);
}

extern "C" void USART1_IRQHandler(void)
{
    uart->InterruptHandler();
}

Download

Class library 

(C#, C++, Arduino example)

DKSlib_FPM.zip

Base class. (UART base class included)

DKSlib_Base.zip

UART imprementation class

詳細はこちらを見てください。

Please see here in detail.

DKSlib_STM32HAL.zip

DKSlib_F303xC.zip

DKSlib_F401xE.zip

DKSlib_Arduino.zip