基于物联网的门禁与考勤系统_阿里云_2022

Posted DS小龙哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于物联网的门禁与考勤系统_阿里云_2022相关的知识,希望对你有一定的参考价值。

1. 前言

当今社会是科学技术日新月异、飞速发展的信息时代。人们正感受着高科技给他们带来的极大方便和益处,同时,人们对于高科技服务于生活的要求也越来越高。但随着科技的发展,也带来了许多不安全的方面。例如,运用高科技手段进行盗窃、抢劫和间谍等万巳罪行为与日增多。怎样才能使人们的安全防范措施跟得上科技的发展、更有效的阻止这些犯罪行为的侵犯呢? 仅仅依靠普通的门锁、防盗门或者监控、报警等系统是不够的。于是基于物联网的智能门禁考勤签到系统在千呼万唤中应运而生。

传统的门锁仅仅是单纯的契合性机械装置,无论它的结构如何复杂坚固,一把在街头就可以配制的钥匙就能打开,并且不留痕迹。如果钥匙遗失连带门锁也要一起更换。为了弥补这些缺点,又产生了磁卡门禁系统。用磁卡控制锁,各种性能均有所提高,但由于磁条存储的信息量小,磁卡与读卡器之间容易产生机械磨损,并且读卡器的刷卡口容易被人为破坏,它的安全性和可靠性便受到限制。随着现代化经济建设和管理的发展,各种酒店、宾馆、写字楼、智能大厦、政府机关和企事业单位、高级物业管理部门等,对门禁系统的需求正发生着重大的变化,其核心是对门锁及其开启、关闭实现智能化管理。

深入分析了国内安防门禁签到系统的发展现状和社会需求后,并在物联网的春风沐浴下,从低成本和低功耗出发,利用STM32芯片搭建一个基于物联网的门禁与签到管理系统,帮助人们在惜时如金的生活中快速解决门禁开锁、签到身份记录问题。

如果需要项目资料可以在这里去下载:
https://download.csdn.net/download/xiaolong1126626497/85898161

2. 功能总结

本课题设计一款基于物联网的门禁与考勤管理系统,有门禁控制和考勤两个方面。

1.实现指纹、射频卡、密码开门,同时数据可以上报给云端

2.通过微信实现远程查看开门时的信息,对门禁的出入情况进行记录

3.小程序端也可以远程控制开门

4.环境检测,显示门禁位置的温湿度等环境信息

5.实现签到功能,微信端显示签到信息

技术实现思路以及功能总结:

单片机选择STM32F103RCT6最小系统板,整个系统支持4种开锁方式:指纹开锁、IC卡刷卡开锁、矩阵键盘输入密码开锁、网页端远程按钮开锁等4种方式,开锁和关锁采用继电器吸合方式来模拟。为了方便远程了解门禁的出入情况,采用阿里云物联网平台作为云平台服务器,本地设备通过ESP8266将采集的温湿度信息、门禁出入的身份ID上传到阿里云网页进行实时显示。

需要的硬件:

(1)STM32F103RCT6最小系统板+一块LCD显示屏

(2)AS608光电指纹模块

(3)继电器模块

(4)矩阵键盘

(5)DHT11温湿度模块

(6)ESP8266串口WIFI

(7)RC522刷卡模块

3. 硬件选型

3.1 电容键盘

3.2 STM32开发板

STM32F103RCT6的芯体规格是32位,速度是72MHz,程序存储器容量是256KB,程序存储器类型是FLASH,RAM容量是48K。

3.3 PCB洞洞板

3.4 母对母杜邦线

3.5 ESP8266 WIFI

ESP8266是一款物联网WiFi芯片,基于ESP8266可以开发物联网串口WiFi模块,像SKYLAB的WG219/WG229专为移动设备和物联网应用设计,可将用户的物理设备连接到WiFi无线网络上,进行互联网或局域网通信,实现联网功能。

ESP8266,专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了超低功耗。ESP8266EX 具有的省电模式适用于各种低功耗应用场景。

ESP8266内置超低功耗 Tensilica L106 32 位 RISC 处理器,CPU 时钟速度最高可达 160 MHz,支持实时操作系统 (RTOS) 和 Wi-Fi 协议栈,可将高达 80% 的处理能力留给应用编程和开发。

3.6 继电器模块

3.7 DHT11温湿度模块

3.8 AS608指纹模块

