《基于ARM平台的智能售货柜关键通信技术的实现》7600字_第1页
《基于ARM平台的智能售货柜关键通信技术的实现》7600字_第2页
《基于ARM平台的智能售货柜关键通信技术的实现》7600字_第3页
《基于ARM平台的智能售货柜关键通信技术的实现》7600字_第4页
《基于ARM平台的智能售货柜关键通信技术的实现》7600字_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

第一章引言1.1课题背景伴随着网络信息技术的快速发展与革新,自动售货柜向着网络化、智能化方向不断的发展,通过使用成熟的网络信息技术和网络互联设备[5],我们可以将许多台自动售货柜联网,在互联网上远程对自动售货柜进行集中的管理和监控,使自动售货柜的经营变得更加信息化、网络化、智能化,实现了对自动售货柜远程控制、售卖货物的信息的查询和反馈、故障和警报信息等处理,不仅节省了人力资源降低了管理的成本,还提升了管理效率。充分地发挥了网络的优势,并使用它来创造更大的经济效益。其中,自动售货柜在八九十年代的美国、日本和欧洲,自动售货柜已经应用于食品、饮料、快餐、香烟、公交、地铁、邮票、报纸,以及个人卫生用品等各个方面。作为一种先进前卫的商业零售模式,自动售货柜已在全世界近50个经济较发达的国家得到了迅速的发展和扩张。虽然自动售货柜在我国的起步较晚,一直到了上世纪90年代才在广东、上海开始慢慢出现,及其主要分别从日本、韩国等国家进口。到了现在,自动售货柜的在我国的发展已达到了数万台,其主要分布在北京、上海、广州、深圳以及我国沿海地区。由于自动售货柜的快捷灵活和24小时昼夜不断服务,深受当地人民的欢迎与喜爱。在繁华的商业街道、地铁和车站甚至都出现过集体排队购买的现象。在中国,自动售货柜具有广泛的发展和应用前途。但是由于我国目前的经济情况和美国、日本和欧洲发达国家相比还有很大一段的距离,我国现在的城市人口大约4亿多人,假如按照按平均500人就有一台自动售货柜的话,那么,中国的自动售货柜的潜在需求市场就要高达80万台。据相关资料的证,在天津,一台自动售货柜每天销售额平均为200元左右,而在大连平均为280元左右。如以每台自动售货柜每天销售额以200元来计算,全年通过自动售货柜销售额就可达到600亿元之多。自动售货柜的新颖的销售模式、巨大的市场潜力、商品的物美价廉等优点,都侧面说明了其拥有十分广阔发展前景。1.2国内外研究状况以目前的情况来说国内外传统的自动售货柜大部分都是基于单片机或者ARM7等结构相对来说比较简单的系统,不能够进行联网,而全新型的智能自动售货柜通过对4G网络、WiFi网络、FPGA的深入研究与应用,快速实现了自动售货柜网络化、智能化,[1]以及通过利用中心计算机来进行统一集中的远程管理,并且能够与支付宝微信等第三方工具网关直接进行支付[2]。1.3课题目的本设计目的在一开发一种低成本,智能化,适应多个不同的网络环境和远程控制为一体的智能售货柜。结合自动售货柜的发展趋势,本系统有以下几种优点:(1)联网优点即自动售货柜可以在wifi和4G网络俩者中根据在不同环境下选择不同的联网方式。(2)零售优势目前的超市人满为患,效率地下,而智能售货柜可以全天24小时自助服务,避免排队带来的拥堵情况。(3)支付优势传统的售货柜还在用纸币硬币进行支付,操作相当繁琐,找零也及其不方便,而智能自动售货柜可以用微信或支付宝进行第三方工具网关快速进行支付。第二章系统设计的总体方案2.1功能分析及说明本课题包含了自动售货柜、云端服务器和手机支付这三大部分,其中智能售货柜通过wifi和4G运营商网络的形式和云端服务器进行通信,一方面当有客户用手机进行扫码购物时,要监听并响应云端服务器的请求,进行开关门的动作,另一方面还要解析数据完成本地存储,当柜机遇到关门或者报警时,还要上发数据到云端服务器,总体框架如图2-1。2-12.2研究内容本课题研究内容包含了4G和wifi模块的联网选择和使用,对使用到的http协议、https保密协议及其通信机制的研究,以及基于json格式的数据收发流程的实现。对自动售货柜的远程控制系统,即对于http服务器的研究与搭建,对工作内容所需的开发环境的搭建、对整个系统功能测试环境的搭建和功能的测试。第三章硬件选型3.1NanopiNEO开发板NanoPiNEO是友善之臂公司为现在流行的物联网应用而设计的一款高性能低功耗的小体积嵌入式产品。其著名架构Cortex-A7四核处理能力完全能覆盖小型超低功耗嵌入式产品的各方面应用,完全可以替代高端的STM32产品系列,同时还兼具上位机的处理能力可谓集大成之作。在内存方面也延续友善之臂用料扎实的特点采用的是三星的256/512内存记忆颗粒。虽然这款产品只有40X40mm毫秒的大小,但却是麻雀虽小五脏俱全。USB接口,以太网口,还有串口以及具有无限扩展能力的GPIO针脚可谓功能齐全。因其超小的身材,和超强的软硬件扩展能力,使得NEO非常适合制作有趣的项目,以及物联网方面的应用。此开发板具有超强的拓展能力,其USB接口可以外接4G模块和wifi模块,以便自动售货柜在不同环境下联网方式的选择。3.2EC20的4G模块EC20模块是一款专门为M2M和IoT应用而设计的LTECat4无线通信模块,其采用LTE3GPPRel.11技术能够实现3G网络与4G网络之间的无缝隙切换。EC20核心电路接口由SIM卡接口、各状态信号接口以及通信接口等等组成。EC20支持接收分集技术,在终端设备上安装2个不同的蜂窝天线,从而实现优质可靠的无线连接。因为考虑到偏远地区没有wifi覆盖的情况下柜机联网与云端服务器进行通讯,所以选择了EC204G模块是合适的。3.3Wifi模块RTL8192CU产品是一款低功耗,高线性输出功率,符合IEEE802.11b/g/n支持IEEE802.11i安全协议,以及IEEE802.1le标准服务质量的300MUSB无线网卡,可以与其它符合该标准的无线设备互相联通,支持最新的64/128位WEP数据加密,支持WPA-PSK/WPA2-PSK,WPA/WPA2安全机制,无线传输速率高达300M,两发两收(2T2R),可适应不同的工作环境,使台式机或笔记本计算机用户以及其它需要实现无线联网的设备方便地接入无线网络。考虑到在wifi覆盖的区域使用wifi模块和云端服务器进行通讯有降低成本的优点,所以选择了此模块。第四章通信模块的应用设计本章搭建了开发环境,进行了4G模块EC20在Liunx下驱动移植和测试,并测试了wifi模块的功能,证明了4G或wifi进行联网通讯的可行性。4.1搭建开发环境本系统针对MCU搭建了FriendlyCore的开发环境,他是属于Linux系统的,并且是基于Ubuntucore所构建的系统,还兼容了Ubuntu的系统软件[6]。具体的方法如下面所述:先事先下载好固件,将TF卡插入读取器,用电源适配器给开发板通电连接上电脑,在Windows下可以使用烧写工具Win32DiskImager这个软件进行固件的烧写,之后在软件上面选择好TF卡的位置,选择要烧写的固件,点击Write按钮进行烧写,如下图4-1:

