0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32F103设计的智能门锁(支持多种开锁解锁方式)

DS小龙哥-嵌入式技术 ? 来源:DS小龙哥-嵌入式技术 ? 作者:DS小龙哥-嵌入式技 ? 2022-02-28 13:58 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

?

一、环境介绍

编程软件: keil5

主控MCU: STM32F103ZET6

射频卡读写器:RFID-RC522

步进电机: 28BYJ4 4相5线

蓝牙: ATK-HC05

WIFI: ATK-ESP8266

物联网云平台: 采用腾讯云物联网平台,直接支持微信小程序和手机独立APP控制

二、功能介绍

这是基于STM32设计的智能锁模型,支持多种开锁方式,详情如下:

1. 门禁卡刷卡开锁:使用RC522射频卡读卡器,读取IC卡卡号和内部数据,验证身份,开锁。

2. 蓝牙自动开锁: 业主的手机蓝牙在范围内,自动开锁(通过连接蓝牙地址确认业主身份),范围是通过蓝牙断开与连接上为准。

3. 微信小程序开锁、关锁:通过ESP8266连接腾讯云物联网平台,业主可以通过微信小程序“腾讯连连” 进行远程开锁和关锁。

如果没有使用过腾讯云物联网平台的,可以看这里:STM32+ESP8266+MQTT协议连接腾讯物联网开发平台_DS小龙哥的专栏-CSDN博客_腾讯物联网平台

4. 按键开锁、关锁: 可以通过开发板上的按键进行开锁和关锁(模拟物理钥匙而已)

开锁和关锁使用步进电机正转一圈、反转一圈模拟。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

三、使用的相关硬件介绍

3.1 STM32F103ZET6系统板

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.2 HC05蓝牙模块

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.3 WIFI模块

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.4 RFID-RC522模块

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.5 步进电机

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

四、腾讯物联网平台

没有使用过物联网云平台的参考这里:STM32+ESP8266+MQTT协议连接腾讯物联网开发平台_DS小龙哥的专栏-CSDN博客_腾讯物联网平台

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

?

五、设备核心源码

#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串口蓝牙模块与STM32的串口2相连接。
PA1--LED 配对状态输出; 配对成功输出高电平,未配对则输出低电平。
PA4---KEY 用于进入 AT 状态;高电平有效(悬空默认为低电平)。
PA2--RXD 模块接收脚
PA3--TXD 模块发送脚
GND---GND 地
VCC---VCC 电源(3.3V~5.0V)

ATK-ESP8266串口WIFI模块与STM32的串口3相连接。
PB10--RXD 模块接收脚
PB11--TXD 模块发送脚
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--复位脚
*8--VCC <----->VCC


ULN2003控制28BYJ-48步进电机接线:

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

//腾讯物联网服务器的设备信息
#define MQTT_ClientID "3XM7FNOG4Llock"
#define MQTT_UserName "3XM7FNOG4Llock;12010126;W5WOU;1624006004"
#define MQTT_PassWord "209f8dfc3079a54540aeb4263e99be24c5b0212141d8067e6348036383535941;hmacsha256"

//订阅与发布的主题
#define SET_TOPIC  "$thing/down/property/3XM7FNOG4L/lock"  //订阅
#define POST_TOPIC "$thing/up/property/3XM7FNOG4L/lock"  //发布

#define CONNECT_WIFI  "CMCC-Cqvn"   //将要连接的路由器名称 --不要出现中文、空格等特殊字符
#define CONNECT_PASS "99pu58cb"     //将要连接的路由器密码

#define CONNECT_SERVER_IP "106.55.124.154"  //服务器IP地址
#define CONNECT_SERVER_PORT 1883            //服务器端口号

char mqtt_message[200];//上报数据缓存区


unsigned char SN[4]; //存放读出的卡号
unsigned char CheckSN[4]={71,151,114,179}; //用于验证的卡号--业主的卡号用于开锁
char SendBuff[10];


