指纹模块(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);//发送地址 --- MCU
	usart6_send_byte(0x62);//接收地址 --- MG200
	usart6_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:比对失败
	
}

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

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值