一种RFID应用开发课程实践教学项目的设计

2016-12-15 19:00韩少男
电脑知识与技术 2016年27期
关键词:实践教学

韩少男

摘要:针对计算机物联网专业RFID应用开发课程实验内容涉及大篇幅电子技术、多数实验设备仅能提供验证性实验的现状,本文提出了一种RFID实践教学的简易开发框架用于指导学生进行系统开发及课程设计,详细介绍了开发框架的实现及使用方法,并讨论了针对计算机专业学生设计RFID实践教学项目的思路。

关键词:RFID应用开发;Arduino;实践教学

中图分类号:G642 文献标识码:A 文章编号:1009-3044(2016)27-0094-03

射频识别技术是计算机科学物联网专业的核心课程之一,教学内容深入、细节具体,往往需要两门以上的配套课程才能使学生掌握。而在课程的实验及课程设计部分,相当的篇幅涉及电子学科的内容,使得没有前置知识的学生难以把握,加之市场上提供的RFID相关的实验设备都比较封闭,大多仅能完成验证性实验,学生无法顺利开展课程项目设计[1-2]。

为了满足实践教学,我们使用Arduino UNO作为开发平台、MFRC522作为阅读器,一个双轴按键摇杆JoyStick作为用户交互控制,实现了一套用于进行RFID应用开发课程设计的框架,以资源库的形式提供给学生,并在其上完成了一个校园一卡通系统业务的代码例程,用于支撑、指导学生完成课程项目开发,例如公交卡系统、门禁系统等。这套硬件平台及库资源可以以一门单独实验课程开设,约48~54学时,或以应用技术课程的综合实验出现。框架的全部源代码及配套的实验指导、文献都分享至GitHub:https://github.com/sketchpink/RFID.git。

1 设计思路

1.1 设计原则

本课程项目开发框架必须具有较强的复用性以满足不同的RFID应用场景。它应该可以满足典型的校园一卡通系统、公交卡系统、地铁计费卡系统、门禁系统等不同场景的需要。所以,要求系统中的各个模块具有清晰的接口,以及简明易用的整合方法以提高整个框架的复用性。

开发框架必须较少的引入其他商业设施,以方便教学。我们在希望构建应用系统时尽量少的引入其他商业化的软硬件,设计一个RFID应用系统“最小集”,从而将教学核心放在RFID技术本身。所以,开发框架中的控制主机的功能,例如数据存储,仅考虑在Arduino UNO的1K 大小的EEPROM上实现,同时,用户控制也仅考虑使用JoyStick摇杆的四个方向作为输入,从而完全脱离对开发端PC机上其他软硬件的依赖。也就是说,我们希望应用系统可以在接通5V电源的情况下即开始正常工作,PC机仅仅起到一个串口监视器的作用。

1.2 课程开发环境

Arduino官方提供的IDE环境仅仅由最基本的文本编辑器、编译器及烧录器构成。相较较为流行的IDE环境中所提供的代码高亮、代码自动补全以及重要的Debug工具等,Arduino IDE对于用户可谓并不友好。为了方便学生使用,我们设计在课程中采用学生熟悉的Visual Studio 2015并配合Visual Micro Arduino Plugin插件来完成课程设计的开发。

1.3 硬件开发平台

采用Arduino作为开发平台是考虑到计算机专业学生没有单片机等前置知识。Arduino作为一款非专业开发板,简化了嵌入式开发的准备工作,对于不熟悉电子的计算机专业学生非常友好。MFRC522阅读器通过SPI接口接入Arduino,选取这一款13.56MHz 的阅读器通过是考虑到ISO 14443高频协议是目前市场RFID应用场景最多的技术,便于学生利用身边常见的情景完成自己的项目设计。

2 功能定义

本课程项目开发框架所提供的功能可以分为四个部分:对ISO/IEC 14443协议的实现、对卡片的管理、对数据的管理、对用户交互控制支持,如表1所示。

3 框架实现

框架以C/C++作为开发语言,我们实现了以下类来描述并实现功能定义,如图1所示。DATA类描述了数据在Arduino EEPROM的存储方式,STORAGE类则负责对数据的所有存取改查操作;OPTION类完成了用户通过JoyStick完成菜单选取的功能,另一方面,CreateUI类负责格式化输出开发者自定义的菜单;MONEY类负责完成输入金额的字符串到数值之间的转换。在MFRC522上对ISO/IEC 14443协议的实现由RFID类完成,这个类引用自GitHub上的一个开源项目①。BUSINESS类及UI类则是针对校园一卡通这项应用场景所编写的业务类,它作为例程提供给学生使用框架的方法。学生可以通过这些类所组成的开发框架,自行修改、编写BUSINESS类来实现自己的RFID应用系统,或者也可以考虑以继承的方式获取BUSINESS中的卡片管理功能。所有的类定义及类实现文件都需要导入到$( Arduino)\libraries\RFID下才能被工程正常编译。

3.1 数据管理功能的实现

3.1.1 数据的存储位置

首先要确定不同数据的存储位置。对于一些初始化状态的信息,例如卡片基本信息,发卡单位,卡片状态等等,将其保存在系统中,构成一条卡片记录,而金额数据一般的做法是仅保存在卡片上,由加密系统保证这一金额不被随意改动。同时,考虑如何在卡片与系统之间建立绑定关系,我们让每一条记录都维护一个卡号字段,以表示当前记录所对应的卡片。同时,为了方便卡片在系统的中的标识及查询,我们额外创建一个索引字段,同时存放于系统与卡片之中,确定卡片归属于本系统管理。

