加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

物联网毕设-STM32(Freertos)指纹模块+APP控制+云平台

04/26 15:53
1860
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
  • 方案介绍
    • 前言
    • 一、流程图
    • 二、开发所需平台
    • 三、元器件
    • 四、引脚连接
    • 四、资料包连接说明
    • 总结
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

前言

 这是我和盆友一起写的一个关于智能门禁系统的项目,我们也是经过了一两周的调试,也是完成了所以基础功能,虽然界面不是特别美观,但是只有实现了就行了,我们也没想要求有多高,就给大家展示一下这个做的玩的项目,我们会放一个百度云盘链接给大家,希望对大家有帮助啦

特别鸣谢  我的小伙伴 啦

一、流程图

二、开发所需平台

1.硬件端:keil5

2.软件端:Android studio

三、元器件

3.1 ESP8266

ESP8266是一款物联网WiFi芯片,基于ESP8266可以开发物联网串口WiFi模块,像SKYLAB的WG219/WG229专为移动设备和物联网应用设计,可将用户的物理设备连接到WiFi无线网络上,进行互联网或局域网通信,实现联网功能。

3.2 AS608

AS608 指纹识别模块主要是指采用了杭州晟元芯片技术有限公司(Synochip)的 AS608 指纹识别芯片 而做成的指纹模块,模块厂商只是基于该芯片设计外围电路,集成一个可供2次开发的指纹模块;

3.3 步进电机

步进电机是一种将电 脉冲 信号转换成相应 角位移 或 线位移 的电动机。. 每输入一个 脉冲信号 , 转子 就转动一个角度或前进一步,其输出的 角位移 或 线位移 与输入的脉冲数成正比, 转速 与 脉冲频率 成正比。. 因此, 步进电动机 又称 脉冲电动机 。

四、引脚连接

4.1 ESP8266与霸道板(STM32F103ZE)

ESP8266

霸道板

VCC

3V3

GND

GND

RX

PA3

TX

PA2

CH

PB8

RST

PB9

4.2 AS608与霸道板(STM32F103ZE)

AS608

霸道板

VCC

5V

GND

GND

TouchOUt

PA8

TX

PB10

RX

PB11

4.3 步进电机与霸道板(STM32F103ZE)

步进电机

霸道板

IN1

PB14

IN2

PB15

IN3

PB12

IN4

PB13


四、资料包连接说明

1.硬件使用

2.资料包

3.教程包

4. APP与底层

5.百度网盘链接

链接:

网盘地址icon-default.png?t=N7T8https://pan.baidu.com/s/1GFuANbslzAPlhJssipjxKg?pwd=xzy0

提取码:

heru

6.展示效果

7.部分代码展示

/**
  *********************************************************************
  * @file    main.c
  * @author  fire
  * @version V1.0
  * @date    2018-xx-xx
  * @brief   FreeRTOS V9.0.0  + STM32 固件库例程
  *********************************************************************
  * @attention
  *
  * 实验平台:野火 STM32 全系列开发板 
  * 论坛    :http://www.firebbs.cn
  * 淘宝    :https://fire-stm32.taobao.com
  *
  **********************************************************************
  */ 
 
/*
*************************************************************************
*                             包含的头文件
*************************************************************************
*/ 
/* FreeRTOS头文件 */
#include "FreeRTOS.h"
#include "task.h"
//RT延迟函数
#include "RT_Delay.h"
//#include "bsp_SysTick.h"
//网络协议层
#include "onenet.h"

//网络设备
#include "esp8266.h"
/* 开发板硬件bsp头文件 */
#include "bsp_led.h"
#include "bsp_usart.h"
#include "bsp_key.h"
//指纹模块
#include "./as608/as608_test.h"
#include "./as608/bsp_as608.h"
//网络协议层
#include "onenet.h"
//步进电机
#include "motor.h"
//网络设备
#include "esp8266.h"
/**************************** 任务句柄 ********************************/
/* 
 * 任务句柄是一个指针,用于指向一个任务,当任务创建好之后,它就具有了一个任务句柄
 * 以后我们要想操作这个任务都需要通过这个任务句柄,如果是自身的任务操作自己,那么
 * 这个句柄可以为NULL。
 */
static TaskHandle_t AppTaskCreate_Handle = NULL;/* 创建任务句柄 */
static TaskHandle_t Test_Task_Handle = NULL;/* LED任务句柄 */
static TaskHandle_t KEY_Task_Handle = NULL;/* KEY任务句柄 */

/********************************** 内核对象句柄 *********************************/
/*
 * 信号量,消息队列,事件标志组,软件定时器这些都属于内核的对象,要想使用这些内核
 * 对象,必须先创建,创建成功之后会返回一个相应的句柄。实际上就是一个指针,后续我
 * 们就可以通过这个句柄操作这些内核对象。
 *
 * 内核对象说白了就是一种全局的数据结构,通过这些数据结构我们可以实现任务间的通信,
 * 任务间的事件同步等各种功能。至于这些功能的实现我们是通过调用这些内核对象的函数
 * 来完成的
 * 
 */


/******************************* 全局变量声明 ************************************/
/*
 * 当我们在写应用程序的时候,可能需要用到一些全局变量。
 */

//主题设置
char *Tips = "ESP";
const char *topics[] = {"ESP"};

extern uint8_t state;
/*
*************************************************************************
*                             函数声明
*************************************************************************
*/
static void AppTaskCreate(void);/* 用于创建任务 */

static void Test_Task(void* pvParameters);/* Test_Task任务实现 */
static void KEY_Task(void* pvParameters);/* KEY_Task任务实现 */

static void BSP_Init(void);/* 用于初始化板载相关资源 */

/*****************************************************************
  * @brief  主函数
  * @param  无
  * @retval 无
  * @note   第一步:开发板硬件初始化 
            第二步:创建APP应用任务
            第三步:启动FreeRTOS,开始多任务调度
  ****************************************************************/
int main(void)
{	
  BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
  
  /* 开发板硬件初始化 */
  BSP_Init();
  
  printf("这是一个[野火]-STM32全系列开发板-FreeRTOS固件库实验!nn");
  
  
   /* 创建AppTaskCreate任务 */
  xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate,  /* 任务入口函数 */
                        (const char*    )"AppTaskCreate",/* 任务名字 */
                        (uint16_t       )1024,  /* 任务栈大小 */
                        (void*          )NULL,/* 任务入口函数参数 */
                        (UBaseType_t    )1, /* 任务的优先级 */
                        (TaskHandle_t*  )&AppTaskCreate_Handle);/* 任务控制块指针 */ 
  /* 启动任务调度 */           
  if(pdPASS == xReturn)
    vTaskStartScheduler();   /* 启动任务,开启调度 */
  else
    return -1;  
  
  while(1);   /* 正常不会执行到这里 */    
}


/***********************************************************************
  * @ 函数名  : AppTaskCreate
  * @ 功能说明: 为了方便管理,所有的任务创建函数都放在这个函数里面
  * @ 参数    : 无  
  * @ 返回值  : 无
  **********************************************************************/
static void AppTaskCreate(void)
{
  BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
  
  taskENTER_CRITICAL();           //进入临界区
  
  /* 创建Test_Task任务 */
  xReturn = xTaskCreate((TaskFunction_t )Test_Task, /* 任务入口函数 */
                        (const char*    )"Test_Task",/* 任务名字 */
                        (uint16_t       )1024,   /* 任务栈大小 */
                        (void*          )NULL,	/* 任务入口函数参数 */
                        (UBaseType_t    )2,	    /* 任务的优先级 */
                        (TaskHandle_t*  )&Test_Task_Handle);/* 任务控制块指针 */
  if(pdPASS == xReturn)
    printf("创建MQTT_Task任务成功!rn");
  /* 创建KEY_Task任务 */
  xReturn = xTaskCreate((TaskFunction_t )KEY_Task,  /* 任务入口函数 */
                        (const char*    )"KEY_Task",/* 任务名字 */
                        (uint16_t       )512,  /* 任务栈大小 */
                        (void*          )NULL,/* 任务入口函数参数 */
                        (UBaseType_t    )4, /* 任务的优先级 */
                        (TaskHandle_t*  )&KEY_Task_Handle);/* 任务控制块指针 */ 
  if(pdPASS == xReturn)
    printf("创建TOUCH_Task任务成功!rn");
  
  vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
  
  taskEXIT_CRITICAL();            //退出临界区
}