图4-1烧写完成之后如图4-2所示:

图4-2最后,将TF卡插入板子上的SD卡接口,使用USB转串口工具将板子的Debug串口和笔记本电脑上的的USB接口进行连接,打开串口终端xhell软件,将开发板通电进入系统。4.24G模块的移植应用4.2.1添加EC20设备的PID和VID首先检查好自己的内核版本,并且去查找可用的内核版本,选择和系统相匹配的,之后再然后安装[3],打开再进行解压,之后添加设备的PID和VID在[KERNEL]/drivers/usb/serial/option.c中,具体代码如下:staticconststructusb_device_idoption_ids[]={{USB_DEVICE(ox05C6,ox9215)},/*QuectelEC20*/之后还需要注释掉原来内核文件中已经存在EC20的USB驱动,防止有冲突。[KERNEL]/drivers/usb/serial/qcserial.c{USB_DEVICE(0xO5c6,Ox9215)},[KERNEL]/drivers/net/usb/qmi_wwan.c{ONI_GOBI_DEVICE(OxO5c6,Ox9215)},4.2.2添加零包处理因为USB协议的原因,还需要添加零包处理,具体的代码如下:structusb_device_descriptor*desc=&serial->dev->descriptor;urb->transfer_flags=URB_ZERO_PACKET;if(desc->idvendor==cpu_to_le16(0x05C6)&&desc->idProduct==cpu_to_le16(øx9215))urb->transfer_flags=URB_ZERO_PACKET;if(desc->idvendor==cpu_to_le16(Ox2C7C))urb->transfer_flags=URB_ZERO_PACKET;]4.2.3阻止模块接口被用作USB串行设备因为我使用的是GobiNet拨号,所以还需要防止这些模块接口被用来作USB串行设备[9],具体代码如下:if(serial->dev->descriptor.idVendor==cpu_to_le16(0x05C6)&&serial->dev->descriptor.idProduct==cpu_to_le16(øx9215)&&serial->interface->cur_altsetting->desc.bInterfaceNumber>=4)return-ENODEV;4.2.4睡眠重启因为当MCU进入暂停或者休眠模式的时侯,会有一些的USB主机控制器和USB集线器将会失去电源或者重新进行了设置,且当MCU退出这俩种模式之后,它们不能够恢复USB设备,所以我要添加以下语句启动重新设置恢复这个过程[4],具体代码如下:staticstructusb_serial_driveroption_1port_device={#ifdefCONFIG_PM.suspend=usb_wan_Suspend,.resume=usb_wWan_resume,#if1.reset_resume=usb_bwan_resume,};4.2.5修改内核配置Makemenuconfig,选择并且确认以下的几个选项:DeviceDrivers-〉USBSupport-〉USBSerialConvertersupport-〉USBdriverforGSMandCDMAmodems

选择为MDeviceDrivers-〉Networkdevicesupport-〉USBNetworkAdapters-〉GobiUSBNetdriverforQuectelmodule

选择为M编译完成了之后,把kerne了运行起来了之后,在设备的目录下就能看到了ttyUSB*设备了,此时说明了USBSerial的驱动已经完成。4.2.6添加GobiNet驱动并测试先将4G模块的源码放到Kernel中,GoniNet源码中的Makefile,直接将源码中的后缀文件.c和.h复制拷贝到上面说讲的目录中。makemenuconfig再进行添加Makefile文件中的目标和依赖。在【KERNEL】/drivers/net/usb/Makefile文件中添加以下几行代码:obj-y+=GobiNet.oGobiNet-objs:=GobiUSBNet.oQMIDevice.oQMI.o将编译后的映像在板子上跑起来看到设备下多了一个qcqmil:说明GobiNet驱动已经开始发生效果了。输入命令编译并且安装quectel-CM到/usr/bin/目录下面,之后创建udhcpcscript,输入quectel-CM&开始进行启动拨号,完成了之后ping一个百度的域名试试看,发现已经不断跳出返回的延迟信息,表示已经在工作了[8],如下图4-2-6所示:图4-2-64.3wifi模块的应用我所使用的是RTL8192CU这款的USBwifi,因为操作系统自带了无限网卡驱动,所以使用以下几个命令就可以连接上wifi[7]。(1)打开Wi-Fi$nmclirwifion(2)$nmclidevwifi扫描附近的Wi-Fi热点,如下图4-3-1所示:图4-3-1(3)$nmclidevwifi连接到指定的Wi-Fi,如"123"$nmclidevwificonnect"123"password"12345678",如下图4-3-2所示:图4-3-2第五章网络通信技术的实现

本章介绍了http传送协议,还引入了https保密协议保证自动收售货柜数据传输的安全性和机密性,以及柜机与远程服务器通信内容,libevent的服务侦,curl的数据上发和frp技术。5.1http协议上位机与用户服务器之前的通信协议包括了HTTP协议,上位机与用户服务器端需要遵守HTTP协议并使用它去确保在通讯过程中完成了安全、精准的通讯。它的特点如下所示:1、支持客户/服务器模式。支持基本认证和安全认证。2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。4、HTTP0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。5.2https保密协议HTTPS协议是由HTTP加上

TLS/SSL

协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。5.3柜机与远程服务器的通信内容目前,网络连接模式主要有两种模式,分别是B/S模式(浏览器/服务器模式)和C/S模式(客户端/服务器模式)。我使用的是C/S模式,C/S结构的优点是很多工作可以在客户端处理后再提交给服务器,能充分发挥客户端的处理能力。其中数据的处理运行在服务器端。在C/S体系结构中,数据应用包括客户端应用程序(前台程序)和数据库服务器程序(后台程序)这两个部分。其中,数据库服务器端程序也叫做应用服务器[10]。假如服务器程序被开启,那么服务器端就处于等待客户端程序发送请求的状态。当有客户在柜机进行扫码时,客户端通过wifi或者4G网络并向服务器端发送数据的请求。当服务器端收到此请求时,就会操作相关程序,并返回相关的结果,主要有以下五种情况:服务器发送接口给无人货架指令,打开柜门。服务器发送接口给无人货架指令,关闭柜门。货架发送给服务器指令,拿回/放回货物。货架发送给服务器指令,遇到故障报警。货架发送给服务器指令,关闭柜门。服务器发送接口给无人货架:参数名柜机状态类型说明openid打开柜门string微信或支付宝自动生成的openidopenid关闭柜门string开门时,传入的openid货架发送给服务器:参数名柜机状态类型说明openid关闭柜门string开门时,传入的openidlevel拿回/放回货物int哪一层重量发生变化weightint变化的重量typestring放回商品/取走商品alarm报警string报警上发返回参数:返回参数名类型说明codeint执行状态(0表示获取失败,1表示获取成功5.4柜机与远程服务器数据收发的设计5.4.1libevent和curl的移植(1)libevent的移植从官网上下载合适的版本,用tar命令解压,之后使用./configure进行配置,之后在用make命令编译,makeinstall进行安装。curl移植从官网上http://curl.se/dowmload/中下载合适的版本,用tar命令解压,之后使用./configure进行配置,之后在用make命令编译,makeinstall进行安装。5.4.2libevent柜机的服务侦听、Libevent网络库的特点是量级轻、性能高,它的优点是响应能力迅速、编程接口简单、效率高,可以扩展的方式高,可以反复使用的性能高。它是在编写优秀网络服务器的时候必须预备的模式[13]。利用libevent构建Web服务对客户端的数据请求进行响应的整个过程主要包括如下几个步骤:(1)初始化:初始化API以及相关的环境。之后再设置好服务器的ip地址和监听端口。创建http服务:在event_base上新建一个evhttp,将这个evhttp绑定到监听的ip和端口号。(3)设置http回调函数:使用evhttp_set_gencb设置httpsever的处理请求的回调函数。(4)启动httpsever:等待请求进入事件循环。具体代码如下:event_init();//创建一个http服务器结构:httpd=evhttp_start(httpd_option_listen,httpd_option_port);evhttp_set_timeout(httpd,httpd_option_timeout);//指定generic回调evhttp_set_gencb(httpd,httpd_handler,空);//循环处理eventsevent_dispatch();evhttp_free(httpd);}5.4.3curl柜机数据上发客户端采用curl语言来进行实现,做一些逻辑判断,检查输入信息是否合法,如果合法,将合法的信息通过HTTP协议,以字符串的形式传送到服务器端来做进一步处理[15]。通信步骤如下面所示:(1)curl通过网络连接向服务器端发出来自客户端的http请求;(2)依照相应的请求类型,服务器端会从数据中抽取所需要的数据,然后将其封装成SQL语句,最后,向数据库发出SQL语句的查询命令。(3)在服务器端程序从请求的数据中抽象数据并进行封装的过程中,有一部分的数据是以json的形式返回给客户端。(4)客户端程序获取来自服务器端的返回数据之后,将对其进行一系列的数据处理。其中实现代码为:向服务器发送http请求向服务器发送请求,等待服务器的响应res=curl_easy_perform(curl);if(res!=CURLE_OK){return1;}curl_easy_cleanup(curl);解析服务器返回的json字符串cJSON*root;root=cJSON_Parse(responseData.data);cJSON*result=cJSON_GetObjectItem(root,"result");if(result&&strcmp(result->valuestring,"ok")==0){printf("data:%s\n",responseData.data);return0;5.4.4json数据格式的解包打包我这里所使用的json数据处理工具是NSJSONSerialization[12],这是一款非常好用简单的的json解析与生成的工具,它不仅仅只是提供了json数据封包、还有提供了Json数据解包[11]。具体流程如下图5-4-4所示:图5-4-45.5frp技术frp是一个高性能的反向代理应用,它可以简单轻松的进行内网穿透,对外网提供各式各样服务,支持多种协议类型,因为云端服务器和自动售货柜处在两个不同网络环境,所以当他们想要互相访问的时候,这个时候外网的云端服务器无法单方面的访问内网的自动售货柜,所以这时候要用到内网穿透技术。5.5.1服务端(1)用tar命令解压好压缩包tar-zxvffrp_0.22.0_linux_arm.tar.gz(2)cd命令进入解压之后的文件夹cdfrp_0.22.0_linux_arm.tar.gz(3)因为使用外网的云端服务器作为服务端,可以删掉不用的客户端文件,使用rm指令删除。rm-ffrpcrm-ffrpc.ini(4)接下来用vi修改服务器的配置文件。vifrps.ini(5)[common]部分是必须要有的配置,其中bind_port可以自行进行设定的frp服务端端口,vhost_http_port也是可以自行设定的http访问端口。[common]bind_port=7000vhost_http_port=8080(6)保存好上面的几个配置之后,启动frp服务端./frps-c./frps.ini5.5.2客户端(1)客户端和服务端得到操作方法和过程是一样的tar-zxvffrp_0.22.0_linux_arm.tar.gzcdfrp_0.24.1_linux_amd64rm-ffrpsrm-ffrps.inivifrpc.ini(2)客户端的配置[common]server_addr=server_port=7000[ssh]type=tcplocal_ip=local_port=22remote_port=6000[nas]type=httplocal_port=5000custom_domains=[web]type=httplocal_port=80custom_domains=上面客户端配置和服务端是相互对应的。保存配置,运行frp客户端。./frpc-c./frpc.ini第六章测试与结果6.1启动服务端进入已经编写好的http_server目录,写Makefile,然后make,make之后生成了server文件,执行文件:./server,启动了服务之后,就如下图6-1所示:图6-16.2启动客户端进入已经编写好的libcurl/login/这个目录,执行:g++login.cppcJSON.cpp-ologin-lcurl,进行了编译,生成login文件之后,使用启动客户端的命令./login,客户端运行结果如下图6-2所示:图6-2而服务端响应结果,如下图6-3所示:图6-3第七章总结与展望7.1总结本课题对自动售货柜的研究的现状,对售货柜的开关门、报警和售货柜的远程通讯进行了研究,设计了一种通过无线WiFi信号和4G运营商通信的基于ARM和嵌入式http服务器的新型自动售货柜,经过不断的测试达到了我的初步预期。本文我的主要工作有以下几个方面:(1)分析了本课题的研究背景和意义,对售货柜的通信、嵌入式http服务器进行了充分的了解。(2)根据本课题研发的售货柜的几种特点,完成了各个模块以及其相关功能的了解,明白了自动售货柜的运行原理是什么样子的。(3)规定的自动售货柜进行通信的通信方法和通信协议,对自动售货柜进行了通信软件设计。(4)对ARM板子的熟悉和4G模块相

温馨提示

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

评论

0/150

提交评论