为了尽可能不使用其他的数据库技术的情况下,我们采用Arduino UNO自身的一块EEPROM作为数据存储区域,它的大小为1KB,我们使用其一半的空间512B用于卡片记录的存储,另一半的空间留给开发者自行使用。EEPROM空间被划分为块为单位进行读写,每一块的大小为1字节,块号从0开始编址,即块0,块1,…,块511。Arduino为程序员提供了一个名为EEPROM的库来完成读写操作,它通过块号进行访问,这个库被定义在Arduino Library的EEPROM.h中。

3.1.2 记录块的结构设计

利用EEPROM保存卡片记录,记录块结构表如表2所示。这个结构由DATA类实现,并将这些字段设置为公有暴露给外部函数使用。

其中,设计index字段是这样考虑的:首先,index字段用于记录的索引,虽然卡号也具有唯一性,但是如果利用5字节的卡号进行索引,效率较为低下;第二,index字段同时兼具记录有效性标识的作用,我们要求index编号一定是一个大于0的整数,表示“第XX条记录”,一旦index值为0,则表示此条记录已经从系统中删去,所以在清除记录时,我们可以通过将该记录的index置为0来完成。所有的记录块以图2所示的方式排列在EEPROM中。

3.1.3 记录的存储管理

记录存储管理通过STORAGE类实现,它通过index完成对记录的新增、查询、修改,并且能够以块为单位管理EEPROM存储区。类中设置了一个用户查找EEPROM存储区的指针ptr,并设置了一个对DATA类实例的引用,用于操作来自阅读器的卡号、金额等数据。

3.1.4 数据存储结构的使用

DATA实现为一个结构,这样设计是为了便于RFID类相关操作函数直接使用,可以将DATA看做连接卡片数据与系统数据的桥梁。当有数据从卡片发到系统,一个Data对象将从RFID的对象接收这些数据,随后系统使用STORAGE类来对这个Data对象进行数据存储的相关操作。

3.2 用户交互控制的实现

本系统选取了一款常见的双轴按键摇杆JoyStick用于用户与系统的交互控制。我们设计让学生只允许构建这样的菜单:每一级菜单具有4中选项,分别对应up、down、left、right。当摇杆推向某一方向时,菜单被选中,执行相应功能或进入下一级菜单。例如,在框架提供的例程中,我们总是将down选项定义为“返回上一级菜单”功能。

我们实现OPTION类来完成JoyStick的用户输入。这里需要注意多级菜单的情况:多级菜单下,在推动的过程Arduino将检测到连续变化的模拟信号,会造成同一方向连续多次输入,所以业务逻辑要保证有弹回检测机制。

3.3 菜单的设计与实现

系统通过串口监视器向用户输出菜单与控制信息。我们提供了一个CreateUI类来规范菜单的样式,包括菜单上方及下方由连续若干个“*”构成的装饰行。这样做一方面是简化开发,生成统一美观的菜单,更重要的是,由于Arduino UNO的运行内存很小,如果所创建的界面包含若干级菜单,那么大量重复的符号常量将使程序的全局静态区占用过多的运行内存,造成运行时栈区空间不足,这将导致运行的不稳定甚至是错误。

3.4 金额处理

金额处理的主要工作时将用户通过串口输入字符转换为数值、将数值转换为字节流、缓冲区处理等功能,由MONEY类实现。

4 项目例程

为了指导学生正确使用课程开发框架,我们构建了一个校园一卡通系统例程,包括BUSINESS类、对应的UI菜单类以及相应的工程文件。

BUSINESS类实现了开卡管理、注销管理、查询、充值、消费等功能,并且实现了一个UI类来输出操作菜单。这一例程是利用框架完成的,学生可以通过这一例程了解开发框架的使用方式。它可以作为实践课程的引例为学生展示框架的功能,启发学生自行设计自己的RFID应用系统。

5 结束语

本文以构建RFID应用系统“最小集”的方式提供了一个课程设计开发框架。框架被设计为现在这样的形式出于多方面的考虑。第一是利用Arduino UNO作为开发平台保证了对嵌入式、单片机知识的简化;第二是尽可能少的引入例如数据库等商业化软件,使课程内容集中在RFID技术应用这一话题上;第三,框架将实现ISO 14443协议下阅读器读写机制的RFID类暴露给学生直接使用(而不是将其设计在看不到的底层),这区别于市场上封装的闭源的实验设备,可以帮助学生熟悉、掌握RFID协议流程及机制,最终达到理解技术原理,掌握实践应用的教学目标。

注释:本文所引用GitHub RFID开源项目可以从 https://github.com/miguelbalboa/rfid.git获得。

参考文献:

[1] 吴功宜.对物联网工程专业教学体系建设的思考[J].计算机教育,2010(21):26-29.

[2] 曹国平.应用型本科物联网专业 RFID 课程实践教学研究[J].计算机教育,2015(10):100-102.

猜你喜欢
实践教学
茶学专业校企合作实践教学探索
《电气工程毕业设计》 课程的教学设计
研究型学习在传热学实践教学中的应用
思想政治理论课实践教学研究述评
高职院校商务礼仪课程教学改革探索刍议