此款指纹模块带七彩呼吸灯,接口为SH1.0-6P,指纹容量有3种,分别是50枚,100枚,300枚。容量不同,价格也不同。

具有体积小、 功耗低、 接口简单、可靠性高、 识别速度快、 干湿手指适应性好, 指纹搜索速度快的特点。 指纹图像读取时, 对干湿手指都有灵敏的反应和判断, 获得最佳的成像质量, 适用人群广泛。也可定制自学习适应功能, 根据使用者的习惯、气候等的变化自动调整参数, 做到更好的匹配。 具备自学习功能, 指纹识别过程中, 提取新的指纹特征值识别成功后将该特征值融合到之前的指纹特征中, 实际使用过程中越用越好用。模块还具备感应手指功能, 当手指按压到指纹采集面时, 模块 Touch 脚输出高电平。模块通讯接口为UART通信接口, 本模块作为从设备, 由主设备发送相关命令对其进行控制。该模块具有可调节的安全等级功能、 指纹特征数据的读/写功能。

**注意: **指纹模块有两路电源输入,Vsen 是给传感器供电,VDD 是给主控芯片 DSP 供电,即指纹模组主要是由指纹传感器 Sensor 和主控芯片 DSP 组成。在给整个系统上电之初(如电池供电),必须同时给这两路电源供电,让 DSP 对 Sensor 进行初始化,持续时间至少 200ms,随后再关断主控芯片电源 VDD。该初始化,有一个主要的步骤,就是对传感器触摸感应功能进行初始化,以便触摸信号 Touch 能够正常输出。

4. 创建阿里云设备

4.1 创建产品

官网地址: https://iot.console.aliyun.com/lk/summary/new

没有账号需要先注册账号,实名认证之后登录。

先开通公共实例。

4.2 定义物模型

地址:https://iot.console.aliyun.com/product/createProduct

物模型就是设备上传数据的类型,自己设备有哪些需要上传的属性加上即可。

点击添加自定义功能,加入自己需要的属性。

**目前设备上传的数据有4个:**分别是环境温度、环境湿度、签到或者开门人的指纹ID、签到或者开门人的刷卡ID。

最后点击发布上线。

物模型:


  "properties": [
    
      "identifier": "DHT11_T",
      "dataType": 
        "type": "int"
      
    ,
    
      "identifier": "DHT11_H",
      "dataType": 
        "type": "int"
      
    ,
    
      "identifier": "TOUCH_ID",
      "dataType": 
        "type": "int"
      
    ,
    
      "identifier": "CARD_ID",
      "dataType": 
        "type": "text"
      
    ,
    
      "identifier": "motor",
      "dataType": 
        "type": "int"
      
    
  ]

4.3 创建设备

保存设备的信息,接下来生成MQTT登录参数需要使用。


  "ProductKey": "h7s8JDdEcH3",
  "DeviceName": "133K0VSu2G9y6XEFBlUb",
  "DeviceSecret": "b2449f7fbc02c92fbbf7f86d7bac84cd"

4.4 MQTT客户端上报数据

关于MQTT协议登录所需要的参数官方说明文档: https://help.aliyun.com/document_detail/140507.html?spm=a2c4g.11186623.6.571.1e417544OGPj2y

(1)MQTT登录地址

MQTT登录域名的格式:
$YourProductKey.iot-as-mqtt.$YourRegionId.aliyuncs.com

其中:
$YourProductKey:请替换为设备所属产品的ProductKey
$YourRegionId:请替换为物联网平台设备所在地域代码。

下面是阿里云国内的服务器地域和可用区详情:

 
地域名称	所在城市	Region ID	可用区数量
华北 1	青岛	cn-qingdao	    2
华北 2	北京	cn-beijing	    10
华北 3	张家口	cn-zhangjiakou	3
华北 5	呼和浩特	cn-huhehaote	2
华北 6	乌兰察布	cn-wulanchabu	3
华东 1	杭州	cn-hangzhou	    8
华东 2	上海	cn-shanghai  	8
华南 1	深圳	cn-shenzhen   	6
华南 2	河源	cn-heyuan	    2
华南 3	广州	cn-guangzhou	2
西南 1	成都	cn-chengdu	    2

端口号是:1883

经过上面的格式解释,我的阿里云服务器登录的域名就是(选择的是上海服务器):h7s8JDdEcH3.iotas-mqtt.cn-shanghai.aliyuncs.com