/**********************************************************************
  * @ 函数名  : Test_Task
  * @ 功能说明: Test_Task任务主体
  * @ 参数    :   
  * @ 返回值  : 无
  ********************************************************************/
static void Test_Task(void* parameter)
{ 			
	
	unsigned short timeCount = 0;	//发送间隔变量
	unsigned char *dataPtr = NULL;
	
	unsigned short timeDoor = 0;	//发送间隔变量
	ESP8266_Init();					//初始化ESP8266
	while(OneNet_DevLink(Tips))			//接入OneNET
			Delay_ms(500);   /* 延时500个tick */
	OneNet_Subscribe(topics, 1);
	

	
	while(1)
	{	
		
		Delay_ms(10);
		dataPtr = ESP8266_GetIPD(0);
		if(dataPtr != NULL)
		{
			timeDoor=0;
			timeCount=0;
			OneNet_RevPro(dataPtr);
		
		}	
	  timeDoor ++;
		timeCount ++;
		if(timeDoor >= 1500)	//发送间隔
		{
			//心跳包
			while(OneNet_Publish( Tips , "KEEP:0"));
			//每十五秒询问查询一次门状态,自动关门
			timeDoor = 0;
			Door_Close(Tips);
		}
		if(timeCount >= 100 && state == 1)	//发送间隔
		{
			//开门
			Door_ID_Open(Tips,state);
			timeCount = 0;

		}
		if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )
    {/* K1 被按下 */
			
			timeCount = 0;
			Mqtt_Task(Tips,2,0);       /*比对指纹*/ 
    }


	}	

}

/**********************************************************************
  * @ 函数名  : Test_Task
  * @ 功能说明: Test_Task任务主体
  * @ 参数    :   
  * @ 返回值  : 无
  ********************************************************************/
static void KEY_Task(void* parameter)
{
	
	/*测试STM32与指纹模块的通信*/
	Delay_ms(800);   /* 延时500个tick */
	Connect_Test();
	
  while (1)
  {
		
		Delay_ms(10);
		//printf("%d",state);
	
		
    if( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON )
    {/* K2 被按下 */
			//printf("DOOR:%drn",state);
			Compare_FR_MQTT(Tips);
    }
  }
}

/***********************************************************************
  * @ 函数名  : BSP_Init
  * @ 功能说明: 板级外设初始化,所有板子上的初始化均可放在这个函数里面
  * @ 参数    :   
  * @ 返回值  : 无
  *********************************************************************/
static void BSP_Init(void)
{
	/*
	 * STM32中断优先级分组为4,即4bit都用来表示抢占优先级,范围为:0~15
	 * 优先级分组只需要分组一次即可,以后如果有其他的任务需要用到中断,
	 * 都统一用这个优先级分组,千万不要再分组,切忌。
	 */
	NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
	//SysTick_Init();
	/* LED 初始化 */
	LED_GPIO_Config();

	/* 串口初始化	*/
	USART_Config();
  Usart2_Init(115200); 	//串口2,驱动ESP8266用
	motor_configuration();      //步进电机//PB12,PB13,PB14,PB15

	/* 按键初始化	*/
	Key_GPIO_Config();
		 /*初始化环形缓冲区*/
	rx_queue_init();
	 
	/*初始化指纹模块配置*/
	AS608_Config();
			
	
}

/********************************END OF FILE****************************/

总结

以上就是今天要讲的内容,本文引使用了sp8266与指纹模块和步进电机,只是简单实现了功能,需要的朋友直接拿走

联系方式 微信号:13648103287

  • 联系方式.docx

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
NX3225SA-25.000M-STD-CRS-2 1 Nihon Dempa Kogyo Co Ltd Quartz Crystal,
$9.24 查看
LTC6991CS6#TRPBF 1 Linear Technology LTC6991 - TimerBlox: Resettable, Low Frequency Oscillator; Package: SOT; Pins: 6; Temperature Range: 0°C to 70°C
暂无数据 查看
S25FL256SAGNFI003 1 Spansion Flash, 64MX4, PDSO8, WSON-8
$10.46 查看

相关推荐

电子产业图谱

方案定制,程序设计方案、单片机程序设计与讲解、APP定制开发。本公众号致力于向读者传递关于程序设计和开发的相关知识,并分享一些关于软件开发的最佳实践。如果您有什么问题或建议,请随时联系我们。我们将竭诚为您服务