/*
函数功能: 打印卡号
*/
void print_info(unsigned char *p,int cnt)
{
  int i;
	for(i=0;i=50)
        {
            time_cnt=0;
            LED2=!LED2;
        }
			 
        //微信小程序开锁方式: 接收WIFI返回的数据
        if(USART3_RX_FLAG)
        {
            USART3_RX_BUFFER[USART3_RX_CNT]='\0';
            
		    printf("UART3收到数据.....\r\n");
            //向串口打印微信小程序返回的数据
            for(i=0;i5)
            {
                //使用字符串查找函数
                //开锁
                if(strstr((char*)&USART3_RX_BUFFER[5],""Motor":1"))
                {
                    LED1=0;  //亮灯--表示开锁
                     //开锁
                    //执行开锁代码--电机正转
                    Motorcw_ring(1,300);   //电机正转1圈
                     Motor=1;
                }
                //关锁
                else if(strstr((char*)&USART3_RX_BUFFER[5],""Motor":0"))
                {
                    LED1=1;  //灭灯--表示关锁
                    
                    //关锁
                    //执行开锁代码--电机反转
                   Motorccw_ring(1,300);  //电机反转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]);
             
            //比较卡号是否是业主的卡号,决定是否需要开锁
            int i=0;
            for(i=0;i<4;i++)
            {
                if(CheckSN[i]!=SN[i])break;
            }
            
            //如果是业主,就开锁
            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("更新门锁状态:开锁\r\n");
                 
                 Motor=1;
                 //执行开锁代码--电机正转
                 Motorcw_ring(1,300);   //电机正转1圈	  
            }
        }
        
        
        if(USART2_RX_FLAG)
        {
            USART2_RX_BUFFER[USART2_RX_CNT]='\0';
            USART1_Printf("蓝牙:%s\r\n",USART2_RX_BUFFER);
            USART2_RX_CNT=0;
            USART2_RX_FLAG=0;
        }
        
        //蓝牙解锁方式: 离开范围就自动关锁   连接上就自动解锁
        // 区分业主身份方式: 使用蓝牙的配对密码区分.
        if(HC05_LED==1 && Motor==0) //关锁状态才需要开始
        {
            LED1=0;  //亮灯--表示开锁
            ble_connect_flag=1; //表示蓝牙已经连接过
            printf("蓝牙已经连接.\r\n");
             Motor=1;
            
            //更新微信小程序
            sprintf(mqtt_message,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"Motor\":%d}}",Motor);
            MQTT_PublishData(POST_TOPIC,mqtt_message,0);
            USART1_Printf("更新门锁状态:开锁\r\n");
            
              //开锁
            //执行开锁代码--电机正转
            Motorcw_ring(1,300);   //电机正转1圈
        }      
        else
        {
            //之前蓝牙连接过
            if(ble_connect_flag)
            {
                ble_connect_flag=0; //清除标记
                LED1=1;  //关灯--表示上锁
                printf("蓝牙已经断开.\r\n");
                Motor=0;
                //关锁
                //执行开锁代码--电机反转
                Motorccw_ring(1,300);  //电机反转1圈

                //更新微信小程序
                sprintf(mqtt_message,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"Motor\":%d}}",Motor);
                MQTT_PublishData(POST_TOPIC,mqtt_message,0);
                USART1_Printf("更新门锁状态:关锁\r\n");
            }   
        }
	 }
}
;i++)>;i++)>
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

