STM32+華為雲IoTDA,帶你設計一個屬於自己的動態密碼鎖


摘要:設計一款物聯網智能電子密碼鎖,以STM32單片機為主控制器,由觸摸矩陣鍵盤、ESP8266、步進電機等模塊組成,具有遠程控制、隨機密碼生成等功能。

本文分享自華為雲社區《STM32+華為雲IOT設計的動態密碼鎖》,作者:DS小龍哥。

1. 前言

隨着人們生活水平的提高及科學技術的發展,個人信息保護顯得至關重要,設計了一款物聯網智能電子密碼鎖,以STM32單片機為主控制器,由觸摸矩陣鍵盤、ESP8266、步進電機等模塊組成,具有遠程控制、隨機密碼生成等功能。經軟硬件測試,系統響應迅速,靈敏度高,實時性好,系統識別准確率高達99%,該系統運行穩定,安全可靠,功耗低及具有較好的擴展性。

當前支持的開鎖方式:

(1)支持手機APP遠程開鎖。通過華為雲物聯網平台實現遠程發送指令開鎖,設備上的ESP8266通過連接家里路由器,在連接華為雲物聯網平台,可以在手機APP上對設備端的RTC時間進行校准,設備唯一ID獲取,生成隨機開鎖密碼,可以點擊APP上的開鎖按鈕,通過物聯網平台提供的API發送指令給STM32設備完成開鎖。

(2)隨機密碼開鎖。手機APP與本地設備都采用時間、作為算法種子,采用算法生成開鎖密碼,每一串的密碼有效時間為一分鍾。查看手機APP上顯示的密碼之后,在本地設備上輸入完成密碼對比開鎖。

2. 手機APP設計

2.1 開發環境介紹

上位機軟件采用Qt框架設計,Qt是一個跨平台的C++圖形用戶界面應用程序框架。Qt是一個1991年由Qt Company開發的跨平台C++圖形用戶界面應用程序開發框架。它既可以開發GUI程序,也可用於開發非GUI程序,比如控制台工具和服務器。簡單來說,QT可以很輕松的幫你做帶界面的軟件,甚至不需要你投入很大精力。

QT官網: https://www.qt.io/

2.2 學習教程

QT入門實戰專欄: https://blog.csdn.net/xiaolong1126626497/category_11400392.html

QT5環境安裝教程:https://xiaolong.blog.csdn.net/article/details/120654599

下載QT5.12.6下載地址:
https://download.qt.io/archive/qt/5.12/5.12.6/

打開鏈接后選擇:

qt-opensource-windows-x86-5.12.6.exe 13-Nov-2019 07:28 3.7G Details

軟件安裝時斷網安裝,否則會提示輸入賬戶。

安裝的時候,勾選一個mingw 32編譯器即可。

2.3 實現效果

3. 創建雲端設備

3.1 創建設備

登錄官網: https://www.huaweicloud.com/

直接搜索物聯網,打開頁面。

https://www.huaweicloud.com/product/iothub.html

得到產品ID,保存好ID,點擊查看詳情:

產品ID為:61b9ba3a2b2aa20288c1e7f1.

3.2 創建MQTT登錄賬號和密匙

設備創建完成接來下生成MQTT登錄賬號、密匙,方便設備登錄雲端平台。

官網工具地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

4. STM32設備端代碼設計

4.1 硬件相關原理圖

4.2 硬件接線

1. 板載ESP8266串口WIFI模塊與STM32的串口3相連接。
PB10--RXD 模塊接收腳
PB11--TXD 模塊發送腳
PB8---CH-PD---懸空
PB9---RST---懸空
GND---GND 地
VCC---VCC 電源(3.3V~5.0V)


2. 觸摸按鍵使用TTP229型號的驅動芯片
SCL接PC11
SDA-OUT接PC10
電源接VCC-3.3
GND接GND

3. ULN2003控制28BYJ-48步進電機接線:

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

4. OLED顯示屏
D0----SCK-----PB14
D1----MOSI----PB13
RES—復位(低電平有效)—PB12
DC---數據和命令控制管腳—PB1
CS---片選引腳-----PA7


5. 板載按鍵
KEY1---PA0 
KEY2---PC13


6.板載LED燈
LED1---PB5
LED2---PB0
LED3---PB1 

7. 板載蜂鳴器
BEEP---PA8

4.3 服務器連接核心代碼

//華為物聯網服務器的設備信息
#define MQTT_ClientID "61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510"
#define MQTT_UserName "61b9ba3a2b2aa20288c1e7f1_QQ1126626497"
#define MQTT_PassWord "385ce91dfe7da5b7431868d5d87e7998163c493344040935d5a00024d6324242"

//訂閱與發布的主題
#define SET_TOPIC  "$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/messages/down"  //訂閱
#define POST_TOPIC "$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/properties/report"  //發布

char mqtt_message[200];//上報數據緩存區

int main()
{
   u32 time_cnt=0;
   u32 i;
   u8 key;
   LED_Init();
   BEEP_Init();
   KEY_Init();
   USART1_Init(115200);
   TIMER1_Init(72,20000); //超時時間20ms
   USART2_Init(9600);//串口-藍牙
   TIMER2_Init(72,20000); //超時時間20ms
   USART3_Init(115200);//串口-WIFI
   TIMER3_Init(72,20000); //超時時間20ms
   USART1_Printf("正在初始化WIFI請稍等.\n");
   if(ESP8266_Init())
   {
      USART1_Printf("ESP8266硬件檢測錯誤.\n");  
   }
   else
   {
      //非加密端口
      USART1_Printf("WIFI:%d\n",ESP8266_STA_TCP_Client_Mode("CMCC-Cqvn","99pu58cb","121.36.42.100",1883,1));

   }

    //2. MQTT協議初始化    
    MQTT_Init(); 
    //3. 連接華為服務器        
    while(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord))
    {
        USART1_Printf("服務器連接失敗,正在重試...\n");
        delay_ms(500);
    }
    USART1_Printf("服務器連接成功.\n");

    //3. 訂閱主題
    if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
    {
        USART1_Printf("主題訂閱失敗.\n");
    }
    else
    {
        USART1_Printf("主題訂閱成功.\n");
    }
    ..................
    ..................
    ...................
}

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM