【《基于树莓派的门禁系统的实现和测试探析案例》3100字】_第1页
【《基于树莓派的门禁系统的实现和测试探析案例》3100字】_第2页
【《基于树莓派的门禁系统的实现和测试探析案例》3100字】_第3页
【《基于树莓派的门禁系统的实现和测试探析案例》3100字】_第4页
【《基于树莓派的门禁系统的实现和测试探析案例》3100字】_第5页
已阅读5页,还剩10页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.41基于树莓派的门禁系统的实现和测试分析案例目录TOC\o"1-3"\h\u75701.1系统实现流程 2301171.2树莓派的登录 3324091.3系统运行 5113001.4程序设置 657621.5各模块功能函数及程序 6229981.6系统工作 12138841.7小结 1225816第2章系统测试 14104442.1系统功能性测试 14235572.1.1用户添加验证测试 14147932.1.2wifi门禁控制测试 1471982.2系统稳定性测试 1572772.2.1系统断电恢复测试 1558952.2.2系统的稳定性测试 1582752.3门禁测试 1556482.3.1门禁系统开门记录 15187282.3.2后台信息收录 16第1章系统实现本章是主要介绍了树莓派系的登录、与后台数据库连接、步进电机程序、信号灯程序等,还包括整个系统正常工作时的情况。1.1系统实现流程本小节将结合前文,具体实现门禁系统的各项功能。系统主要以树莓派4B+开发板为开发平台并结合wifi识别,使用Python语言编写程序。实现流程图如图4-1所示:图4-1实现流程图1.2树莓派的登录1、进入系统的方式有多种:树莓派的打开有多种方式,一种是直接使用显示其进入系统,第二种是使用远程桌面的方式进入树莓派的系统;还有一种是使用软件putty进入,本文使用的是putty进入,进入的界面如图4-2所示:图4-2登录过程为了与树莓派通信,首先要获取到树莓派的ip地址,通过登录进行查询,我们登录后,利用电脑远程进行对ip地址的输入查询,利用上述的方法可以查询到本文的树莓派被分配的IP地址为192.168.1.104。2、输入名字pi,密码ljs,并回车,进入系统后如图4-3所示:图4-3进入系统图(a)3、输入cdtmp并回车,输入pythonServer.py并回车,如图4-4所示:图4-4进入系统图(b)等待一段时间后,启动了PC端的程序,接下来就可以进行系统的运行。1.3系统运行系统整体流程:将用户的mac地址信息传送到后台数据库,同时将wifi信息编入程序。调用程序,调用数据库中的硬件信息与连接wifi的硬件信息进行比对,若是比对成功后来就会发送验证成功的消息,该用户就可以实现对门禁的控制,可以打开门禁或者关闭门禁,其中项目文件如图4-5所示所示:图4-5程序目录1.4程序设置首先连接到wifi,并将连接wifi的ip地址,mac地址存放在数据库中,,然后在代码中将其mac地址赋值存放在数据库中表macID中,NewMacID=currrentID。设置新连接的wifi设备mac值为当前ID,获取到当前ID后,在数据库中进行查找,进行匹配和响应。使用python编写的程序中,使用内置函数API中的参数和Key和secret进行连接,如图4-6所示:图4-6输入APIkey及APIsecret1.5各模块功能函数及程序1、对步进电机的程序编写,若是从losswise为-1的时候,步进电机转动的角度为180°,转动的顺序为顺时针,若是closewise为0时,步进电机的转动的顺序为逆时针180°,对于步进电机的控制主要是有GPIO引脚控制,引脚的编号为GPIO35、GPIO36、GPIO38、GPIO40四个GPIO驱动,具体的代码如图4-7所示:图4-7定义步进电机输入输出信号灯程序:对于信号灯的控制也是使用GPIO11引脚开进行控制输入输出,将发光二极管的引脚连接到GPIO上,利用输出GPIO信号对程序信号灯进行控制,其中延时设置的0.3s,在低电平的时候,灯是被电量的,其程序如图4-8所示:图4-8定义步信号灯输出口系统提示准备,然后进行wifi识别。输出提示信息。并调用程序让信号灯亮或不亮。如图4-9、4-10所示:图4-9调用信号灯函数图4-10信号灯显示4、触发模块程序:编触发程序,触发函数为det(),该程序是为了检测是否有wifi被连接以及被触发,当检测到信号输入时,将信号发送给树莓派。使用引脚GPIO13进行控制,对其值进行检验,结果正确,在终端输出确定,再调用主函数进行对比。主程序运行结束后继续决定是否触发,一直循环程序。如图4-11所示:图4-11调用触发模块5、主函数程序:fromsocketimport*fromtkinterimport*importthreadingimporttimeclassControl():def__init__(self,master,fuc,manual_open,Add_open,Add_close,manual_close):self.parent=masterself.parent.title('wifi门禁控制')#self.parent.geometry('800x600')self.title=Label(self.parent,text='wifi门禁控制端',font=20)self.title.pack()self.frame=Frame(self.parent)self.frame.pack(fill=BOTH,expand=3,pady=20)self.parent.resizable(width=False,height=False)#标签self.label1=Label(self.frame,text="服务器IP")self.label1.grid(row=0,column=0,sticky=E)self.label2=Label(self.frame,text="端口")self.label2.grid(row=1,column=0,sticky=E)self.entry1=Entry(self.frame,width=30)self.entry1.insert(0,'192.168.1.104')#服务器IPself.entry1.grid(row=0,column=1,sticky=W)self.entry2=Entry(self.frame,width=30)self.entry2.insert(0,'9000')#端口self.entry2.grid(row=1,column=1,sticky=W)#连接状态self.var=StringVar()self.var.set('连接')self.stBtn=Button(self.frame,textvariable=self.var,width=10,command=fuc)self.stBtn.grid(row=0,rowspan=2,column=2,sticky=N+S)#self.label4=Label(self.frame,textvariable=self.var,sticky=E)#self.label1.grid(row=2,column=0,sticky=E)self.stBtn1=Button(self.frame,text='打开门禁',width=10,command=manual_open)self.stBtn1.grid(row=3,rowspan=1,column=0,sticky=E)self.var1=StringVar()self.var1.set('门禁已打开')self.labelb1=Label(self.frame,textvariable=self.var1)self.labelb1.grid(row=3,rowspan=2,column=1,sticky=W+E)self.stBtn4=Button(self.frame,text='关闭门禁',width=10,command=manual_close)self.stBtn1.grid(row=4,rowspan=1,column=0,sticky=N+S,pady=10)classThreadClient():def__init__(self,master):self.master=masterself.gui=Control(master,self.starting,self.manual_open,self.Add_open,self.Add_close,self.manual_close)#将我们定义的GUI类赋给服务类的属性,将执行的功能函数作为参数传入defstart_reception(self):globaltcp_client_sockettcp_client_socket=socket(AF_INET,SOCK_STREAM)server_ip=self.gui.entry1.get()server_port=int(self.gui.entry2.get())#TCPsocket端口#链接服务器tcp_client_socket.connect((server_ip,server_port))#发送密钥,建成连接#send_data='ep=FBUKSTKSWHNVPXY4&pw=123456'#tcp_client_socket.send(send_data.encode("gbk"))whileTrue:recvData=tcp_client_socket.recv(1024)ifnotrecvData:breakelse:print(recvData)defmanual_open(self):send_data='A'tcp_client_socket.send(send_data.encode("gbk"))self.gui.var1.set('已经打开门禁')defmanual_close(self):send_data='B'tcp_client_socket.send(send_data.encode("gbk"))self.gui.var1.set('已经关闭门禁')defAdd_open(self):send_data='O'tcp_client_socket.send(send_data.encode("gbk"))#self.gui.var2.set('开始加水')defAdd_close(self):send_data='C'tcp_client_socket.send(send_data.encode("gbk"))#self.gui.var2.set('停止加水')#为方法开一个单独的线程defstarting(self):self.thread=threading.Thread(target=self.start_reception)self.thread.start()if__name__=='__main__':root=Tk()ThreadClient(root)mainloop()1.6系统工作打开树莓派终端,打开项目文件夹,运行mian.py程序如图4-12所示:图4-12门禁显示图在连接服务器,连接成功后,连接wifi,判断mac地址是否在数据库中,进行身份信息认证,若是验证成功,则可以执行打开门禁,若是信息错误,则关闭门禁,门禁的开关取决于信息与后台数据库的对比。1.7小结本章节的内容主要集中于代码的编写,将前面章节的所有内容整合到一起来实现整个系统,将门禁系统与后台数据相连接。每一个模块都有具体的功能和作用,在整个系统中用户、后台、门禁系统都是相互作用和联系的。在这其中让自己对代码编写水平又有了一定的提升。第2章系统测试本章主要进行系统测试,主要有功能测试和稳定测试。功能测试用来检查该系统是否能实现相应的功能。系统的稳定测试,在突发情况下,系统能否正常工作。2.1系统功能性测试功能测试主要检查能否实现之前的功能,进行实验仿真和验证。检查该系统通信连接是否正常和功能切换是否流畅。2.1.1用户添加验证测试测试开始前首先对系统软件硬件平台对接好,其次保证通信畅通,信号灯启动,测试3个用户分别注册10次,其中每次测试注册后,在数据库中对其信息进行查看,其测试测试结果如表5-1所示:表5-1注册测试用户名称测试次数正常次数合格率Id11010100%Id21010100%Id31010100%经过测试,身份信息已经认证的用户通过门禁时是可以自由出入的,在wifi信号范围内门禁能提前感知并未用户开启门禁。2.1.2wifi门禁控制测试对于wifi门禁控制功能进行测试,测试内容就是使用已经注册好的用户对门禁进行打开与关闭测试,测试用户5个,打开关闭各测试五次,判断其对控制成功率和通信状态。测试的结果表5-2所示:表5-2wifi门禁测试表用户名称打开门禁次数关闭门禁次数正常次数成功率时长ID15551000.1sID25551000.3sID35551000.1sID45551000.5sID55551000.2s2.2系统稳定性测试系统的稳定测试是检查在断电情况下和长时间工作的情况下系统的稳定性,观察系统在上述的情况下能否正常工作,是否符合设计要求。2.2.1系统断电恢复测试断电是为了检验系统的可靠性,在日常生活中避免不了会发生断电的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论