加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

物聯(lián)網(wǎng)畢設(shè)-STM32(Freertos)指紋模塊+APP控制+云平臺(tái)

04/26 15:53
8888
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
    • 前言
    • 一、流程圖
    • 二、開發(fā)所需平臺(tái)
    • 三、元器件
    • 四、引腳連接
    • 四、資料包連接說明
    • 總結(jié)
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

前言

?這是我和盆友一起寫的一個(gè)關(guān)于智能門禁系統(tǒng)的項(xiàng)目,我們也是經(jīng)過了一兩周的調(diào)試,也是完成了所以基礎(chǔ)功能,雖然界面不是特別美觀,但是只有實(shí)現(xiàn)了就行了,我們也沒想要求有多高,就給大家展示一下這個(gè)做的玩的項(xiàng)目,我們會(huì)放一個(gè)百度云盤鏈接給大家,希望對大家有幫助啦

特別鳴謝? 我的小伙伴?啦

一、流程圖

二、開發(fā)所需平臺(tái)

1.硬件端:keil5

2.軟件端:Android studio

三、元器件

3.1 ESP8266

ESP8266是一款物聯(lián)網(wǎng)WiFi芯片,基于ESP8266可以開發(fā)物聯(lián)網(wǎng)串口WiFi模塊,像SKYLAB的WG219/WG229專為移動(dòng)設(shè)備和物聯(lián)網(wǎng)應(yīng)用設(shè)計(jì),可將用戶的物理設(shè)備連接到WiFi無線網(wǎng)絡(luò)上,進(jìn)行互聯(lián)網(wǎng)或局域網(wǎng)通信,實(shí)現(xiàn)聯(lián)網(wǎng)功能。

3.2 AS608

AS608 指紋識(shí)別模塊主要是指采用了杭州晟元芯片技術(shù)有限公司(Synochip)的 AS608 指紋識(shí)別芯片 而做成的指紋模塊,模塊廠商只是基于該芯片設(shè)計(jì)外圍電路,集成一個(gè)可供2次開發(fā)的指紋模塊;

3.3 步進(jìn)電機(jī)

步進(jìn)電機(jī)是一種將電 脈沖 信號轉(zhuǎn)換成相應(yīng) 角位移 或 線位移 的電動(dòng)機(jī)。. 每輸入一個(gè) 脈沖信號 , 轉(zhuǎn)子 就轉(zhuǎn)動(dòng)一個(gè)角度或前進(jìn)一步,其輸出的 角位移 或 線位移 與輸入的脈沖數(shù)成正比, 轉(zhuǎn)速 與 脈沖頻率 成正比。. 因此, 步進(jìn)電動(dòng)機(jī) 又稱 脈沖電動(dòng)機(jī) 。

四、引腳連接

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 步進(jìn)電機(jī)與霸道板(STM32F103ZE)

步進(jìn)電機(jī)

霸道板

IN1

PB14

IN2

PB15

IN3

PB12

IN4

PB13


四、資料包連接說明

1.硬件使用

2.資料包

3.教程包

4. APP與底層

5.百度網(wǎng)盤鏈接

鏈接:

網(wǎng)盤地址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
  *
  * 實(shí)驗(yàn)平臺(tái):野火 STM32 全系列開發(fā)板 
  * 論壇    :http://www.firebbs.cn
  * 淘寶    :https://fire-stm32.taobao.com
  *
  **********************************************************************
  */ 
 
/*
*************************************************************************
*                             包含的頭文件
*************************************************************************
*/ 
/* FreeRTOS頭文件 */
#include "FreeRTOS.h"
#include "task.h"
//RT延遲函數(shù)
#include "RT_Delay.h"
//#include "bsp_SysTick.h"
//網(wǎng)絡(luò)協(xié)議層
#include "onenet.h"

//網(wǎng)絡(luò)設(shè)備
#include "esp8266.h"
/* 開發(fā)板硬件bsp頭文件 */
#include "bsp_led.h"
#include "bsp_usart.h"
#include "bsp_key.h"
//指紋模塊
#include "./as608/as608_test.h"
#include "./as608/bsp_as608.h"
//網(wǎng)絡(luò)協(xié)議層
#include "onenet.h"
//步進(jìn)電機(jī)
#include "motor.h"
//網(wǎng)絡(luò)設(shè)備
#include "esp8266.h"
/**************************** 任務(wù)句柄 ********************************/
/* 
 * 任務(wù)句柄是一個(gè)指針,用于指向一個(gè)任務(wù),當(dāng)任務(wù)創(chuàng)建好之后,它就具有了一個(gè)任務(wù)句柄
 * 以后我們要想操作這個(gè)任務(wù)都需要通過這個(gè)任務(wù)句柄,如果是自身的任務(wù)操作自己,那么
 * 這個(gè)句柄可以為NULL。
 */
static TaskHandle_t AppTaskCreate_Handle = NULL;/* 創(chuàng)建任務(wù)句柄 */
static TaskHandle_t Test_Task_Handle = NULL;/* LED任務(wù)句柄 */
static TaskHandle_t KEY_Task_Handle = NULL;/* KEY任務(wù)句柄 */

