0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32F103設(shè)計的智能門鎖(支持多種開鎖解鎖方式)

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-05-25 10:40 ? 次閱讀

?

一、環(huán)境介紹

編程軟件: keil5

主控MCU: STM32F103ZET6

射頻卡讀寫器:RFID-RC522

步進(jìn)電機(jī): 28BYJ4 4相5線

藍(lán)牙: ATK-HC05

WIFI: ATK-ESP8266

物聯(lián)網(wǎng)云平臺: 采用騰訊云物聯(lián)網(wǎng)平臺,直接支持微信小程序和手機(jī)獨立APP控制

完整項目源碼下載地址:https://download.csdn.net/download/xiaolong1126626497/19101807

二、功能介紹

這是基于STM32設(shè)計的智能鎖模型,支持多種開鎖方式,詳情如下:

1. 門禁卡刷卡開鎖:使用RC522射頻卡讀卡器,讀取IC卡卡號和內(nèi)部數(shù)據(jù),驗證身份,開鎖。

2. 藍(lán)牙自動開鎖: 業(yè)主的手機(jī)藍(lán)牙在范圍內(nèi),自動開鎖(通過連接藍(lán)牙地址確認(rèn)業(yè)主身份),范圍是通過藍(lán)牙斷開與連接上為準(zhǔn)。

3. 微信小程序開鎖、關(guān)鎖:通過ESP8266連接騰訊云物聯(lián)網(wǎng)平臺,業(yè)主可以通過微信小程序“騰訊連連” 進(jìn)行遠(yuǎn)程開鎖和關(guān)鎖。

如果沒有使用過騰訊云物聯(lián)網(wǎng)平臺的,可以看這里:STM32+ESP8266+MQTT協(xié)議連接騰訊物聯(lián)網(wǎng)開發(fā)平臺_DS小龍哥的博客-CSDN博客_esp8266mqtt協(xié)議

4. 按鍵開鎖、關(guān)鎖: 可以通過開發(fā)板上的按鍵進(jìn)行開鎖和關(guān)鎖(模擬物理鑰匙而已)

開鎖和關(guān)鎖使用步進(jìn)電機(jī)正轉(zhuǎn)一圈、反轉(zhuǎn)一圈模擬。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

三、使用的相關(guān)硬件介紹

3.1 STM32F103ZET6系統(tǒng)板

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

3.2 HC05藍(lán)牙模塊

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

3.3 WIFI模塊

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

3.4 RFID-RC522模塊

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

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

?編輯

四、騰訊物聯(lián)網(wǎng)平臺

沒有使用過物聯(lián)網(wǎng)云平臺的參考這里:STM32+ESP8266+MQTT協(xié)議連接騰訊物聯(lián)網(wǎng)開發(fā)平臺_DS小龍哥的博客-CSDN博客_esp8266mqtt協(xié)議

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

五、設(shè)備核心源碼

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include 
#include "timer.h"
#include "esp8266.h"
#include "mqtt.h"
#include "hc05_Bluetooth.h"
#include "RFID_RC522.h"
#include "motor.h"

/*
硬件連接方式:

ATK-HC-05串口藍(lán)牙模塊與STM32的串口2相連接。
PA1--LED 配對狀態(tài)輸出; 配對成功輸出高電平,未配對則輸出低電平。
PA4---KEY 用于進(jìn)入 AT 狀態(tài);高電平有效(懸空默認(rèn)為低電平)。
PA2--RXD 模塊接收腳
PA3--TXD 模塊發(fā)送腳
GND---GND 地
VCC---VCC 電源(3.3V~5.0V)

ATK-ESP8266串口WIFI模塊與STM32的串口3相連接。
PB10--RXD 模塊接收腳
PB11--TXD 模塊發(fā)送腳
GND---GND 地
VCC---VCC 電源(3.3V~5.0V)


RC522射頻模塊外部的接口:    
*1--SDA <----->PB5--片選腳
*2--SCK <----->PB4--時鐘線
*3--MOSI<----->PA12--輸出
*4--MISO<----->PA11--輸入
*5--懸空
*6--GND <----->GND
*7--RST <----->PA8--復(fù)位腳
*8--VCC <----->VCC


ULN2003控制28BYJ-48步進(jìn)電機(jī)接線:

ULN2003接線:
IN4: PC9   d
IN3: PC8   c
IN2: PC7   b
IN1: PC6   a
+  : 5V
-  : GND
*/

//騰訊物聯(lián)網(wǎng)服務(wù)器的設(shè)備信息
#define MQTT_ClientID "3XM7FNOG4Llock"
#define MQTT_UserName "3XM7FNOG4Llock;12010126;W5WOU;1624006004"
#define MQTT_PassWord "209f8dfc3079a54540aeb4263e99be24c5b0212141d8067e6348036383535941;hmacsha256"

//訂閱與發(fā)布的主題
#define SET_TOPIC  "$thing/down/property/3XM7FNOG4L/lock"  //訂閱
#define POST_TOPIC "$thing/up/property/3XM7FNOG4L/lock"  //發(fā)布

