Git Product home page Git Product logo

as608's Introduction

在树莓派上使用AS608模块,本项目实现了所有官方用户开发手册中列出的功能,函数声明在 as608.h中。用户可直接调用相应的函数与AS608模块进行通信。

另外,项目中有一个命令行程序,可以在终端下通过命令与模块进行交互。

一、AS608

1. 简介

数据均存储在模块内,指纹容量300枚(0-299)。

芯片内设有一个 72K 字节的图像缓冲区与二个 512 bytes(256 字)大小的特征文件 缓冲区,名字分别称为:ImageBufferCharBuffer1CharBuffer2。用户可以通过指 令读写任意一个缓冲区。CharBuffer1CharBuffer2 既可以用于存放普通特征文件也 可以用于存放模板特征文件。

2. 工作流程

录入指纹流程:

record

搜索指纹流程:

search

AS608模块内部内置了手指探测电路,用户可读取状态引脚(WAK)判断有无手指按下。在本项目组,as608.h中的全局变量g_detect_pin就是指该引脚与树莓派的哪个GPIO端口相连的。(注意:引脚编码方式是wiringPi编码)。读取该引脚的输入信号,高电平意味着模块上有手指存在,否则不存在,等待几秒后,如果一直检测不到手指,就报错。

3. 芯片地址和密码

默认地址是0xffffffff,默认密码是0x00000000,如果不自己设置其他密码,就不需要向模块验证密码,否则,与模块通信的第一条指令必须是验证密码PS_VfyPwd()

二、项目-函数库

把本项目根目录下的as608.has608.c拷贝到你的程序目录下即可。

1. 模块参数变量

// typedef unsigned int uint;

typedef struct AS608_Module_Info {
  uint status;      // 状态寄存器 0
  uint model;       // 传感器类型 0-15
  uint capacity;    // 指纹容量,300
  uint secure_level;    // 安全等级 1/2/3/4/5,默认为3
  uint packet_size;     // 数据包大小 32/64/128/256 bytes,默认为128
  uint baud_rate;       // 波特率系数 
  uint chip_addr;       // 设备(芯片)地址                  
  uint password;        // 通信密码
  char product_sn[12];        // 产品型号
  char software_version[12];  // 软件版本号
  char manufacture[12];       // 厂家名称
  char sensor_name[12];       // 传感器名称

  uint detect_pin;      // AS608的WAK引脚连接的树莓派GPIO引脚号
  uint has_password;    // 是否有密码
} AS608;

extern AS608 g_as608;

2. 全局变量

使用树莓派的硬件进行串口通信,需要额外配置一下(关闭板载蓝牙功能等),参考 CSDN-树莓派利用串口进行通信

  • int g_fd:打开串口的文件描述符。
g_fd = serialOpen("/dev/ttyAMA0", 9600);  // 9600是波特率
  • int g_verbose:函数工作过程中输出到屏幕上信息量。为0则显示的很少,主要是传输数据包时会显示进度条。为1则显示详细信息,如发送的指令包内容和接收的指令包内容等。为其他数值则不显示任何信息。

  • int g_error_code:模块返回的错误码 以及 自定义的错误代码。

  • char g_error_desc[128]:错误代码 的含义。可通过char* PS_GetErrorDesc()函数获得。

3. 函数

as608.c中每个函数前都有详细注释。

4. 如何使用

把本项目根目录下的as608.has608.c拷贝到你的程序目录下并包含头文件。

还需要包含 <wiringPi.h><wiringSerial.h>

最基础的使用如下:

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include "as608.h"			// 包含头文件

// 声明全局变量【定义在as608.c】
extern AS608 g_as608;
extern int g_fd;
extern int g_verbose;
extern char  g_error_desc[];
extern uchar g_error_code;

int main() {
    // 给全局变量赋值
    g_as608.detect_pin = 1; 
    g_as608.has_password = 0;  // 没有密码
    g_verbose = 0;       // 显示少量输出信息
    
    // 初始化wiringPi库
    if (-1 == wiringPiSetup())
        return 1;
    
    // 设置g_detect_pin引脚为输入模式
    pinMode(g_as608.detect_pin, INPUT);
    
    // 打开串口
    if ((g_fd = serialOpen("/dev/ttyAMA0", 9600)) < 0)
        return 2;
    
    // 初始化AS608模块
    if (PS_Setup(0xfffffff, 0x00000000) == 0)
        return 3;
    
    /****************************************/
    
    // do something
    
    /****************************************/
    
    // 关闭串口
    serialClose(g_fd);
    
    return 0;
}

