?
一、環(huán)境介紹
步進(jìn)電機(jī): 28BYJ4 4相5線
藍(lán)牙: ATK-HC05
WIFI: ATK-ESP8266
物聯(lián)網(wǎng)云平臺(tái): 采用騰訊云物聯(lián)網(wǎng)平臺(tái),直接支持微信小程序和手機(jī)獨(dú)立APP控制
二、功能介紹
這是基于STM32設(shè)計(jì)的智能鎖模型,支持多種開鎖方式,詳情如下:
1. 門禁卡刷卡開鎖:使用RC522射頻卡讀卡器,讀取IC卡卡號(hào)和內(nèi)部數(shù)據(jù),驗(yàn)證身份,開鎖。
2. 藍(lán)牙自動(dòng)開鎖: 業(yè)主的手機(jī)藍(lán)牙在范圍內(nèi),自動(dòng)開鎖(通過(guò)連接藍(lán)牙地址確認(rèn)業(yè)主身份),范圍是通過(guò)藍(lán)牙斷開與連接上為準(zhǔn)。
3. 微信小程序開鎖、關(guān)鎖:通過(guò)ESP8266連接騰訊云物聯(lián)網(wǎng)平臺(tái),業(yè)主可以通過(guò)微信小程序“騰訊連連” 進(jìn)行遠(yuǎn)程開鎖和關(guān)鎖。
如果沒(méi)有使用過(guò)騰訊云物聯(lián)網(wǎng)平臺(tái)的,可以看這里:STM32+ESP8266+MQTT協(xié)議連接騰訊物聯(lián)網(wǎng)開發(fā)平臺(tái)_DS小龍哥的專欄-CSDN博客_騰訊物聯(lián)網(wǎng)平臺(tái)
4. 按鍵開鎖、關(guān)鎖: 可以通過(guò)開發(fā)板上的按鍵進(jìn)行開鎖和關(guān)鎖(模擬物理鑰匙而已)
開鎖和關(guān)鎖使用步進(jìn)電機(jī)正轉(zhuǎn)一圈、反轉(zhuǎn)一圈模擬。
?
?
三、使用的相關(guān)硬件介紹
3.1 STM32F103ZET6系統(tǒng)板
?
3.2 HC05藍(lán)牙模塊
?
3.3 WIFI模塊
?
3.4 RFID-RC522模塊
?
3.5 步進(jìn)電機(jī)
?
四、騰訊物聯(lián)網(wǎng)平臺(tái)
沒(méi)有使用過(guò)物聯(lián)網(wǎng)云平臺(tái)的參考這里:STM32+ESP8266+MQTT協(xié)議連接騰訊物聯(lián)網(wǎng)開發(fā)平臺(tái)_DS小龍哥的專欄-CSDN博客_騰訊物聯(lián)網(wǎng)平臺(tái)
?
?
?
?
五、設(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 配對(duì)狀態(tài)輸出; 配對(duì)成功輸出高電平,未配對(duì)則輸出低電平。
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--時(shí)鐘線
*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ù)器端口號(hào)
char mqtt_message[200];//上報(bào)數(shù)據(jù)緩存區(qū)
unsigned char SN[4]; //存放讀出的卡號(hào)
unsigned char CheckSN[4]={71,151,114,179}; //用于驗(yàn)證的卡號(hào)--業(yè)主的卡號(hào)用于開鎖
char SendBuff[10];
/*
函數(shù)功能: 打印卡號(hào)
*/
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卡號(hào)
if(ReadCardNumber())
{
sprintf(SendBuff,"%x%x%x%x\r\n",SN[0],SN[1],SN[2],SN[3]);
//比較卡號(hào)是否是業(yè)主的卡號(hào),決定是否需要開鎖
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)牙解鎖方式: 離開范圍就自動(dòng)關(guān)鎖 連接上就自動(dòng)解鎖
// 區(qū)分業(yè)主身份方式: 使用藍(lán)牙的配對(duì)密碼區(qū)分.
if(HC05_LED==1 && Motor==0) //關(guān)鎖狀態(tài)才需要開始
{
LED1=0; //亮燈--表示開鎖
ble_connect_flag=1; //表示藍(lán)牙已經(jīng)連接過(guò)
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)牙連接過(guò)
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");
}
}
}
}
;i++)>;i++)>
完整項(xiàng)目源碼下載地址:https://download.csdn.net/download/xiaolong1126626497/19101807
審核編輯:符乾江
-
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354296 -
智能門鎖
+關(guān)注
關(guān)注
17文章
1845瀏覽量
42965
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論