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

news/2024/11/25 18:27:14/

本文分享自华为云社区《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接GND3. ULN2003控制28BYJ-48步进电机接线:ULN2003接线:
IN4: PC9   d
IN3: PC8   c
IN2: PC7   b
IN1: PC6   a
+  : 5V
-  : GND4. OLED显示屏
D0----SCK-----PB14
D1----MOSI----PB13
RES—复位(低电平有效)—PB12
DC---数据和命令控制管脚—PB1
CS---片选引脚-----PA75. 板载按键
KEY1---PA0 
KEY2---PC136.板载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); //超时时间20msUSART2_Init(9600);//串口-蓝牙TIMER2_Init(72,20000); //超时时间20msUSART3_Init(115200);//串口-WIFITIMER3_Init(72,20000); //超时时间20msUSART1_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");}.......................................................
}

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


http://www.ppmy.cn/news/694461.html

相关文章

Quiz 12: Regular Expressions | Python for Everybody 配套练习_解题记录

文章目录 Python for Everybody课程简介Regular Expressions单选题(1-8)操作题Regular Expressions Python for Everybody 课程简介 Python for Everybody 零基础程序设计(Python 入门) This course aims to teach everyone the …

Redis高可用(主从复制、哨兵模式和Cluster集群)

文章目录 一、Redis高可用1.持久化2.主从复制3.哨兵4.Cluster集群 二、主从复制1.概念2.作用3.主从复制流程4.配置主从复制 三、哨兵模式1.功能2.作用3.组成4.故障转移机制7.故障模拟8.恢复故障节点 四、Cluster群集1.简介2.作用(1)数据分区(…

Java tcomm 例子_使用CICSAPI和ECI.ppt

开发(2) – 使用CICS API和ECI 刘睿 概要 TXSeries编程框架 TXSeries/CICS客户机程序 TXSeries服务器程序 TXSeries编程框架 基于TXSeries的三层应用开发环境 TXSeries的应用开发支持框架 交易(Transaction),任务(Task)和逻辑处理单元(LUW)的概念 交易(Transaction)…

ECI支持大规格实例

信息摘要: ECI支持大规格实例 适用客户: 基因计算及其他需要大规格计算资源的场景 版本/规格功能: 为满足基因计算及其他需要大规格计算资源的场景,ECI 推出了指定大规格实例,每个容器实例可使用规格见下表。 vCPU 内存…

ECI支持大规格实例

信息摘要: ECI支持大规格实例 适用客户: 基因计算及其他需要大规格计算资源的场景 版本/规格功能: 为满足基因计算及其他需要大规格计算资源的场景,ECI 推出了指定大规格实例,每个容器实例可使用规格见下表。 vCPU 内存…

ecilipes配置python_Python坐标转换ECI到ECEF

我正在使用sgp4 python包(由Brandon Rhodes开发);我正在为ISS(Zarya)输入TLE信息。我在某个日期,在ECI坐标系中获得卫星的位置。但是,我想将其转换为ECEF坐标系。 至少有两个实现了matlab函数的实例(ecitoecef,eci2ecef)和一个为RTKLIB项目实…

脑壳疼,好好的系统,为什么要分库分表?

大家好,我是小富~ 说在前边 今天是《分库分表 ShardingSphere 原理与实战》系列的开篇文章,之前写过几篇关于分库分表的文章反响都还不错,到现在公众号:程序员小富后台不断的有人留言、咨询分库分表的问题,我也没想到…

云起实验室:基于ECI的ACK集群高弹性架构实践

本场景介绍基于ECI的ACK集群高弹性架构。该架构中,在ACK集群上运行常规业务,当业务突发波动(如秒杀活动)时,让突增的业务运行在ECI实例上,随着业务波动动态创建/释放ECI实例,达到成本的最优控制…