STM32外设集 -- 人脸识别门禁系统(K210--HEX协议版本)

这篇具有很好参考价值的文章主要介绍了STM32外设集 -- 人脸识别门禁系统(K210--HEX协议版本)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

人脸,指纹识别已经走进人们的生活,无疑这方便了人们的生活,也提高了安全和可靠性,所以作为未来的学习方向,我也来接触接触人脸识别(有不足之处请见谅😁)


项目选型

STM32外设集 -- 人脸识别门禁系统(K210--HEX协议版本)

为什么选择 K210?

因为这款芯片有充足的开源资料足够支撑我们学习,并将文档也很友好

STM32外设集 -- 人脸识别门禁系统(K210--HEX协议版本)

相关资料连接

使用说明 (Github): github.com/sipeed/MF1-User-Manual
硬件原理图/数据手册: https://dl.sipeed.com/shareURL/MAIX/HDK
固件/资源包资料下载: http://api.dl.sipeed.com/shareURL/MF_Module
Sipeed HardWare: github.com/sipeed/Sipeed_HardWare


 核心部分(K210)

主要根据 MF 人脸识别模块通信串口协议(Hex版)进行编写程序,本次只是写了添加,删除和查询三个基础功能

使用到 串口2 进行通信(代码未贴,需要自行配置)

MF 人脸识别模块通信串口协议(Hex版)https://github.com/sipeed/MF1-User-Manual/blob/master/zh_CN/p02_mf_protocol_manual_v2_hex_zh_CN.md

K210.h

/*********************************************************************************
* @Function	:  hr建立
	@TEL      :  Q1727606470
	@Others	  :  参考使用
**********************************************************************************/
#ifndef __H210_h
#define __H210_h

#include "stm32f10x.h"
#include <string.h>
#include <stdio.h>


typedef struct 
{
  uint8_t Add_User;   //添加用户指令
	uint8_t Delete_User;//删除用户指令
	uint8_t Check_User; //检测用户指令
	uint8_t Set_LED;		//设置LED亮度
		
}State_Flage_TypeDef;

//模组返回的消息类型说明
#define BINCMD_PING           0x00 // ping 指令
#define BINCMD_ABORT     			0x01 // 中断当前执行指令
#define BINCMD_INFO     			0x02 // 查询板卡信息
#define BINCMD_BAUD      		  0x03 // 设置波特率
#define BINCMD_RECORD         0x04 // 开始录入人脸
#define BINCMD_CONFIRM        0x05 // 确认录入人脸
#define BINCMD_DEL        		0x06 // 删除指定 ID 人脸
#define BINCMD_FR_RUN       	0x07 // 开始/停止运行人脸识别
#define BINCMD_FR_RES      		0x08 // 模块返回的人脸识别结果
#define BINCMD_FR_GATE        0x09 // 设置人脸识别门限
#define BINCMD_LED       			0x0A // 设置LED灯状态
#define BINCMD_FR_RUN2       	0x0B // 
/*********************************************************************************
* @Function	:  添加指定ID人脸
* @Input		:  User_ID 用户id(0~254)	
* @Output		:  None 
* @Return		:  None
* @Others		:  未使用CRC16验证
* @Date			:  2022-09-14
**********************************************************************************/
void H210_InputFaceID(u8 User_ID);
/*********************************************************************************
* @Function	:  删除指定ID
* @Input		:  User_ID 用户id(0~254)	
* @Output		:  None 
* @Return		:  None
* @Others		:  None
* @Date			:  2022-09-14
**********************************************************************************/
void H210_ClearDate(u8 User_ID);
/*********************************************************************************
* @Function	:  检测人脸
* @Input		:  None
* @Output		:  None
* @Return		:  None
* @Others		:  未使用CRC16验证
* @Date			:  2022-09-14
**********************************************************************************/
void H210_CheckFacesID(void);

#endif 

K210.c