域名对应的IP地址(动态解析出来的):  101.133.196.97

在线解析域名网站:https://site.ip138.com/a1cMlEwEwjg.iot-as-mqtt.cn-shanghai.aliyuncs.com/

(2)MQTT登录参数

(1) MQTT_ClientID
固定格式:$ClientID|securemode=$Mode,signmethod=$SignMethod|。

参数说明:
$ClientId:  设备ID,一般填设备的硬件编号。我这里就直接填当前的设备名称,后面的密码里也要填这个ID,必须一样就行。(设备名称就是创建设备的时候复制出来3个参数里的设备名称)
securemode=3:TCP直连模式,无需设置SSL/TLS信息。
securemode=2:TLS直连模式,需要设置SSL/TLS信息。
$SignMethod:算法类型,支持hmacmd5和hmacsha1。

示例:
当前我的设备名称是:133K0VSu2G9y6XEFBlUb ,选择TCP直连模式,选择hmacsha1算法类型。

那么我的ClientID就是:
133K0VSu2G9y6XEFBlUb|securemode=3,signmethod=hmacsha1|

(2) MQTT_UserName
固定格式:$DeviceName&$ProductKey
参数解释:
$DeviceName 是设备的名称(就是创建设备的时候复制出来3个参数里的设备名称)
$ProductKey 是设备的ProductKey(就是创建设备的时候复制出来3个参数里的ProductKey)

示例:
当前我的设备名称是:133K0VSu2G9y6XEFBlUb ,我的ProductKey是:h7s8JDdEcH3

那么我的UserName就是:
133K0VSu2G9y6XEFBlUb&h7s8JDdEcH3

(3) MQTT_PassWord
下载密码生成小工具:https://help.aliyun.com/document_detail/140507.html?spm=a2c4g.11186623.6.571.1e417544OGPj2y#section-dai-o6u-deh

计算MQTT签名-密码:https://help.aliyun.com/document_detail/292635.htm?spm=a2c4g.11186623.0.0.5aaf3686v36VUs#section-jx3-u57-pmm

根据设备证书信息,填入参数,然后生成MQTT登录密匙。

生成的信息如下:这3个数据就是接下来,MQTT登录使用的密匙信息

填入设备信息:
productKey:  h7s8JDdEcH3

deviceName:  133K0VSu2G9y6XEFBlUb

deviceSecret:  b2449f7fbc02c92fbbf7f86d7bac84cd

timestamp:  1652074854015

clientId:  133K0VSu2G9y6XEFBlUb

计算结果:
mqttClientId: 
133K0VSu2G9y6XEFBlUb|securemode=2,signmethod=hmacsha1,timestamp=1652074854015|

username: 
133K0VSu2G9y6XEFBlUb&h7s8JDdEcH3

password: 
CB182C6AE45CF2529AD91ADE2C5886EA7A67FC7E

(3)使用MQTT客户端登录

按照软件提示的参数填入进去,点击登录即可。

软件下载地址:https://download.csdn.net/download/xiaolong1126626497/18784012

登录阿里云端可以看到设备已经在线了。

(4)主题订阅、发布测试

在产品页面可以看到主题格式:https://iot.console.aliyun.com/product/productDetail/a1cMlEwEwjg/func?current=2

发布主题:
/sys/h7s8JDdEcH3/133K0VSu2G9y6XEFBlUb/thing/event/property/post

上报属性消息的格式:  
"method":"thing.event.property.post","params":"DHT11_T":28,"DHT11_H":80,"TOUCH_ID":1,"CARD_ID":"1234567890","motor":1

订阅主题:
/sys/h7s8JDdEcH3/133K0VSu2G9y6XEFBlUb/thing/service/property/set

网页端收到发布的消息:

4.5 MQTT服务器信息总结

MQTT服务器登录的信息:

mqttClientId: 
nSK7cPjbnPPBFsLch47U|securemode=2,signmethod=hmacsha1,timestamp=1652076448733|

username: 
nSK7cPjbnPPBFsLch47U&h7s8SDIY078

password: 
B2F31FA2AB991E98881FABDA45E01E0291014400


发布主题:
/sys/h7s8SDIY078/nSK7cPjbnPPBFsLch47U/thing/event/property/post

上报属性消息的格式:  
"method":"thing.event.property.post","params":"DHT11_T":28,"DHT11_H":80,"TOUCH_ID":1,"CARD_ID":"1234567890"


