RFID课程设计驾校计时系统.doc

上传人:仙人指路1688 文档编号:4141068 上传时间:2023-04-07 格式:DOC 页数:23 大小:511KB
返回 下载 相关 举报
RFID课程设计驾校计时系统.doc_第1页
第1页 / 共23页
RFID课程设计驾校计时系统.doc_第2页
第2页 / 共23页
RFID课程设计驾校计时系统.doc_第3页
第3页 / 共23页
RFID课程设计驾校计时系统.doc_第4页
第4页 / 共23页
RFID课程设计驾校计时系统.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《RFID课程设计驾校计时系统.doc》由会员分享,可在线阅读,更多相关《RFID课程设计驾校计时系统.doc(23页珍藏版)》请在三一办公上搜索。

1、RFID课程设计 计算机科学与工程 学院 物联网工程 专业 312 班 设计题目: 驾校计时系统 组长: 成员: 本人在组内完成的主要工作: WiFi模块 成 绩: 设计方案20%完成功能20%设计报告20%态度能力10%演示答辩30%学 号: 姓 名: 时 间: 2016.1.10 目录一、设计方案11. 系统功能实现12. WiFi连接功能实现13. 系统流程图1二、硬件原理31. WiFi模块简介32. WiFi模块图4三、系统设计51. 数据传输程序设计52. 数据接收程序设计7四、系统测试及结果91. WiFi调试92. 测试结果10五、设计总结12六、参考文献13七、附录13一、设

2、计方案1. 系统功能实现以IC卡号作为驾校人员的编号,用MRFC522读出卡号,将MRFC522通过WiFi信号与数据库连接,再通过JAVA和数据库的链接及操作进行打卡功能。第一次打卡表示开始计时,第二次打卡表示结束计时,以此循环。 根据驾校计时系统的需要,用JAVA做了以下功能:1、新卡打卡进行注册,不是新卡直接打卡开始计时。2、开始计时,结束计时,打卡时长以及剩余打卡时长以及打卡记录。 3、所有的数据均在数据库的表中。2.WiFi连接功能实现通过PC发送WiFi,使WiFi模块与PC进行连接并向PC传送数据:1、按要求将PC连接电源。2、通过串口调试助手对WiFi模块进行调试,发送AT指令

3、对WiFi模块进行检测,如AT+RST指令,表示重启模块。发送AT+CWJAP指令让模块连上自己的路由器。如果调试成功,就表示该WiFi模块可以使用。3、在WiFi模块中烧录程序,程序中设置可以连接上的无线路由名字和密码,将程序中的IP地址设置成与本机上的IP地址相同。4、将PC路由名字和密码设置成与程序中的相同,然后就能进行WiFi连接了。5、通过WiFi传送数据。3. 系统流程图(1) 系统流程图:(3)数据流程图:二、硬件原理1. WiFi模块简介Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块,内置无线网络协

4、议IEEE802.11b.g.n协议栈以及TCP/IP协议栈。传统的硬件设备嵌入Wi-Fi模块可以直接利用Wi-Fi联入互联网,是实现无线智能家居、M2M等物联网应用的重要组成部分。嵌入式Wi-Fi模块,32位单片机,内置Wi-Fi驱动和协议,接口为一般的MCU接口如UART等。适合于各类智能家居或智能硬件单品。 技术参数:单5V或3.3V供电工作温度范围: -45C +85C尺寸:32mm x 20mm x 4.5mm2. WiFi模块图(1)、ESP模块图(2)、原理图3.IC卡 智能IC卡工作的基本原理是:射频读写器向IC卡发一组固定频率的电磁波,卡片内有一个IC串联协振电路,其频率与读

5、写器发射的频率相同,这样在电磁波激励下,LC协振电路产生共振,从而使电容内有了电荷;在这个电荷的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内存储,当所积累的电荷达到2V时,此电容可作为电源为其它电路提供工作电压,将卡内数据发射出去或接受读写器的数据。接触式IC卡接口技术原理 IC卡读写器要能读写符合ISO7816标准的IC卡。三、 系统设计1. 数据传输程序设计(1)WiFi模块传输设计WiFi模块通过AT指令进行重启,设置模块为STA和AP模式,让模块连上自己的路由器,启动模块多连接,让模块连上我们的TCP服务器和发送数据。部分代码:(1)重启:unsigned char

6、 xdata ch1=AT+RSTrn0;(2)设置模块为STA和AP模式:unsigned char xdata ch2=AT+CWMODE=3rn0;(3)让模块连上自己的路由器:unsigned char xdata ch3=AT+CWJAP=QWE,12341234rn;(4)启动模块多连接:unsigned char xdata ch4=AT+CIPMUX=1rn0;(5)让模块连上我们的TCP服务器:unsigned char xdata ch5=AT+CIPSTART=TCP,192.168.191.1,9999rn;(6) 发送数据:void main( ) unsigned

7、char status; unsigned char mes4; unsigned char card10; unsigned char str=AT+CIPSEND=4,10rn0; unsigned int i; InitializeSystem( ); PcdReset(); PcdAntennaOff(); PcdAntennaOn(); InitUart(); InitWifi(); card0=C; card1=A; send_Sbuf(AT+CIPSEND=4,6rn0);delayms(1000);send_Sbuf(123456rn0);delayms(1000) ; whi

8、le ( 1 ) P2=0x00; LED_GREEN = 0; status = PcdRequest(PICC_REQALL, g_ucTempbuf); /复位操作 if (status != MI_OK) LED_GREEN = 1; continue; status = PcdAnticoll(g_ucTempbuf); /防冲撞 if (status != MI_OK) continue; P2=0xff; status = PcdSelect(g_ucTempbuf); /选定卡片 if (status != MI_OK) continue; status = PcdAuthSt

9、ate(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);/验证卡密码 if (status != MI_OK) continue; P2=0xff; else P2=0xff;for(i=0;i4;i+)mesi=g_ucTempbufi;/printf(%c,mesi);card2=(unsigned char)(0x30+mes0/10);card3=(unsigned char)(0x30+mes0%10);card4=(unsigned char)(0x30+mes1/10);card5=(unsigned char)(0x30+mes1%10)

10、;card6=(unsigned char)(0x30+mes2/10);card7=(unsigned char)(0x30+mes2%10);card8=(unsigned char)(0x30+mes3/10);card9=(unsigned char)(0x30+mes3%10);card10=0;send_Sbuf(AT+CIPSEND=4,10rn0);delayms(1000); send_Sbuf(card); delayms(1000) ; status = PcdWrite(1, data1); /写数据到卡片 if (status != MI_OK) continue;

11、P2=0xff; status = PcdValue(PICC_DECREMENT,1,data2);/扣款和充值 if (status != MI_OK) continue; status = PcdBakValue(1, 2);/备份钱包 if (status != MI_OK) continue; P2=0xff; status = PcdRead(2, g_ucTempbuf); /读卡数据 if (status != MI_OK) continue; P2=0xff; PcdHalt(); /进入休眠 2. 数据接收程序设计(1)WiFi连接代码如下:package WIFI;imp

12、ort java.io.IOException;import .ServerSocket;import .Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Server public static void main(String args) Server server=new Server();server.startServer();/启动服务器public void startServer()ServerSocket ss=null;t

13、ry ss=new ServerSocket(9999);/设置连接端口为9999while(true)System.out.println(正在连接);Socket s=ss.accept();/这是一个阻塞的方法System.out.println(连接成功);/创建出一个线程来 DeviceUser deviceUser=new DeviceUser(s);ExecutorService executorService=Executors.newFixedThreadPool(10);/设置一个最多只能容纳10个线程的线程池。 executorService.execute(device

14、User);/执行该线程 catch (IOException e) e.printStackTrace();(2)连入数据库代码如下:public static Connection getConnection()String url = jdbc:derby:/localhost:1527/jsy;/jsy代表要使用的数据库String user = jjj;String pwd = jjj;/数据库的密码Connection conn=null ;try Class.forName(org.apache.derby.jdbc.ClientDriver); conn = DriverMan

15、ager.getConnection(url, user, pwd); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); return conn;(3) 接收WiFi传递的数据代码如下:/ 构造函数,用于获取相应的通信的流public DeviceUser(Socket s) throws IOException this.s = s;InputStream is = s.getInputStream();this.is = is;OutputStream os = s.getOutputStre

16、am();this.os = os;/用于关闭流public void end() try this.os.close();this.is.close();this.s.close(); catch (Exception e) e.printStackTrace();四、系统测试及结果1.硬件调试检测各硬件模块是否断路或者短路,根据电路图查看接线线路是否正确。检测接线无误后,接入电源,测量各芯片的供电电压,检查无误后,进入软件调试阶段。2. 测试结果PC端显示获取的数据:WiFi连接成功五、设计总结两周的课程和设计让我受益良多。这次课程设计使我对ESP8266WiFi模块有了一定的了解,知道了

17、一些AT指令,如AT+RST指令、AT+CWJAP指令以及AT+CIPSEND指令等,同时也对通过WiFi接收数据也有了一定的认识,同样,这次课程设计也使我深深地认识到了自己的不足,以便让我在之后的学习中应当更加努力。当通过WiFi接收数据时,我遇到了很大困难,经过与小组成员一起协商思考以及其他同学的帮助后,最后还是解决了这个困难。这次实验的基本功能都已经实现,但总体思路比较简单,系统不够完善,功能也较为简单。总的来说这次课程设计我学会了很多知识,获得了一些开发设计经验,为今后能够完成其他的设计奠定了基础。六、参考文献1射频识别(RFID)原理与应用,单承赣、单玉峰,电子工业出版社。2ESP8

18、266开发资料七、 附录设计代码:通过 WiFi模块发送数据#include lpcreg.h#include main.h#include mfrc522.h#include /#include reg52.h#include TEMPS.hunsigned char xdata ch1=AT+RSTrn0;unsigned char xdata ch2=AT+CWMODE=3rn0;unsigned char xdata ch3=AT+CWJAP=QWE,12341234rn;unsigned char xdata ch4=AT+CIPMUX=1rn0;unsigned char xdat

19、a ch5=AT+CIPSTART=TCP,192.168.191.1,9999rn;int num =1;unsigned char xdata ch6=AT+CIPSEND=4,2rn0;unsigned char code data116 = 0x12,0x34,0x56,0x78,0xED,0xCB,0xA9,0x87,0x12,0x34,0x56,0x78,0x01,0xFE,0x01,0xFE;/M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令/4字节金额(低字节在前)4字节金额取反4字节金额1字节块地址1字节块地址取反1字节块地址1字节块地址取反 unsigned

20、char code data24 = 0x12,0,0,0;unsigned char code DefaultKey6 = 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF; unsigned char g_ucTempbuf20; void delayms(unsigned int ms)int i,j;for(i=0;ims;i+)for(j=0;j114;j+); void send_Sbuf(unsigned char *str)unsigned char i = 0; while (stri != 0) SBUF = stri+;/change(stri+);

21、while (!TI) ; /等待数据传送完毕 TI = 0; /清中断标志 void InitUart(void) / unsigned char buff; / P0 = 0xff; P2 = 0xff; SCON = 0x50; /设定串口工作方式1,接收使能 PCON = 0x00; /波特率不倍增 TMOD = 0x20; /定时器1工作于8位自动重载模式, 用于产生波特率 EA = 1; TL1 = 0xfd; TH1 = 0xfd; /波特率9600 TR1 = 1;/ delayms(100);/ send_str(str1); /发送英文字符串/ delayms(1000);

22、/ txdata(n); /换行/ send_str(str2); /发送中文字符串/ delayms(1000);/ txdata(O);/ txdata(K);/ txdata(n); /换行/ delayms(1000);/ / send_str(g_ucTempbuf); /发送序列号/void InitWifi(void)send_Sbuf(ch1);delayms(1000);send_Sbuf(ch2);delayms(1000);send_Sbuf(ch3);delayms(5000);send_Sbuf(ch4);delayms(5000);send_Sbuf(ch5);de

23、layms(5000);void main( ) unsigned char status; unsigned char mes4; unsigned char card10; unsigned char str=AT+CIPSEND=4,10rn0; unsigned int i; InitializeSystem( ); PcdReset(); PcdAntennaOff(); PcdAntennaOn(); InitUart(); InitWifi(); card0=C; card1=A; send_Sbuf(AT+CIPSEND=4,6rn0);delayms(1000);send_S

24、buf(123456rn0);delayms(1000) ; while ( 1 ) P2=0x00; LED_GREEN = 0; status = PcdRequest(PICC_REQALL, g_ucTempbuf); /复位操作 if (status != MI_OK) LED_GREEN = 1; continue; status = PcdAnticoll(g_ucTempbuf); /防冲撞 if (status != MI_OK) continue; P2=0xff; status = PcdSelect(g_ucTempbuf); /选定卡片 if (status != M

25、I_OK) continue; status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);/验证卡密码 if (status != MI_OK) continue; P2=0xff; else P2=0xff;for(i=0;i4;i+)mesi=g_ucTempbufi;/printf(%c,mesi);card2=(unsigned char)(0x30+mes0/10);card3=(unsigned char)(0x30+mes0%10);card4=(unsigned char)(0x30+mes1/10);c

26、ard5=(unsigned char)(0x30+mes1%10);card6=(unsigned char)(0x30+mes2/10);card7=(unsigned char)(0x30+mes2%10);card8=(unsigned char)(0x30+mes3/10);card9=(unsigned char)(0x30+mes3%10);card10=0;send_Sbuf(AT+CIPSEND=4,10rn0);delayms(1000); send_Sbuf(card); delayms(1000) ; status = PcdWrite(1, data1); /写数据到

27、卡片 if (status != MI_OK) continue; P2=0xff; status = PcdValue(PICC_DECREMENT,1,data2);/扣款和充值 if (status != MI_OK) continue; status = PcdBakValue(1, 2);/备份钱包 if (status != MI_OK) continue; P2=0xff; status = PcdRead(2, g_ucTempbuf); /读卡数据 if (status != MI_OK) continue; P2=0xff; PcdHalt(); /进入休眠 /系统初始化/

28、void InitializeSystem() P0M1 = 0x0; P0M2 = 0x0; P1M1 = 0x0;P1M2 = 0x0; P3M1 = 0x0; P3M2 = 0xFF; P0 = 0xFF; P1 = 0xFF; P3 = 0xFF; 连接WiFi:package WIFI;import java.io.IOException;import .ServerSocket;import .Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public

29、 class Server public static void main(String args) Server server=new Server();server.startServer();/启动服务器public void startServer()ServerSocket ss=null;try ss=new ServerSocket(9999);/设置连接端口为9999while(true)System.out.println(正在连接);Socket s=ss.accept();/这是一个阻塞的方法System.out.println(连接成功);/创建出一个线程来 Devic

30、eUser deviceUser=new DeviceUser(s);ExecutorService executorService=Executors.newFixedThreadPool(10);/设置一个最多只能容纳10个线程的线程池。 executorService.execute(deviceUser);/执行该线程 catch (IOException e) e.printStackTrace();接收数据:package WIFI;import java.io.IOException;import java.io.InputStream;import java.io.Output

31、Stream;import .Socket;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.Statement;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.JOptionPane;public class DeviceUser implements Runnable public Socket s = null;public Inpu

32、tStream is = null;public OutputStream os = null;/ 构造函数,用于获取相应的通信的流public DeviceUser(Socket s) throws IOException this.s = s;InputStream is = s.getInputStream();this.is = is;OutputStream os = s.getOutputStream();this.os = os;/用于关闭流public void end() try this.os.close();this.is.close();this.s.close();

33、catch (Exception e) e.printStackTrace();Overridepublic void run() try while (true) byte b = new byte20;int i = is.read(b);String cardnum = new String(b);System.out.println(cardnum); if(cardnum.length()7|cardnum.equals(123456 ); else try Connection conn=DB.getConnection(); Statement stmt=null; Result

34、Set rs=null,rs2=null,rs3=null; stmt=conn.createStatement(); String zh=null; int k=0; rs3=stmt.executeQuery(select *from code); /编码队列 while(rs3.next() if(cardnum.equals(rs3.getString(code) System.out.println(rs3.getString(number)+为该卡号); k=1; zh=rs3.getString(number); break; if(k=1) rs=stmt.executeQue

35、ry(select *from ontime); /数据库队列 / jTextField2.setText(zh); /获取账号 int z=0; while(rs.next() if(zh.equals(rs.getString(number) System.out.println(rs.getString(number)+:正在打卡); z=1; break; SimpleDateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); /时间 System.out.println( df.format(new Date(); / jLabel1.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号