完整项目源码下载地址:https://download.csdn.net/download/xiaolong1126626497/19101807

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2295

    文章

    11034

    浏览量

    365974
  • 智能门锁
    +关注

    关注

    17

    文章

    1897

    浏览量

    44404
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32F103c8上做DLQR最优控制算法的C编程资料

    这是我近期做的一个项目--基于STM32F103c8的DLQR控制算法的C编程,涉及DLQR最优控制算法、嵌入式STM32F103编程、CMSIS-DSP库使用。? ??附有完整的程序。
    发表于 07-23 15:30 ?0次下载

    STM32F103驱动LD3320语音识别模块

    本文介绍了如何使用STM32F103微控制器驱动LD3320语音识别模块,该模块具备非特定人语音识别功能,支持动态编辑关键词,且无需额外Flash和RAM。通过SPI接口连接并配置代码,实现在不同指令下执行相应操作,如流水灯、闪烁等。实验结果显示,
    的头像 发表于 06-28 14:16 ?589次阅读
    <b class='flag-5'>STM32F103</b>驱动LD3320语音识别模块

    低功耗蓝牙智能门锁应用

    ,无需繁琐的门卡,钥匙,更加智能便捷,给用户带来更佳的使用体验。 功能特性: 1、多种开门方式支持近场手机蓝牙开锁及远程
    发表于 06-25 09:47

    CS32F103RB有无驱动例程,是否可用stm32F103的驱动代码?

    如果不能使用stm32F103驱动的话,请把驱动例程发送1830665518@qqcom
    发表于 05-15 10:54

    手机靠近自动开锁,让出行更智能便捷

    智能化浪潮的推动下,传统钥匙逐渐被淘汰,人们对无感、便捷、安全的开锁方式提出了更高的需求。如今,一种全新的开锁方式——“手机靠近自动
    的头像 发表于 04-23 14:37 ?602次阅读
    手机靠近自动<b class='flag-5'>开锁</b>,让出行更<b class='flag-5'>智能</b>便捷

    STM32F103x8 STM32F103xB单片机数据手册

    STM32F103x8STM32F103xB单片机数据手册
    发表于 04-14 14:55 ?2次下载

    STM32F103×8/STM32F103×B MCU手册

    本文提供了STM32F103x8和STM32F103xB中密度高性能系列微控制器的订购信息和机械器件特性。有关整个STMicroelectronics STM32F103xx系列的更多信息,请
    发表于 03-18 16:37 ?0次下载

    基于STM32F103V8T6的智能水处理系统设计与实现

    基于 STM32F103V8T6 的智能水处理装置设计 摘要 : 本文基于 STM32F103V8T6 微控制器,设计并实现了一款智能水处理装置。该装置集
    的头像 发表于 02-19 14:16 ?713次阅读
    基于<b class='flag-5'>STM32F103</b>V8T6的<b class='flag-5'>智能</b>水处理系统设计与实现

    MH32F103A单片机 低价替代STM32,硬件完美兼容 主频可达216M

    MH32F103A是一款基于高性能32位ARM Cortex-M3内核的单片机,工作频率最高可达216 MHz,相比STM32F103系列的72 MHz有了显著提升。内置最大512KB Flash
    的头像 发表于 02-14 16:14 ?558次阅读
    MH32<b class='flag-5'>F103</b>A单片机 低价替代<b class='flag-5'>STM32</b>,硬件完美兼容 主频可达216M

    零死角玩转STM32F103—指南者

    电子发烧友网站提供《零死角玩转STM32F103—指南者.pdf》资料免费下载
    发表于 01-20 14:18 ?49次下载

    ADS8320如何与STM32f103的SPI连接?

    如题,请教一下ADS8320如何与STM32f103的SPI连接,因为STM32的SPI只支持8位和16为的传输格式。如果您有驱动,那定是极好的!
    发表于 12-24 08:23

    STM32F103x8/STM32F103xB规格书

    电子发烧友网站提供《STM32F103x8/STM32F103xB规格书.pdf》资料免费下载
    发表于 12-06 15:43 ?1次下载

    STM32F103模拟SPI驱动ADS1256,没有成功的原因?

    STM32F103模拟SPI驱动ADS1256,没有成功
    发表于 11-22 07:11

    智能门锁ESD静电浪涌保护方案

    多种解锁方式,包括指纹解锁、钥匙解锁、NFC卡片解锁、临时密码
    的头像 发表于 08-15 14:10 ?1322次阅读
    <b class='flag-5'>智能</b><b class='flag-5'>门锁</b>ESD静电浪涌保护方案

    第三篇-V1.5 TB6612电机pwm控制STM32智能小车 STM32F103C8T6单片机

    通过合理的硬件设计和详细的视频笔记介绍,硬件使用STM32F103主控资料多方便学习,通过3万字笔记、12多个小时视频、20多章节代码手把手教会你如何开发和调试。
    的头像 发表于 08-12 18:29 ?3021次阅读
    第三篇-V1.5 TB6612电机pwm控制<b class='flag-5'>STM32</b><b class='flag-5'>智能</b>小车 <b class='flag-5'>STM32F103</b>C8T6单片机