指纹模块(MG200)

2023-10-17 07:10
文章标签 模块 指纹 mg200

本文主要是介绍指纹模块(MG200),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.1MG200指纹模块介绍

1.2MG200的具体介绍

1.3MG200的内部工作过程

1.4 MG200发送指令

发送指令目录:

应答指令目录:

1.5指纹模块具体功能实现:

1.捕捉指纹特征量过程

2.注册指纹过程

3.比对手指过程


1.1MG200指纹模块介绍

MG200是一种高性能的指纹模块,具有可靠、安全、易集成等特点。它采用高精度光学指纹模组,并集成了先进的指纹识别算法,可以快速、准确地识别指纹信息。同时,它支持RS232/485、USB、Wiegand等多种通讯方式,可以广泛应用于门禁、考勤、安防等领域。此外,MG200指纹模块还具有防伪功能,支持对指纹图像的加密和解密,有效防止指纹被破解和盗用。

1.2MG200的具体介绍

MG200指纹模块(指纹模块传感器)
*指纹分为光学式和电容式,MG200为电容式指纹(内置算法,管理模式,数据库,串口)
*管理程序的通信接口由若干指令组合而成,模块的每个功能由主控单元MCU(或上位机) 发送独立的指令来执行
*执行状态通过串口反馈给主控单元MCU进行逻辑交互。通过合理的组合使用接口指令,如何实现功能逻辑则完全由主控单元MCU(或上位机)决定
*MCU负责发送指令(实现功能)和接收反馈(工作状态、结果)
*MCU通过USART6与MG200通信
*USART6_TX --- PC6 --- 复用模式---MG200_RX
*USART6_RX --- PC7 --- 复用模式---MG200_TX
*MCU与指纹模块的通信通过发送命令数据包然后接收MG200返回应答数据包的形式 
*指纹模块的 UART 串口不能同时进行收发动作 (Half-Duplex 通信)

1.3MG200的内部工作过程

MCU 主控单元向指纹识别模块发送指纹采集及特征量提取的指令。指纹模块接收到该指令后,通过指纹传感器采集指纹并对图像质量进行判断。 若指纹图像不正常(图像质量差)时,模块将评价结果发送给 MCU 主控单元。若指纹图像正常时,模块对图像进行特征点提取,并将比对成功与否的结果通知发送 至 MCU 主控单元。

首先就是提取指纹保存在数据库里,然后我们再重新录入指纹与数据库的指纹进行对比,如何与门锁模块与语言模块以及其他模块联合使用。

通过MG200_PWR管脚来给指纹模块上电,通过MG200_DETECT来检测模块有没有手指按下首先就是管脚和串口的初始化,这个不同的单片机初初始化代码不一样。作者使用的单片机是STM32F401RET6。

1.4 MG200发送指令


*指纹模块通过采集的指纹图像特征点与已存指纹的数据库进行对比
*发送数据包格式:起始码(0x6c)+Checksum(校验和)+发送地址(0x63) + 接收地址(0x62) + 
指令码(cmd) + 参数(parameter) + 预留(0x00)(共7字节)
*接收数据包格式:起始码(0x6c)+Checksum(校验和)+发送地址(0x62) + 接收地址(0x62) + 
应答码(cmd) +返回值(result)+ 参数(parameter) + 预留(0x00)(共8字节)
* Mg200_RecData(u8 cmd,u8 *result,u8 *parameter)---接收MG200的应答数据包
通过判断数据包的Checksum(校验和)+发送地址(0x62) + 接收地址(0x62) +  + 预留(0x00)+起始位
看通信是否正常。
*CaptureAndExtract(u8 num)----先判断数据包接收结果,成功就判断接收数据包的result接收应答码,
就是指令发送的结果,然后根据函数需求返回result或parameter