#define CONNECT_WIFI  "CMCC-Cqvn"   //將要連接的路由器名稱 --不要出現(xiàn)中文、空格等特殊字符
#define CONNECT_PASS "99pu58cb"     //將要連接的路由器密碼

#define CONNECT_SERVER_IP "106.55.124.154"  //服務(wù)器IP地址
#define CONNECT_SERVER_PORT 1883            //服務(wù)器端口號

char mqtt_message[200];//上報數(shù)據(jù)緩存區(qū)


unsigned char SN[4]; //存放讀出的卡號
unsigned char CheckSN[4]={71,151,114,179}; //用于驗證的卡號--業(yè)主的卡號用于開鎖
char SendBuff[10];


/*
函數(shù)功能: 打印卡號
*/
void print_info(unsigned char *p,int cnt)
{
  int i;
	for(i=0;i=50)
        {
            time_cnt=0;
            LED2=!LED2;
        }
			 
        //微信小程序開鎖方式: 接收WIFI返回的數(shù)據(jù)
        if(USART3_RX_FLAG)
        {
            USART3_RX_BUFFER[USART3_RX_CNT]='\0';
            
		    printf("UART3收到數(shù)據(jù).....\r\n");
            //向串口打印微信小程序返回的數(shù)據(jù)
            for(i=0;i5)
            {
                //使用字符串查找函數(shù)
                //開鎖
                if(strstr((char*)&USART3_RX_BUFFER[5],""Motor":1"))
                {
                    LED1=0;  //亮燈--表示開鎖
                     //開鎖
                    //執(zhí)行開鎖代碼--電機(jī)正轉(zhuǎn)
                    Motorcw_ring(1,300);   //電機(jī)正轉(zhuǎn)1圈
                     Motor=1;
                }
                //關(guān)鎖
                else if(strstr((char*)&USART3_RX_BUFFER[5],""Motor":0"))
                {
                    LED1=1;  //滅燈--表示關(guān)鎖
                    
                    //關(guān)鎖
                    //執(zhí)行開鎖代碼--電機(jī)反轉(zhuǎn)
                   Motorccw_ring(1,300);  //電機(jī)反轉(zhuǎn)1圈  
                   Motor=0;
                }
            }
           
            USART3_RX_CNT=0;
            USART3_RX_FLAG=0;
        }
				
	   //RC522開鎖方式:  讀取IC卡號
        if(ReadCardNumber())
        {
            sprintf(SendBuff,"%x%x%x%x\r\n",SN[0],SN[1],SN[2],SN[3]);
             
            //比較卡號是否是業(yè)主的卡號,決定是否需要開鎖
            int i=0;
            for(i=0;i<4;i++)
            {
                if(CheckSN[i]!=SN[i])break;
            }
            
            //如果是業(yè)主,就開鎖
            if(i==4)
            {
                 LED1=0;  //亮燈--表示開鎖
                
                //更新微信小程序
                sprintf(mqtt_message,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"Motor\":%d}}",Motor);
                MQTT_PublishData(POST_TOPIC,mqtt_message,0);
                USART1_Printf("更新門鎖狀態(tài):開鎖\r\n");
                 
                 Motor=1;
                 //執(zhí)行開鎖代碼--電機(jī)正轉(zhuǎn)
                 Motorcw_ring(1,300);   //電機(jī)正轉(zhuǎn)1圈	  
            }
        }
        
        
        if(USART2_RX_FLAG)
        {
            USART2_RX_BUFFER[USART2_RX_CNT]='\0';
            USART1_Printf("藍(lán)牙:%s\r\n",USART2_RX_BUFFER);
            USART2_RX_CNT=0;
            USART2_RX_FLAG=0;
        }
        
        //藍(lán)牙解鎖方式: 離開范圍就自動關(guān)鎖   連接上就自動解鎖
        // 區(qū)分業(yè)主身份方式: 使用藍(lán)牙的配對密碼區(qū)分.
        if(HC05_LED==1 && Motor==0) //關(guān)鎖狀態(tài)才需要開始
        {
            LED1=0;  //亮燈--表示開鎖
            ble_connect_flag=1; //表示藍(lán)牙已經(jīng)連接過
            printf("藍(lán)牙已經(jīng)連接.\r\n");
             Motor=1;
            
            //更新微信小程序
            sprintf(mqtt_message,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"Motor\":%d}}",Motor);
            MQTT_PublishData(POST_TOPIC,mqtt_message,0);
            USART1_Printf("更新門鎖狀態(tài):開鎖\r\n");
            
              //開鎖
            //執(zhí)行開鎖代碼--電機(jī)正轉(zhuǎn)
            Motorcw_ring(1,300);   //電機(jī)正轉(zhuǎn)1圈
        }      
        else
        {
            //之前藍(lán)牙連接過
            if(ble_connect_flag)
            {
                ble_connect_flag=0; //清除標(biāo)記
                LED1=1;  //關(guān)燈--表示上鎖
                printf("藍(lán)牙已經(jīng)斷開.\r\n");
                Motor=0;
                //關(guān)鎖
                //執(zhí)行開鎖代碼--電機(jī)反轉(zhuǎn)
                Motorccw_ring(1,300);  //電機(jī)反轉(zhuǎn)1圈

                //更新微信小程序
                sprintf(mqtt_message,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"Motor\":%d}}",Motor);
                MQTT_PublishData(POST_TOPIC,mqtt_message,0);
                USART1_Printf("更新門鎖狀態(tài):關(guān)鎖\r\n");
            }   
        }
	 }
}