#include "k210.h"
//k210使用的串口2
#include "usart.h"
#include "usart2.h" 
#include "delay.h"

extern u8 USART2_RX_BUF[USART2_MAX_RECV_LEN]; //获取接收消息
extern vu16 USART2_RX_STA;   	
State_Flage_TypeDef *State_Flage; //枚举一个状态值
/*********************************************************************************
* @Function	:  固定指令(程序中进行修改)
**********************************************************************************/
unsigned char H210_FaceStorageCmd[11] ={0x24,0x24,0x0B,0x00,0xFF,0xFF,0x04,0x00,0x00,0x05,0x01};//录入人脸,设置超时时间为 5 秒
unsigned char H210_FaceOKCmd[8] ={0x24,0x24,0x08,0x00,0xFF,0xFF,0x05,0x01};				 //确认录入成功
unsigned char H210_CheckFaceID[8] ={0x24,0x24,0x08,0x00,0xFF,0xFF,0x07,0x01};			 //开启人脸识别,设置仅上报id,可以观察到红外灯亮起
unsigned char H210_CheckFaceIDMsg[8] ={0x24,0x24,0x08,0x00,0xFF,0xFF,0x07,0x02};	 //开启人脸识别,设置上报id及特征值,可以观察到红外灯亮起
unsigned char H210_CheckFaceNum[7] ={0x24,0x24,0x07,0x00,0xFF,0xFF,0x11};					 //查询录入人数
unsigned char H210_CheckFaceAllmsg[7] ={0x24,0x24,0x07,0x00,0xFF,0xFF,0x12};			 //查询录入的所有信息
unsigned char H210_DeleteFaceID[9] ={0x24,0x24,0x09,0x00,0xFF,0xFF,0x06,0x00,0xFF};//删除指定用户信息	
unsigned char H210_SetLEDLight[8] ={0x24,0x24,0x08,0x00,0xFF,0xFF,0x0A,0x80};			 //删除指定用户信息	
/*********************************************************************************
* @Function	:  设置LED亮度
* @Input		:  User_ID 用户id(0~254)	
* @Output		:  None 
* @Return		:  None
* @Others		:  None
* @Date			:  2022-09-14
**********************************************************************************/
static void Clear_flage(void)
{
	//清空标志位
	State_Flage->Add_User =0;   //添加人脸标志位
	State_Flage->Delete_User =0;//删除人脸标志位
	State_Flage->Check_User =0; //检测人脸标志位
	State_Flage->Set_LED =0;		//设置LED亮度标志位
	H210_FaceStorageCmd[8]=0;   //恢复人脸录入数
}
/*********************************************************************************
* @Function	:  设置LED亮度
* @Input		:  User_ID 用户id(0~254)	
* @Output		:  None 
* @Return		:  None
* @Others		:  None
* @Date			:  2022-09-14
**********************************************************************************/
static void Set_Light(u8 Light)
{
	State_Flage->Set_LED =1;
	H210_SetLEDLight[7] = Light;//修改LED亮度
	Usart_SendArray(USART2,(char*)H210_SetLEDLight,sizeof(H210_SetLEDLight));//发送录入指令
}

