写点什么

STM32+ 华为云 IoTDA,带你设计一个属于自己的动态密码锁

  • 2022 年 4 月 15 日
  • 本文字数:2190 字

    阅读完需:约 7 分钟

本文分享自华为云社区《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接PC11SDA-OUT接PC10电源接VCC-3.3GND接GND
3. ULN2003控制28BYJ-48步进电机接线:
ULN2003接线:IN4: PC9 dIN3: PC8 cIN2: PC7 bIN1: PC6 a+ : 5V- : GND
4. OLED显示屏D0----SCK-----PB14D1----MOSI----PB13RES—复位(低电平有效)—PB12DC---数据和命令控制管脚—PB1CS---片选引脚-----PA7

5. 板载按键KEY1---PA0 KEY2---PC13

6.板载LED灯LED1---PB5LED2---PB0LED3---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"); } .................. .................. ...................}
复制代码


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
STM32+华为云IoTDA,带你设计一个属于自己的动态密码锁_stm32_华为云开发者社区_InfoQ写作平台