/*
函数功能:MG200发送数据包
形参:
u8 cmd   发送发送指令码
u8 parameter 发送参数
返回值:void
函数说明:
*/void Mg200_SendData(u8 cmd,u8 parameter)
{u8 checksum;usart6_send_byte(0x6c);//起始码usart6_send_byte(0x63);//发送地址 --- MCUusart6_send_byte(0x62);//接收地址 --- MG200usart6_send_byte(cmd);//指令码usart6_send_byte(parameter);//参数usart6_send_byte(0x00);//预留/*计算校验和*/checksum = (0x63 + 0x62 + cmd + parameter + 0x00) & 0xff;usart6_send_byte(checksum);//校验和}
/*
函数功能:MG200接收数据包
形参:
u8 cmd    接收指令码   注意:接收指令码跟发送指令码一样
u8 *result  接收返回值 --- 结果
u8 *parameter 接收参数
返回值:u8   接收正常函数返回0      接收非正常函数返回非0
函数说明:
*/u8 Mg200_RecData(u8 cmd,u8 *result,u8 *parameter)
{u8 checksum;//等待数据接收完成   TC_Flag置1为数据接收完成while(!mg200_rec.TC_Flag);mg200_rec.TC_Flag = 0;//清空标志位if(mg200_rec.buff[0] != 0x6c){return 1;}		if(mg200_rec.buff[1] != 0x62){return 2;}if(mg200_rec.buff[2] != 0x63){return 3;}if(mg200_rec.buff[3] != cmd){return 4;}*result = mg200_rec.buff[4];//接收返回值*parameter = mg200_rec.buff[5];//接收参数if(mg200_rec.buff[6] != 0x00){return 5;}checksum = (0x62 + 0x63 + cmd + *result + *parameter + 0x00) & 0xff;if(mg200_rec.buff[7] != checksum){return 6;}return 0;//接收正常返回0
}
发送指令目录:

应答指令目录:

1.5指纹模块具体功能实现:


1.捕捉指纹特征量过程


   1.等待手指按下
   2.手指按下后,发送提取特征量命令数据包(通过串口通信发送,指纹模块的UART串口不能同时进行收发动作,所以需等串口接收完成再发)
   3.判断接收数据包结果,判断是否通信成功(通信判断的是起始码,发送地址,接收地址,校验和,指令码,预留位),通信成功后
   4.通过接收数据包函数形参接收返回的值result和参数parameter,判断返回的值result,分析捕捉指纹特征量的结果如何。
   

/*
函数功能:提取指纹特征量
形参:u8 num   决定第几次提取指纹特征量    0 - 4  
返回值:u8    返回result结果
函数说明:
*/u8 CaptureAndExtract(u8 num)
{u8 result;u8 parameter;printf("请按下手指\r\n");//等待手指按下while(!MG200_DETECT);Mg200_SendData(0x51,num);//发送数据包if(Mg200_RecData(0x51,&result,&parameter) == 0){//接收数据正常switch(result){case 0x00:printf("抓取指纹图像及特征量提取成功\r\n");break;default:printf("抓取指纹图像及特征量提取失败\r\n");break;}			}else{printf("通信失败\r\n");return 0xff;}return result;}

2.注册指纹过程


1.通过do while 语句确保成功提取三次特征量
2.成功提取后,发送注册指纹命令数据包  把提取的特征量注册到数据库去
3.判断接收数据包结果,判断是否通信成功(通信判断的是起始码,发送地址,接收地址,校验和,指令码,预留位),通信成功后
4.通过接收数据包函数形参接收返回的值result和参数parameter,判断返回的值result,分析注册指纹的结果如何。

/*
函数功能:注册指纹
形参:void
返回值:u8    返回result结果
0:注册成功     非0:注册失败
先提取三次指纹特征量
函数说明:
*/u8 Enroll(u8 num)
{u8 ret;u8 result;u8 parameter;printf("第一次提取指纹特征量\r\n");do{ret = CaptureAndExtract(0x00);}while(ret);printf("第二次提取指纹特征量\r\n");do{ret = CaptureAndExtract(0x01);}while(ret);printf("第三次提取指纹特征量\r\n");do{ret = CaptureAndExtract(0x02);}while(ret);//提取指纹特征量完成,开始发送注册指纹指令Mg200_SendData(0x7f,num);//发送数据包if(Mg200_RecData(0x7f,&result,&parameter) == 0){//接收数据正常switch(result){case 0x00:printf("注册指纹成功!!!!!\r\n");break;default:printf("注册指纹失败\r\n");break;}			}else{printf("通信失败\r\n");return 0xff;}return result;}
3.比对手指过程


1.等待捕捉指纹特征量函数返回捕捉成功结果
2.发送对比指纹命令数据包(捕捉到的特征量会与已注册的用户特征量进行比对)
3.判断接收数据包结果,判断是否通信成功(通信判断的是起始码,发送地址,接收地址,校验和,指令码,预留位),通信成功后
4.通过接收数据包函数形参接收返回的值result和参数parameter,判断返回的值result,如果成功说明比对指纹为已注册用户指纹。并通过
参数parameter,返回对比的指纹用户ID

/*
函数功能:比对指纹
形参:void
返回值:返回值 非0 :对比成功,且为ID号     0:比对失败
u8   参数    非零:ID号(比对成功)      零:比对失败(找不到ID)
先提取一次指纹特征量
函数说明:
*/u8 Match1N(void)
{u8 result;u8 parameter;if(MG200_DETECT)//手指按下之后再进行指纹比对{while(CaptureAndExtract(0x00));//提取一次指纹特征量//提取指纹特征量完成,开始发送比对指纹指令Mg200_SendData(0x71,0x00);//发送数据包if(Mg200_RecData(0x71,&result,&parameter) == 0){//接收数据正常switch(result){case 0x00:printf("比对指纹成功,ID号:%d\r\n",parameter);break;default:printf("比对失败\r\n");break;}			}else{printf("通信失败\r\n");return 0;}}return parameter;//返回值 非0 :对比成功,且为ID号     0:比对失败}

接下来删除指定指纹,删除所有指纹,获取指纹数量等操作跟上面差不多。

这篇关于指纹模块(MG200)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/223773

相关文章

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

python urllib模块使用操作方法

《pythonurllib模块使用操作方法》Python提供了多个库用于处理URL,常用的有urllib、requests和urlparse(Python3中为urllib.parse),下面是这些... 目录URL 处理库urllib 模块requests 库urlparse 和 urljoin编码和解码

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas