基于便携式RFID与Android智能终端实现家庭式仓储管理

基于便携式RFIDAndroid智能终端实现家庭式仓储管理RFID技术是一种非接触式自动识别技术,由电子标签读写器组成,具有信息容量大、保密性高、无需人工干预、识别效率高等优点。其与上层应用软件及后台数据库相结合,可实现物品管理、物品防伪、物品定位、身份识别等功能,被广泛使用于物流管理、交通运输、工业自动化等领域。
  在智能家居中,RFID主要用于门禁系统、人员定位[1]等。智能家居(Smart Home)是以住宅为平台,兼备建筑、网络通信、信息家电、设备自动化等功能,集系统、结构、服务、管理为一体的,体现高效、舒适、安全、便利、环保的居住环境[2].智能家居的核心功能是安防报警与智能控制。当前市场上的智能家居系统主要有基于楼宇对讲技术的智能家居系统、基于现场总线技术的家庭自动化系统和基于智能手机的智能家居系统三大类[3].主要的产品有:智能锁、监控设备、各类环境传感器、智能电动窗帘系统、家电控制等。国内智能家居行业起步较晚,智能家居产品存在系统复杂、价格昂贵、不切实际等问题。智能家居企业所销售的并不是产品,而是为特定的某部分人量身定做的一套完整的个性化服务,价格昂贵,是面向富人群体的消费,且系统设计复杂,产品也不够多元化。这将不利于智能家居的长期发展[4].
  因此,在当前客户个性化需求强烈的市场状况下,开发适合大众消费、操作方便的智能家居产品具有重要意义。本文基于便携式RFID与Android智能终端,是一款适用人群较广、操作方便的智能物品清点的移动应用系统,用于实现家庭式仓储管理。
  1相关技术
  1.1 RFID技术
  无线电射频识别RFID(Radio Frequency Identification)是一种利用无线电的自动识别技术。典型的RFID系统通常由电子标签、读写器、RFID中间件和应用系统软件组成[5].电子标签及读写器通过无线电天线进行通信,可读取标签中的物品ID信息,实现非接触识别,并能同时识别多个标签。电子标签具有一定的存储容量,能唯一标识物品,具有使用寿命长、可重复使用等优点。RFID中间件是读写器与应用系统软件的中介,管理着读写器及其读取的数据,并将数据交付给上层的应用软件(如数据库)。带无线通信功能(如蓝牙、WiFi)的RFID读写器将无线通信模块嵌入读写器中,上层软件通过无线通信信号获取电子标签信息,使得用户可以随时随地获取RFID标签信息,解决有线读写器不可移动的限制。
  RFID系统按其使用的无线电频率可分为低频RFID系统、高频RFID系统及超高频RFID系统。被广泛应用于门禁系统、身份识别、产品管理、集装箱管理、生产线自动化管理等领域。在识别距离方面,读写器的可识别范围与其制作工艺有关,比如天线设计、读写器功率设计等。一般的,低高频系统读写距离较小,在10 cm左右,高频标准ISO15693在降低传输速率、加大天线设计与读写功率的情况下,识别距离可达1 m;超高频在较大工作范围,能做到较快的传输速率,工作距离可达3 m~10 m,但是超高频电波受环境影响大,不能穿透许多材料,比如水、灰尘等。在实际应用中,需要考虑价格、读写距离、安全特性、存储信息量等因素,用于确定合适的频段及方案[6].
  1.2蓝牙技术
  蓝牙是一种低功耗、中短距离的无线通信技术,为移动设备之间提供快速、方便的无线通信连接,被广泛应用于手机中,其中蓝牙耳机是一个典型的应用。蓝牙通信规范是全球统一的,工作频段为全球统一开放的2.4 GHz频段,该频段的使用无需向各国的无线电资源管理部门申请许可证。不同的蓝牙设备通信时,可以建立临时性的实时对等连接。皮网(Piconet)是蓝牙最基本的一种网络形式,通常由一个主设备(即主动发起连接请求的蓝牙设备)和几个从设备组成,能同时实现一对多的通信[7].蓝牙技术的优点是:可以方便地建立无线连接;移植性强,适用面广;安全性较高;设备功耗低,成本较低;开发设计较简单。
  1.3安卓系统蓝牙编程
  蓝牙技术的开发核心是根据蓝牙标准所实现的蓝牙协议栈。该协议栈包含了众多协议,主要有逻辑链路控制和适配协议(L2CAP)、服务发现协议(SDP)、串口模拟协议(RFCOMM)等。其中SDP协议是一个基于C/S结构的协议,是蓝牙协议栈中的核心协议。在蓝牙系统中,用户依靠SDP获取建立蓝牙连接所需的设备信息、服务信息及服务特征[8].
  Android SDK从2.0版本开始支持蓝牙功能,应用程序必须在AndroidManifest.xml文件中加入一定的权限才能使用蓝牙服务:android.permission.BLUETOOTH权限允许用户连接蓝牙设备,android.permission.BLUETOOTH_ADMIN权限允许用户管理蓝牙硬件及使用相关服务,包括开启或关闭蓝牙硬件、扫描可连接蓝牙设备、传送数据等。相关的蓝牙API在android.bluetooth包中进行定义,包含以下几个主要类:
  (1)BluetoothAdapter类代表设备上的蓝牙硬件;
  (2)BluetoothDevice类定义远程蓝牙设备;
  (3)BluetoothServerSocket类用来打开监听到达连接的套接字,并且在连接后提供一个BluetoothSocket对象;
  (4)BluetoothSocket类用来建立同远程设备的连接,获取输入输出流。
  通过蓝牙进行数据传输的过程包括:
  (1)检查可用的蓝牙硬件。并不是所有Android终端都具有蓝牙功能,因此使用前需确定是否有可用的蓝牙硬件;
  (2)开启蓝牙;
  (3)查询已配对设备;
  (4)搜索设备;
  (5)建立设备间的连接;
  (6)数据交互;
  (7)关闭蓝牙硬件。
  当两个设备连接后,各自拥有一个BluetoothSocket对象,并获得用来读取信息的InputStream对象和发送信息的OutputStream对象[9].
  1.4 Android平台数据存储方式
  基于Android平台的数据存储方式分外部存储和内部存储两类。外部存储方式指:内容提供器和网络数据库,内部存储方式有:系统配置、文件存储、SQLite数据库[10].在实际应用开发中主要使用内部存储方式。系统配置方式指通过Android平台提供的SharedPreferences类,保存应用程序的一些简单的配置信息的机制。文件存储方式使用Java中的IO类实现对内部存储器或SD卡等外部存储设备中的文件的读写与解析,该方式实现数据插入与修改操作较复杂,每次操作都需读取整个文件,效率较低。SQLite是一款超轻量级的嵌入式数据库,支持SQL语句,能实现查询、插入、删除、修改等操作,具有小、安全、免费等特点。本文提到的系统所选择的数据存储方式便是SQLite数据库,对数据进行操作简单而快速。
                                
                                                                
                                
                  2系统概述
  在日常生活中,当家庭里物品被闲置一段时间后,会出现被遗忘的状况,而得不到再次使用;在外出需要携带较多物品时,常常在清点过后,依然会出现遗漏东西的状况。本系统的功能是帮助人们记录物品信息,能自动识别对物品进行清点,并显示清点结果(该步操作类似于仓库管理中的出库,对照出库清单清点出库物品是否有遗漏)。其系统结构如图1所示。
  


  图1 系统结构图
  首先根据物品的不同特性,准备好合适的RFID电子标签,贴或挂在物品上;使用带蓝牙通信功能的手机和便携式RFID读写器。当系统工作时,由读写器读取标签上的ID信息,通过蓝牙传给手机应用程序端;在应用程序上填写与标签ID对应的物品名称,并保存于本地的SQLite数据库中。登记完标签信息后,用户可根据每次不同需求,选中要清点的物品名称,通过RFID读写器的扫描后,便可完成对一定空间内的物品的清点。
  3软硬件设计及系统评价
  3.1软件设计
  软件开发所涉及模块有:物品RFID标签信息添加、物品信息删除、物品信息修改、物品选择、物品RFID标签清点扫描等。
  应用程序的工作流程如图2所示。
  


  图2 工作流程图
  应用程序在实现物品RFID标签信息添加及物品RFID标签清点扫描前,应首先打开蓝牙连接,搜索附近的蓝牙设备,然后选择与便携RFID读写器建立连接。在进行添加操作时,应用程序向读写器发送单标签扫描的命令,读写器返回标签的ID,用户输入物品名称后,应用程序将其录入数据库中并标注为未选中状态。
  在列出所有物品界面中,用户可对需要清点的物品进行选中或取消选中。当用户选中物品后,物品的状态属性(THING_STATUS)值为“1”,表示该物品将要被清点;否则为“0”,表示该物品已在数据库中登记,但暂时不需要清点。
  应用程序清点扫描物品时,向读写器发送防冲突识别(多标签识别)命令,读写器不断返回带标签ID信息的数据流。应用程序从数据流中提取出标签ID,并在数据库中查询其状态,若为“1”,则在已扫描列表中以系统默认字体颜色(灰色)显示其物品名称;若为“0”,则以其他非系统默认字体颜色(深灰色)显示物品名称。扫描个数是在扫描过程中实时显示已被读写器扫描到的、并进行登记过的标签个数。
  当识别完一定空间内的物品后,用户按下读写器上的停止识别按钮,读写器向应用程序发送停止识别的响应。应用程序接收后,在未扫描列表中输出已被选中未被扫描到的物品名称,扫描结果显示界面如图3所示。
  


  图3 扫描结果显示界面
  3.2硬件选择
  现如今,蓝牙通信在智能手机中是一种十分常见的功能。本系统开发选用Android 2.3版本系统的触屏手机,有蓝牙硬件模块,具备蓝牙通信功能,且自带SQLite数据库,无需用户安装。RFID读写器的选择要考虑读写距离不能太短,否则识别效率较低,容易扫描不全;价格应较适合大众消费;为了便于使用及携带,外形应小巧。因此选择带蓝牙通信功能的超高频读写器,读写距离20 cm左右,体积小,易于携带,如图4所示。当按下图中所示的扇形按钮“R”时,读写器开始或停止识别标签。
  


  图4 蓝牙便携式
                                
                                                                
                                
                  3.3系统评价
  目前该系统是一个独立的系统,能实现文中提到的功能。受读写器读写距离限制,进行清点扫描过程中需来回在电子标签中移动,以确保扫描结果的准确度。系统在未部署智能家居系统的场所中亦能使用。用户只需拥有具备蓝牙通信功能的Android终端及便携RFID读写器,即可实现物品清点工作,移动性强。所使用的电子标签,可贴或挂于物品上,使用方便。适用于家庭式仓储管理、外出或旅行的物品清点等个人日常或办公物品管理。
  当下手机已成为人们日常生活的一部分。智能手机为开发各种移动应用软件提供了很好的平台。关于RFID技术的研究倍受关注,RFID应用范围在摸索中越来越广。目前智能家居市场仍具有很大的发展空间及潜力。本文中的智能物品清点系统,作为智能家居的子系统将来可以:(1)通过无线通信技术,实现智能手机本地数据与智能家居系统中个人数据库的对接;(2)选用读写距离合适的读写器,增加包裹内物品防盗功能;(3)开发基于其他移动平台的应用程序,如IOS、windows phone等。

用户喜欢...

Android开发者选项之GPU过度绘制

GPU过度绘制定义 如果你粉刷过一个房间或一所房子,就会知道给墙壁涂上颜色需要做大量的工作。假如你还要重新粉刷一次的话,第二次粉刷的颜色会覆盖住第一次的颜色,第一次的颜色就...


饭店掀起智能化风潮 集智能建筑与家庭于一身

智能饭店一词应运而生,亦即在单一平台上,整合饭店内所有关于语音、数据、影像、及控制等传输讯号,让饭店所...


PowerVR让用户使用Android TV访问OTT(互联网内容)

一位智者曾经说过“未来的电视发展是一个难题”,这句话引用自我们之前的博客文章,我能够像我的前辈一样向大家清楚的描述这个问题,他去年曾也阅读过一篇文章“电视和机顶盒芯片组...


工业物联网趋势成形 制造业扩大投资

工业物联网是这一切转型的核心,制造业者透过它来实现工业4.0,结合条形码、RFID、穿戴式装置、自动化系统与其他...


Android Weekly #276 安卓开发周刊 中文版

您是否了解过Android的Lifecycle-Aware库?(android.jlelse.eu) 我们如何了解Lifecycle-Aware库代码? Nishant Srivastava展示了可以跟踪活动或Lifecycle-Aware的Lifecycle Arch组件的片段,并相应地调整其行为。 为Mos...


Android Weekly #275 安卓开发周刊 中文版

MapMe — Android地图适配器 (medium.com) Josh Burton介绍MapMe,是一个用Kotlin编写的Android库,可以将适配器模式带到地图上。 赞助 CloudRail - 连接到API 10x更快 (cloudrail.com) 当我们用单一的界面连接到所...


使用Android Studio开发可独立运行(runnable)混淆过的Jar程序

之前开发Java程序一直都是使用Eclipse 开发Jar程序,现在开发基本上都已经弃用Eclipse了,但是有时偶尔开发个小的Jar程序,还要切换回去好麻烦,刚好前几天有人问几个相关的问题,就顺便整...


Android Weekly #274 安卓开发周刊 中文版

探索Android Oreo上的别后执行限制(medium.com) 在这篇文章中,Joe Birch解释了关于Android Oreo在后台运行服务的变化。 non-Time领主的time – 第5部分 (blog.stylingandroid.com) Mark Allison继续分析JSR 310 date和...


Android Weekly #273 安卓开发周刊 中文版

开源你的Android代码(android.jlelse.eu) 通过您的开源Android代码,您将(希望地)为Android社区提供有价值的代码,收到建设性的反馈,并与您最初建立的内容进行协作从而使您的代码变得更好。这...


Android Weekly #272 安卓开发周刊 中文版

Android Dev 101:每个初学者都应该知道的一些做法() 看一些初学者或媒介等级开发人员(不要错过任何人)应该知道的一些做法,以便更好地摆脱Android框架。 99.9% crash free sessions (medium.com) Chr...


Android Weekly #271 安卓开发周刊 中文版

依赖注入检查(medium.com) 在本文中,MihályNagy引入了依赖注入检查,一种开源注释处理器,可帮助您解决一些出现在所有JSR 330 DI库中常见的问题。 使用Android Studio插件提高效率 (blog.mindorks.com...


Android Weekly #270 安卓开发周刊 中文版

带有RxJava2的SOLID Android分析 (medium.com) 在这篇文章中,Aris Papadopoulos将解释如何正确创建一个分析系统,同时遵循SOLID原则,并使用RxJava2来解决问题。 (blog.stylingandroid.com) Java中的编程时间很难...


Android内存泄漏思考

Android内存泄漏是一个经常要遇到的问题,程序在内存泄漏的时候很容易导致OOM的发生。那么如何查找内存泄漏和避免内存泄漏就是需要知晓的一个问题,首先我们需要知道一些基础知识。...


Android Weekly #269 安卓开发周刊 中文版

在Google上快速提出操作 () Wolfram Rittmeyer分享了开始在Google上快速创建操作所需的所有信息(为了家庭与助理)。 RxJava中的错误处理(rongi.github.io) 一旦开始编写RxJava代码,你就会意识到有些事...


Android Weekly #268 安卓开发周刊 中文版

Unity和Android - 连接点(android.jlelse.eu) Andreas Vourkos解释了使用Unity创建的Android应用程序的架构,以及如何使用WindowManager和不同类型的Windows来克服Unity 5.6发行版创建的问题。 Android上的蓝牙低功耗...


Android系统的安全设计与架构

一、安全策略 1、Android 的总体架构由5个主要层次上的组件构成,这5层是:Android应用层、Android框架层、Dalvik虚拟机层、用户空间原生代码层和Linux内核层。 2、安全边界,有时也会称为信任边...