订阅主题:
/sys/h7s8SDIY078/nSK7cPjbnPPBFsLch47U/thing/service/property/set

4.6 创建可视化项目

地址: https://iot.console.aliyun.com/lk/related-services

进入到页面编辑区域。

4.7 关联产品与设备

链接: https://studio.iot.aliyun.com/project/a123UfKp0N6Xy62b/device

4.8 设计UI界面

链接:https://studio.iot.aliyun.com/p/a123UfKp0N6Xy62b/project/detail

配置仪表盘的的数据源

设计完毕页面后点击发布。

最终显示的效果:

为了方便远程控制门锁开关,再加一个按钮:

设备登录之后,点击网页上的按钮开关,会自动下发数据:

len:161,Data:@/sys/h7s8SDIY078/nSK7cPjbnPPBFsLch47U/thing/service/property/set"method":"thing.service.property.set","id":"1426170453","params":"motor":1,"version":"1.0.0"
len:161,Data:@/sys/h7s8SDIY078/nSK7cPjbnPPBFsLch47U/thing/service/property/set"method":"thing.service.property.set","id":"1431295144","params":"motor":0,"version":"1.0.0"

5. STM32程序设计

采用的这块开发板有3个可以编程使用的按键,1个复位按键。

程序里使用这3个按键来完成显示屏+指纹模块的操作,完成指纹的录入、删除等操作。

板子上有2盏LED灯,可以用来当做状态指示灯使用。

板子上的LCD屏插口可以直接插入0.96寸OLED显示屏或者1.44寸的TFT显示屏,比较坑的地方:这个LCD显示屏插槽的背光引脚居然是PB10,一般情况下PB10肯定要当做串口使用的,所以当前是将LCD屏通过杜邦线引出来接其他引脚实现驱动的。

本设计里采用了ESP8266-WIFI,这个串口协议的WIFI,内置了完整的TCP/IP协议栈,也支持AP+STA模式,当前设计里,ESP8266通过代码方式配置成STA模式,去连接指定可以上网的路由器,再配合代码里封装的MQTT协议,登录阿里云物联网服务器,完成数据交互。

指纹识别采用AS608光电指纹模块,这个指纹模块内置了50~300枚指纹存放空间,通过串口协议完成指纹的比对、录入、删除等操作。

DHT11是一个数字温湿度传感器,采用单总线协议,完成温度、湿度的数据读取。

继电器模块是一个带光耦隔离的,支持高低电平触发的开关模块,可以用来控制220V的家电设备。

5.1 硬件接线

1)AS608指纹模块接线
VCC---3.3v(1号线)
PA6---触摸感应线-高电平有效(2号线)
VCC---3.3V(3号线)
PA3(RX)---指纹模块的TX(4号线)
PA2(TX)---指纹模块的RX(5号线)
GND---GND(6号线)2)ATK-ESP8266 WIFI接线
PB10(TX)--RXD 模块接收脚
PB11(RX)--TXD 模块发送脚
GND---GND 地
VCC---VCC 电源(3.3V~5.0V)

(3)温湿度传感器: DHT11
VCC--VCC
GND---GND
DAT---PA5 

(4)继电器--模拟门禁锁的开关
DAT: PB12 
+  : 5V
-  : GND

(5)OLED显示屏接线:
GND   电源地
VCC   接 5V或3.3v电源
SCL   接 PC8(SCL)
SDA   接 PC9(SDA)
RST   接 PC10
DC    接 PB7
CS    接 PB8
BL	  接 PB4


(6)板载LED灯接线
LED1---PA8
LED2---PD2

(7)板载按键接线
K0---PA0 
K1---PC5 
K2---PA15

(8)触摸按键使用TTP229型号的驱动芯片
SCL接----------->PC1--修改
SDA-OUT接------->PC2--修改
电源接---------->VCC-3.3
GND接----------->GND


(9)RC522射频模块外部的接口:    
*1--SDA <----->PC14--片选脚
*2--SCK <----->PC15--时钟线
*3--MOSI<----->PA12--输出
*4--MISO<----->PA11--输入
*5--悬空
*6--GND <----->GND
*7--RST <----->PA4--复位脚
*8--VCC <----->VCC

5.2 开发板原理图

5.3 可用的IO口