?審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10914

    瀏覽量

    356733
  • 智能門鎖
    +關(guān)注

    關(guān)注

    17

    文章

    1857

    瀏覽量

    43295
收藏 人收藏

    評論

    相關(guān)推薦

    如何去實現(xiàn)一種基于STM32和freeRTOS智能門鎖設(shè)計

    藍(lán)牙開鎖,鍵盤密碼,刷卡無線射頻識別開鎖。正文藍(lán)牙,射頻,鍵盤分別使用3個任務(wù)函數(shù)進(jìn)行數(shù)據(jù)處理,使用STM32F103 demo,將freeRTOS驅(qū)動文件導(dǎo)入。定義好任務(wù)屬性,句柄以及任務(wù)調(diào)度函數(shù)。//任務(wù)優(yōu)先級#define
    發(fā)表于 02-18 06:47

    基于STM32F103做的WIFI指紋智能門鎖

    基于STM32F103做的WIFI指紋智能門鎖,WIFI使用的是ESP8266+機(jī)智云連接,指紋模塊是FPM10A光學(xué)指紋模塊,加12864屏幕顯示,還有矩陣鍵盤輸入密碼,用舵機(jī)控制門鎖
    發(fā)表于 09-27 07:47

    基于STM32F103的振動監(jiān)測系統(tǒng)設(shè)計

    基于STM32F103的振動監(jiān)測系統(tǒng)設(shè)計。
    發(fā)表于 11-09 17:49 ?43次下載

    STM32F103封裝方式與功能配置

    本文介紹STM32F103封裝方式STM32F103管腳功能的配置。
    發(fā)表于 08-03 17:44 ?2.2w次閱讀
    <b class='flag-5'>STM32F103</b>封裝<b class='flag-5'>方式</b>與功能配置

    基于STM32F103智能壓力變送器研究與設(shè)計

    基于STM32F103智能壓力變送器研究與設(shè)計
    發(fā)表于 09-28 14:41 ?26次下載
    基于<b class='flag-5'>STM32F103</b>的<b class='flag-5'>智能</b>壓力變送器研究與設(shè)計

    STM32F103使用總結(jié)

    STM32F103使用總結(jié)
    發(fā)表于 10-24 10:22 ?152次下載

    stm32f103移植

    stm32f103移植
    發(fā)表于 10-27 09:03 ?43次下載
    <b class='flag-5'>stm32f103</b>移植

    STM32F103教程之STM32F103單片機(jī)的使用心得資料免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F103教程之STM32F103單片機(jī)的使用心得資料免費下載目前很火的設(shè)計STM32教程。
    發(fā)表于 09-26 08:00 ?254次下載

    Aqara智能門鎖N100支持手機(jī)APP設(shè)定和七大開鎖方式

    眾人皆知,智能門鎖最重要的就是解鎖方式、安全性能和智能選項。Aqara智能
    的頭像 發(fā)表于 03-22 16:45 ?5390次閱讀

    STM32F103 CAN模板程序

    STM32F103 CAN模板程序
    發(fā)表于 11-09 11:08 ?81次下載
    <b class='flag-5'>STM32F103</b> CAN模板程序

    stm32f030和stm32f103功能差異

    stm32f030和stm32f103功能差異主要表現(xiàn)在哪?
    的頭像 發(fā)表于 07-22 09:35 ?2.2w次閱讀

    STM32F103 模擬IIC時序

    STM32F103 模擬IIC時序
    發(fā)表于 11-25 09:51 ?35次下載
    <b class='flag-5'>STM32F103</b>  模擬IIC時序

    GD32F103STM32F103的區(qū)別 2021.6.2

    GD32F103STM32F103區(qū)別介紹關(guān)鍵詞Key words:GD32F103、STM32F103摘要Abstract:本文主要是GD32F
    發(fā)表于 12-08 11:06 ?83次下載
    GD32<b class='flag-5'>F103</b>與<b class='flag-5'>STM32F103</b>的區(qū)別 2021.6.2

    基于STM32F103設(shè)計的智能門鎖支持多種開鎖解鎖方式

    這是基于STM32設(shè)計的智能鎖模型,支持多種開鎖方式。
    的頭像 發(fā)表于 02-28 13:58 ?3729次閱讀
    基于<b class='flag-5'>STM32F103</b>設(shè)計的<b class='flag-5'>智能</b><b class='flag-5'>門鎖</b>(<b class='flag-5'>支持</b><b class='flag-5'>多種</b><b class='flag-5'>開鎖</b><b class='flag-5'>解鎖</b><b class='flag-5'>方式</b>)

    STM32F103開源分享

    電子發(fā)燒友網(wǎng)站提供《STM32F103開源分享.zip》資料免費下載
    發(fā)表于 08-22 10:42 ?105次下載
    <b class='flag-5'>STM32F103</b>開源分享