/*********************************************************************************
* @Function	:  添加指定ID人脸
* @Input		:  User_ID 用户id(0~254)	
* @Output		:  None 
* @Return		:  None
* @Others		:  未使用CRC16验证
* @Date			:  2022-09-14
**********************************************************************************/
void H210_InputFaceID(u8 User_ID)
{
	State_Flage->Add_User =1;
	H210_FaceStorageCmd[7] = User_ID;//修改用户ID
	Usart_SendArray(USART2,(char*)H210_FaceStorageCmd,sizeof(H210_FaceStorageCmd));//发送录入指令
}
/*********************************************************************************
* @Function	:  删除指定ID
* @Input		:  User_ID 用户id(0~254)	
* @Output		:  None 
* @Return		:  None
* @Others		:  未使用CRC16验证
* @Date			:  2022-09-14
**********************************************************************************/
void H210_ClearDate(u8 User_ID)
{
	State_Flage->Delete_User =1;
	H210_DeleteFaceID[7] = User_ID;//修改用户ID
	Usart_SendArray(USART2,(char*)H210_DeleteFaceID,sizeof(H210_DeleteFaceID));//发送删除指令
}
/*********************************************************************************
* @Function	:  检测人脸
* @Input		:  None
* @Output		:  None
* @Return		:  None
* @Others		:  未使用CRC16验证
* @Date			:  2022-09-14
**********************************************************************************/
void H210_CheckFacesID(void)
{
	State_Flage->Check_User =1;
	Set_Light(90); //亮度设置(补光)
	Usart_SendArray(USART2,(char*)H210_CheckFaceID,sizeof(H210_CheckFaceID));//发送删除指令
}
/*********************************************************************************
* @Function	:  循环检测是否符合指令
* @Input		:  None
* @Output		:  None 
* @Return		:  None
* @Others		:  None
* @Date			:  2022-09-14
**********************************************************************************/
void H210_CheckHex(void){
	if(USART2_RX_STA){
		if(State_Flage->Check_User){//检测用户
			if(USART2_RX_BUF[2]==BINCMD_FR_RES&&USART2_RX_BUF[4] ==0x83){//40 40 08 00 83 CE 87 00 检测成功
				printf("用户ID: %d",USART2_RX_BUF[7]);//输出检测成功的用户ID
				Clear_flage(); //清除标志位
				Set_Light(0);  //关闭补光
			}
		}
		else if(State_Flage->Add_User){//添加用户
			if(USART2_RX_BUF[2]==BINCMD_FR_RES&&USART2_RX_BUF[4] ==0x2A){//录入第一次人脸信息
				
				switch(H210_FaceStorageCmd[8]){
					case 0x00:H210_FaceStorageCmd[8]++;break;//开始录入第二次录入人脸信息
					case 0x01:H210_FaceStorageCmd[8]++;break;//开始录入第三次录入人脸信息
					case 0x02:H210_FaceStorageCmd[8]++;break;//超过我们限定(3)的录入次数(发送确认录入信息)
				}
				if(H210_FaceStorageCmd[8]>0x02){
					Usart_SendArray(USART2,(char*)H210_FaceOKCmd,sizeof(H210_FaceOKCmd));//确认录入指令
					Clear_flage(); //清除标志位
				}else{
					Usart_SendArray(USART2,(char*)H210_FaceStorageCmd,sizeof(H210_FaceStorageCmd));//发送录入指令
				}
			}
		}
		else if(State_Flage->Delete_User){//删除用户
			if(USART2_RX_BUF[2]==BINCMD_FR_RES&&USART2_RX_BUF[4] ==0x5B){//40 40 08 00 5B D7 86 00 删除成功
				Clear_flage(); //清除标志位
			}
		}
		else if(State_Flage->Set_LED){//设置LED亮度
			if(USART2_RX_BUF[2]==BINCMD_FR_RES&&USART2_RX_BUF[4] ==0xFB){//40 40 08 00 5B D7 86 00 删除成功
				Clear_flage(); //清除标志位
			}
		}
	}
}

人脸设别的STM32主要的代码块已贴

STM32外设集 -- 人脸识别门禁系统(K210--HEX协议版本)文章来源地址https://www.toymoban.com/news/detail-405317.html