检测手指

AS608使用的是电阻屏,可以通过检测WAK引脚的电平高低来判断模块上是否有手指。

// as608.h 中有一个封装函数
// 检测到手指,返回true,否则返回false
// 前提是配置了 g_as608.detect_pin,  即AS608的WAK引脚
bool PS_DetectFinger();

exanmple/main.c中有两个函数

// 阻塞至检测到手指,最长阻塞wait_time毫秒
bool waitUntilDetectFinger(int wait_time) {
	while (true) {
		if (PS_DetectFinger())
			return true;
		else {
			delay(100);
			wait_time -= 100;
			if (wait_time < 0)
				return false;
		}
	}
}

// 阻塞至检测不到手指,最长阻塞wait_time毫秒
bool waitUntilDetectFinger(int wait_time) {
	while (true) {
		if (PS_DetectFinger())
			return true;
		else {
			delay(100);
			wait_time -= 100;
			if (wait_time < 0)
				return false;
		}
	}
}

录入指纹

bool newFingerprint(int pageID) {
	printf("Please put your finger on the module.\n");
	if (waitUntilDetectFinger(5000)) {
		delay(500);
		PS_GetImage();
		PS_GenChar(1);
	}
	else {
		printf("Error: Didn't detect finger!\n");
		exit(1);
	}

	// 判断用户是否抬起了手指,
	printf("Ok.\nPlease raise your finger!\n");
	if (waitUntilNotDetectFinger(5000)) {
		delay(100);
		printf("Ok.\nPlease put your finger again!\n");
		// 第二次录入指纹
		if (waitUntilDetectFinger(5000)) {
			delay(500);
			PS_GetImage();
			PS_GenChar(2);
		}
		else {
			printf("Error: Didn't detect finger!\n");
			exit(1);
		}
	}
	else {
		printf("Error! Didn't raise your finger\n");
		exit(1);
	}

	int score = 0;
	if (PS_Match(&score)) {
		printf("Matched! score=%d\n", score);
	}
	else {
		printf("Not matched, raise your finger and put it on again.\n");
		exit(1);
	}

	// 合并特征文件
	PS_RegModel();
	PS_StoreChar(2, pageID);

	printf("OK! New fingerprint saved to pageID=%d\n", pageID);
}

三、命令行程序

1. 编译运行

cd example
make
./fp  # 第一次使用,让程序初始化
alias fp=./fp # 以后可以使用fp,而不用加前缀"./"

2. 修改配置文件

方法一:编辑 ~/.fpconfig :执行vim ~/.fpconfig

address=0xffffffff
password=none
baudrate=9600
detect_pin=1
serial=/dev/ttyAMA0

方法二:使用命令

  • fp cfgaddr [address] :修改address
  • fp cfgpwd [password] :修改password
  • fp cfgserial [serialFile]:修改串口通信端口
  • fp cfgbaud [baudrate]:修改通信波特率
  • fp cfgpin [GPIO_pin]:修改检测手指是否存在 对于的GPIO引脚

3. 如何使用

fp -h :显示使用帮助

A command line program to interact with AS608 module.

Usage:
  ./fp [command] [param] [option]

Available Commands:
-------------------------------------------------------------------------
  command  | param     | description