/********************************** 內(nèi)核對象句柄 *********************************/
/*
 * 信號量,消息隊(duì)列,事件標(biāo)志組,軟件定時(shí)器這些都屬于內(nèi)核的對象,要想使用這些內(nèi)核
 * 對象,必須先創(chuàng)建,創(chuàng)建成功之后會(huì)返回一個(gè)相應(yīng)的句柄。實(shí)際上就是一個(gè)指針,后續(xù)我
 * 們就可以通過這個(gè)句柄操作這些內(nèi)核對象。
 *
 * 內(nèi)核對象說白了就是一種全局的數(shù)據(jù)結(jié)構(gòu),通過這些數(shù)據(jù)結(jié)構(gòu)我們可以實(shí)現(xiàn)任務(wù)間的通信,
 * 任務(wù)間的事件同步等各種功能。至于這些功能的實(shí)現(xiàn)我們是通過調(diào)用這些內(nèi)核對象的函數(shù)
 * 來完成的
 * 
 */


/******************************* 全局變量聲明 ************************************/
/*
 * 當(dāng)我們在寫應(yīng)用程序的時(shí)候,可能需要用到一些全局變量。
 */

//主題設(shè)置
char *Tips = "ESP";
const char *topics[] = {"ESP"};

extern uint8_t state;
/*
*************************************************************************
*                             函數(shù)聲明
*************************************************************************
*/
static void AppTaskCreate(void);/* 用于創(chuàng)建任務(wù) */

static void Test_Task(void* pvParameters);/* Test_Task任務(wù)實(shí)現(xiàn) */
static void KEY_Task(void* pvParameters);/* KEY_Task任務(wù)實(shí)現(xiàn) */

static void BSP_Init(void);/* 用于初始化板載相關(guān)資源 */

/*****************************************************************
  * @brief  主函數(shù)
  * @param  無
  * @retval 無
  * @note   第一步:開發(fā)板硬件初始化 
            第二步:創(chuàng)建APP應(yīng)用任務(wù)
            第三步:啟動(dòng)FreeRTOS,開始多任務(wù)調(diào)度
  ****************************************************************/
int main(void)
{	
  BaseType_t xReturn = pdPASS;/* 定義一個(gè)創(chuàng)建信息返回值,默認(rèn)為pdPASS */
  
  /* 開發(fā)板硬件初始化 */
  BSP_Init();
  
  printf("這是一個(gè)[野火]-STM32全系列開發(fā)板-FreeRTOS固件庫實(shí)驗(yàn)!nn");
  
  
   /* 創(chuàng)建AppTaskCreate任務(wù) */
  xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate,  /* 任務(wù)入口函數(shù) */
                        (const char*    )"AppTaskCreate",/* 任務(wù)名字 */
                        (uint16_t       )1024,  /* 任務(wù)棧大小 */
                        (void*          )NULL,/* 任務(wù)入口函數(shù)參數(shù) */
                        (UBaseType_t    )1, /* 任務(wù)的優(yōu)先級 */
                        (TaskHandle_t*  )&AppTaskCreate_Handle);/* 任務(wù)控制塊指針 */ 
  /* 啟動(dòng)任務(wù)調(diào)度 */           
  if(pdPASS == xReturn)
    vTaskStartScheduler();   /* 啟動(dòng)任務(wù),開啟調(diào)度 */
  else
    return -1;  
  
  while(1);   /* 正常不會(huì)執(zhí)行到這里 */    
}


/***********************************************************************
  * @ 函數(shù)名  : AppTaskCreate
  * @ 功能說明: 為了方便管理,所有的任務(wù)創(chuàng)建函數(shù)都放在這個(gè)函數(shù)里面
  * @ 參數(shù)    : 無  
  * @ 返回值  : 無
  **********************************************************************/
static void AppTaskCreate(void)
{
  BaseType_t xReturn = pdPASS;/* 定義一個(gè)創(chuàng)建信息返回值,默認(rèn)為pdPASS */
  
  taskENTER_CRITICAL();           //進(jìn)入臨界區(qū)
  
  /* 創(chuàng)建Test_Task任務(wù) */
  xReturn = xTaskCreate((TaskFunction_t )Test_Task, /* 任務(wù)入口函數(shù) */
                        (const char*    )"Test_Task",/* 任務(wù)名字 */
                        (uint16_t       )1024,   /* 任務(wù)棧大小 */
                        (void*          )NULL,	/* 任務(wù)入口函數(shù)參數(shù) */
                        (UBaseType_t    )2,	    /* 任務(wù)的優(yōu)先級 */
                        (TaskHandle_t*  )&Test_Task_Handle);/* 任務(wù)控制塊指針 */
  if(pdPASS == xReturn)
    printf("創(chuàng)建MQTT_Task任務(wù)成功!rn");
  /* 創(chuàng)建KEY_Task任務(wù) */
  xReturn = xTaskCreate((TaskFunction_t )KEY_Task,  /* 任務(wù)入口函數(shù) */
                        (const char*    )"KEY_Task",/* 任務(wù)名字 */
                        (uint16_t       )512,  /* 任務(wù)棧大小 */
                        (void*          )NULL,/* 任務(wù)入口函數(shù)參數(shù) */
                        (UBaseType_t    )4, /* 任務(wù)的優(yōu)先級 */
                        (TaskHandle_t*  )&KEY_Task_Handle);/* 任務(wù)控制塊指針 */ 
  if(pdPASS == xReturn)
    printf("創(chuàng)建TOUCH_Task任務(wù)成功!rn");
  
  vTaskDelete(AppTaskCreate_Handle); //刪除AppTaskCreate任務(wù)
  
  taskEXIT_CRITICAL();            //退出臨界區(qū)
}