STM32F103RCT6开发板可以使用的引脚:
PC13
PC14
PC15
PD0--OSCIN-----特殊
PD1--OSCOUT----特殊
PC0
PC1
PC2
PC3
PA0----K0
PA1
PA2--串口2
PA3--串口2
PA4
PA5---SPI1_SCK
PA6---SPI1_MISO
PA7---SPI1_MOSI
PC4
PC5----K1
PB0
PB1
PB2---BOOT1--特殊
PB10--串口3
PB11--串口3
PB8
PB9
PB7
PB6
PB5
PB4
PB3
PD2------LED2
PC12----IIC_SCL
PC11----IIC_SDA
PC10
PA15---K2
PA14---SWCLK
PA13---SWDIO
PA12
PA11
PA10---串口1
PA9----串口1
PA8----LED1
PC9
PC8
PC7
PC6
PB15
PB14
PB13
PB12

5.4 汉字取模

5.5 程序下载

5.6 keil工程

5.7 代码分析

(1)MQTT的参数与WIFI的参数配置

在main.c文件最前面,是阿里云MQTT协议的参数配置,主要的是93行的这个路由器的信息配置。

(2)WIFI初始化配置

整个设备是通过ESP8266联网的,ESP8266连接网络的过程都通过串口打印出来了,正常情况下,串口口上会打印,WIFI:0这样的提示,表示路由器网络连接成功。

具体代码位置看下图中圈出来的位置:

连接阿里云服务器,订阅主题的代码:

 printf("正在初始化ESP8266..\\r\\n");  
    for(i=0;i<5;i++)
    
        if(ESP8266_Init()==0)
        
            esp8266_state=1;
            break;
        
        else
        
            esp8266_state=0;
            printf("ESP8266硬件检测错误.\\n");  
        
    
  
   if(esp8266_state)
   
        printf("准备连接服务器....\\r\\n");
        //非加密端口
        printf("WIFI:%d\\n",ESP8266_STA_TCP_Client_Mode(CONNECT_WIFI,CONNECT_PASS,CONNECT_SERVER_IP,CONNECT_SERVER_PORT,1));
         
        //2. MQTT协议初始化	
        MQTT_Init(); 

        //3. 连接服务器  
        for(i=0;i<5;i++)
        
            if(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord)==0)
            
                esp8266_state=1;
                break;
            
            esp8266_state=0;
            printf("服务器连接失败,正在重试...\\n");
            delay_ms(500);
        
        printf("服务器连接成功.\\n");

        //3. 订阅主题
        if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
        
           printf("主题订阅失败.\\n");
        
        else
        
           printf("主题订阅成功.\\n");
         
   
   
   printf("进入系统主循环...\\r\\n");

(3)温湿度模块数据读取

在while循环里每1秒钟会上传一次当前系统中温度、湿度、还有IC卡号、指纹ID、锁状态信息上传到阿里云服务器。上传数据调用MQTT_PublishData完成。这个上传函数也会花费时间,其他地方的代码也会花费时间,所以上传数据设置为1秒钟实际加上其他地方消耗的时间,是差不多3~5秒的频率上传一次数据到阿里云。

具体实现的代码入下图标注:

具体实现代码:

if(wifi_TimeCnt>=100) //1000毫秒一次
        
            wifi_TimeCnt=0;
            LED1=!LED1;
            
            //读取温湿度
            if(DHT11_Read_Data(&dht11_temp,&dht11_humidity))
            
                printf("温度读取失败.\\r\\n");
            
                        
            printf("环境温度:%d\\r\\n环境湿度:%d\\r\\n",dht11_temp,dht11_humidity);

             //环境温度
            sprintf(data_buff,"%d",dht11_temp);
            Gui_DrawFont_GBK16(72,16*0,RED,0,(u8*)data_buff);
            
            //环境湿度
            sprintf(data_buff,以上是关于基于物联网的门禁与考勤系统_阿里云_2022的主要内容,如果未能解决你的问题,请参考以下文章

基于阿里云物联网平台设计的实时图传系统_采用MQTT协议传输图像

基于STM32设计物联网在线智能称重系统(OneNet)_2022

基于STM32设计物联网在线智能称重系统(OneNet)_2022

ESP 保姆级教程疯狂毕设篇 —— 案例:基于物联网的GY906红外测温门禁刷卡系统

阿里云:如何基于Node.js构建物联网系统

Python_阿里云物联网_数据/图像/音频传输