-------------------------------------------------------------------------
  cfgaddr   [addr]     Config address in local config file
  cfgpwd    [pwd]      Config password in local config file
  cfgserial [serialFile] Config serial port in local config file. Default:/dev/ttyAMA0
  cfgbaud   [rate]     Config baud rate in local config file
  cfgpin    [GPIO_pin] Config GPIO pin to detect finger in local confilg file

  add       [pID]      Add a new fingerprint to database. (Read twice) 
  enroll    []         Add a new fingerprint to database. (Read only once)
  delete    [pID {count}]  Delete one or contiguous fingerprints.
  empty     []         Empty the database.
  search    []         Collect fingerprint and search in database.
  identify  []         Search
  count     []         Get the count of registered fingerprints.
  list      []         Show the registered fingerprints list.
  info      []         Show the basic parameters of the module.
  random    []         Generate a random number.(0~2^32)

  getimage  []         Collect a fingerprint and store to ImageBuffer.
  upimage   [filename] Download finger image to ras-pi in ImageBuffer of the module
  downimage [filename] Upload finger image to module
  genchar   [cID]      Generate fingerprint feature from ImageBuffer.
  match     []         Accurate comparison of CharBuffer1 and CharBuffer2
                         feature files.
  regmodel  []         Merge the characteristic file in CharBuffer1 and
                         CharBuffer2 and then generate the template, the
                         results are stored in CharBuffer1 and CharBuffer2.
  storechar [cID pID]  Save the template file in CharBuffer1 or CharBuffer2
                         to the flash database location with the PageID number
  loadchar  [cID pID]  Reads the fingerprint template with the ID specified
                         in the flash database into the template buffer,
                         CharBuffer1 or CharBuffer2
  readinf   [filename] Read the FLASH Info Page (512bytes), and save to file
  writenote     [page {note}]   Write note loacted in pageID=page
  readnote      [page]          Read note loacted in pageID=page
  upchar        [cID filename]  Download feature file in CharBufferID to ras-pi
  downchar      [cID filename]  Upload feature file in loacl disk to module
  setpwd        [pwd]           Set password
  vfypwd        [pwd]           Verify password
  packetsize    [{size}]        Show or Set data packet size
  baudrate      [{rate}]        Show or Set baud rate
  level         [{level}]       Show or Set secure level(1~5)
  address       [{addr}]        Show or Set secure level(1~5)

Avaiable options:
  -h    Show help
  -v    Shwo details while excute the order

Usage:
  ./fp [command] [param] [option]

注意事项

  • 选项 -v-h 必须写到最后面,否则可能出错
  • []中为命令对应的参数,{}中的表示可选。

4. 示例

# 录指纹(采集两次),保存到指纹库的第7号位置
fp add 7
# 录指纹(采集一次),返回保存的位置id号
fp enroll

# 删除指纹库中第5号指纹
fp delete 5
# 删除指纹库中第0号至第19号(共20个)
fp delete 0 20

# 采集并比对指纹,以下3条均可
fp search
fp hsearch  # high speed search
fp identity

# 列出指纹库中的指纹ID
fp list

# 显示当前的芯片地址
fp address
# 设置芯片地址为0xefefefef
fp address 0xefefefef  # 前缀0x可省略

# 设置密码为0xcc0825cc
fp setpwd 0xcc0825cc

【以下图片以实际执行输出为准,可能有差别之处】

usage-1

usage-2

END

[email protected]

as608's People

Contributors

leopard-c avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

as608's Issues

[Solved] I cant connect AS608 module

I correctly connect my GPIO pin to AS608, but i saw only ERROR! code=C7, desc=Setup failed! Please retry again later

At my arduino, AS608 perpectly works.

I saw test code in Arduino library, theres some different compare with example code.

This Repository's Example config file uses baud rate 9600, Arduino Example uses baudrate 57600.
At Arduino Example's README describe baudrate Sensor's UART baud rate (usually 57600, 9600 or 115200).

I recommend use baudrate 57600.

PLUS - Not Recommend, but usefull
If an permission error occurred when open serial device driver, use sudo chmod 666 <uart device driver>.
when sudo ./fp <command>, .fpconfig file will create at /root/.fpconfig

将AS608与树莓派通过引脚连接起来后,两者通信失败

将AS608引脚TX、RX分别接在树莓派RX、TX引脚上,将AS608引脚VCC接在树莓派3.3V引脚上,以及将AS608引脚GND接在树莓派GND上之后,采用通讯协议,两者通信失败:

address=ffffffff
password=00000000
serial_file=/dev/ttyAMA0
baudrate=115200
detect_pin=1
-------------------------Initializing-------------------------
sent: EF 01 FF FF FF FF 01 00 07 13 00 00 00 00 00 1B
recv: FF FF FF FF FF FF FF FF FF FF FF FF
ERROR! code=FF, desc=Fingerprint is full

请问如何解决这个问题呢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.