/**********************************************************************
  * @ 函數(shù)名  : Test_Task
  * @ 功能說明: Test_Task任務(wù)主體
  * @ 參數(shù)    :   
  * @ 返回值  : 無
  ********************************************************************/
static void Test_Task(void* parameter)
{ 			
	
	unsigned short timeCount = 0;	//發(fā)送間隔變量
	unsigned char *dataPtr = NULL;
	
	unsigned short timeDoor = 0;	//發(fā)送間隔變量
	ESP8266_Init();					//初始化ESP8266
	while(OneNet_DevLink(Tips))			//接入OneNET
			Delay_ms(500);   /* 延時(shí)500個(gè)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)	//發(fā)送間隔
		{
			//心跳包
			while(OneNet_Publish( Tips , "KEEP:0"));
			//每十五秒詢問查詢一次門狀態(tài),自動(dòng)關(guān)門
			timeDoor = 0;
			Door_Close(Tips);
		}
		if(timeCount >= 100 && state == 1)	//發(fā)送間隔
		{
			//開門
			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);       /*比對指紋*/ 
    }


	}	

}

/**********************************************************************
  * @ 函數(shù)名  : Test_Task
  * @ 功能說明: Test_Task任務(wù)主體
  * @ 參數(shù)    :   
  * @ 返回值  : 無
  ********************************************************************/
static void KEY_Task(void* parameter)
{
	
	/*測試STM32與指紋模塊的通信*/
	Delay_ms(800);   /* 延時(shí)500個(gè)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);
    }
  }
}

/***********************************************************************
  * @ 函數(shù)名  : BSP_Init
  * @ 功能說明: 板級外設(shè)初始化,所有板子上的初始化均可放在這個(gè)函數(shù)里面
  * @ 參數(shù)    :   
  * @ 返回值  : 無
  *********************************************************************/
static void BSP_Init(void)
{
	/*
	 * STM32中斷優(yōu)先級分組為4,即4bit都用來表示搶占優(yōu)先級,范圍為:0~15
	 * 優(yōu)先級分組只需要分組一次即可,以后如果有其他的任務(wù)需要用到中斷,
	 * 都統(tǒng)一用這個(gè)優(yōu)先級分組,千萬不要再分組,切忌。
	 */
	NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
	//SysTick_Init();
	/* LED 初始化 */
	LED_GPIO_Config();

	/* 串口初始化	*/
	USART_Config();
  Usart2_Init(115200); 	//串口2,驅(qū)動(dòng)ESP8266用
	motor_configuration();      //步進(jìn)電機(jī)//PB12,PB13,PB14,PB15

	/* 按鍵初始化	*/
	Key_GPIO_Config();
		 /*初始化環(huán)形緩沖區(qū)*/
	rx_queue_init();
	 
	/*初始化指紋模塊配置*/
	AS608_Config();
			
	
}

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

總結(jié)

以上就是今天要講的內(nèi)容,本文引使用了sp8266與指紋模塊和步進(jìn)電機(jī),只是簡單實(shí)現(xiàn)了功能,需要的朋友直接拿走

聯(lián)系方式 微信號:13648103287

  • 聯(lián)系方式.docx

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險(xiǎn)等級 參考價(jià)格 更多信息
XRCGB32M000F1H00R0 1 Murata Manufacturing Co Ltd Parallel - Fundamental Quartz Crystal, 32MHz Nom, SMD, 3 PIN

ECAD模型

下載ECAD模型
$0.55 查看
ASEMB-25.000MHZ-LR-T 1 Abracon Corporation XO, Clock, 1MHz Min, 150MHz Max, 25MHz Nom, CMOS,
$2.87 查看
TJA1052IT/5Y 1 NXP Semiconductors TJA1052i - Galvanically isolated high-speed CAN transceiver SOP 16-Pin

ECAD模型

下載ECAD模型
$7.84 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

方案定制,程序設(shè)計(jì)方案、單片機(jī)程序設(shè)計(jì)與講解、APP定制開發(fā)。本公眾號致力于向讀者傳遞關(guān)于程序設(shè)計(jì)和開發(fā)的相關(guān)知識(shí),并分享一些關(guān)于軟件開發(fā)的最佳實(shí)踐。如果您有什么問題或建議,請隨時(shí)聯(lián)系我們。我們將竭誠為您服務(wù)