到了这里,关于STM32外设集 -- 人脸识别门禁系统(K210--HEX协议版本)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32的多功能门禁系统(AS608指纹识别、密码解锁、刷卡解锁)

    目录 一、项目功能 二、视频 三、原理图 4、材料选择 5、部分程序 1、AS608指纹解锁;可以录入、删除、验证指纹; 2、密码解锁;可以密码验证、修改密码和保存密码; 3、刷卡解锁; 4、OLED液晶显示; 基于STM32的多功能门禁系统(AS608指纹识别、密码解锁、刷卡解锁) AS608指纹

    2024年02月12日
    浏览(50)
  • 元宇宙场景下基于区块链人脸识别门禁系统-摘自宣科智能

    如今随着社会经济发展水平的提升,市场对于人脸识别技术的需求扩大。如刷脸门禁、上下班打卡、访客来访等都可能扫一扫脸。基于人脸识别的技术迭代更新,人脸识别技术在安防领域也有了更加开阔的发展空间,现有技术的人脸识别门禁系统存在诸多问题,例如:信息的

    2024年02月11日
    浏览(41)
  • 基于STM32的智能门禁系统

    stm32F407主控芯片 RFID模块 矩阵按键模块 AS608指纹模块 SG90舵机模块 OLED显示屏模块 寻卡 读取卡序列号 匹配卡号 保存卡 删除卡 按行按列读取,获取按键值 检测是否有手指按下图像 刷指纹 录入指纹 删除指纹

    2024年02月13日
    浏览(41)
  • Linux毕业设计:基于OpenCV和QT库实现的人脸识别考勤/门禁系统(arm嵌入式ubuntu)

            本文介绍:Linux上以opencv和qt库实现的人脸识别系统,可应用于考勤、门禁等场景,具有人脸录入、删除、人脸检测、识别、用户管理等完整功能。可运行于ARM嵌入式linux、ubuntu即纯软件、ARM+PC组合等多种方式,应用场景多样且易于移植各个平台。 毕业设计题目汇

    2024年02月04日
    浏览(60)
  • stm32毕业设计 智能门禁系统

    Hi,大家好,今天向大家介绍一个学长做的单片机项目 基于单片机的门禁系统 大家可用于 课程设计 或 毕业设计 门禁系统的基本组成主要包括身份识别、传感与报警、处理与控制、电锁与执行、管理与设置。 本系统从应用角度出发,针对家庭或小型办公场所的使用需求,主

    2024年02月01日
    浏览(48)
  • stm32毕设 stm32 RFID员工打卡门禁系统(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(60)
  • 基于STM32的智能门锁/智能门禁多功能系统

    本次设计是基于STM32F103C8T6(以下C8T6等同)开发的智能锁,支持多种方式对系统进行操作:蓝牙、指纹、RFID刷卡、4x4键盘输入,拥有友好的蓝牙收发界面和LCD交互界面。 蓝牙:作为总系统的管理员,有主管理和次管理,主管理只能有一个,副管理员可以有多个。主管理员拥有

    2024年02月08日
    浏览(54)
  • 基于树莓派4B与STM32的智能门禁系统项目(代码开源)

    前言: 本文为手把手教学 嵌入式经典项目 —— 智能门禁项目 ,本次项目采用  树莓派4B  与  STM32F103C8T6  进行联合开发。项目充分发挥各自 CPU 的优势与长处,将人脸识别的大计算量任务给 树莓派4B ,将门禁系统的控制部分交给 STM32 进行处理。该项目算是嵌入式人工智能

    2024年02月16日
    浏览(44)
  • FreeRTOS小项目实战------基于FreeRTOS和stm32的门禁系统

    目录 收获 系统总体框架 程序框架 具体程序实现 工程文件网盘链接 收获 学习 freertos的移植与裁剪 ,对任务间通信的认识更加深刻,加深了实时操作系统的理解,学习了as608指纹模块,rc522刷卡模块等模块的简单使用。 系统总体框架 该系统采用STM32F407ZGT6为主控芯片,在Fre

    2024年02月02日
    浏览(45)
  • 【毕业设计】基于RFID的门禁系统 - 单片机 物联网 嵌入式 stm32

    Hi,大家好,这里是丹成学长,今天向大家介绍一个 如何使用RFID技术构建一个单片机门禁系统 基于RFID的门禁系统 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/125409052 本篇博客,学长先向大家介绍射频识别

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包