基于REST服务的最小物联网系统设计.docx
- 文档编号:11082406
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:31
- 大小:724.01KB
基于REST服务的最小物联网系统设计.docx
《基于REST服务的最小物联网系统设计.docx》由会员分享,可在线阅读,更多相关《基于REST服务的最小物联网系统设计.docx(31页珍藏版)》请在冰点文库上搜索。
基于REST服务的最小物联网系统设计
摘要
随着经济社会的日趋发展及科学技术水平的不断提高,人们对于便利生活的要求越来越高。
近年来,随着物联网领域稳步、缓慢地发展,物联网建设的网络环境已经逐渐成熟。
由于物联网系统是一个综合性的,包含了硬件、软件、网络等多学科交叉的系统。
对于物联网的研究和开发,已经成为一个个热门的话题。
本论文中介绍了以REST服务为核心、单片机、ARM开发板而辅助的物联网系统的结构组成及工作原理,提供了相应的软件代码及硬件结构。
首先研究了不同服务框架的区别,包括不同语言间开发的优势及劣势,之后重点以REST服务为核心构建系统。
本设计中,单片机与ARM开发板通过串口通信的方式实现通信,相互传输所需要的数据,ARM开发板将资源传于互联网上对应的接口,接口可以在互联网上被访问。
将ARM开发板获取过来的数据存储于MySQL数据,再以REST服务的方式共享数据,互联网上的其他设备便可以通过网络来访问这些设备。
系统分离了软件、硬件的耦合,不仅可以方便系统开发,也可以方便由不同的硬件替换相应的组成,使之更容易理解,同时可以实现更多设备的连接,以实现真正的物联。
本论文讨论的代码在GNU/Linux系统上开发,可在不同平台上开发及调度。
关键词:
物联网、REST服务、RESTful
Abstract
Withtheincreasingdevelopmentandscientificandtechnologicalleveloftheeconomyandsocietycontinuestoimprove,people’slivesmoreconvenientfortherequiredhigh.Inrecentyears,thefieldofInternetOfThingssteady,slowdevelopment,networkingandbuildingthenetworkenvironmenthasgraduallymatured.BecauseofInternetOfThingsisacomprehensivesystem,includinghardware,software,networks,andothermulti-disciplinarysystems.Thingsforresearchanddevelopment,hasbecomeonehottopic.
ThispaperdescribedtheInternetofThingssystem’sstructureandprincipleinRESTservicesasthecore,microcontrollerandARMdevelopmentboardasassisted,andprovidedtheappropriatesoftwarecodeandhardwarearchitecture.Firststudythedifferencesbetweentheservicesframework,includinglanguagedevelopmentamongdifferentstrengthsandweaknesses,thenfocustobuildRESTservicesystemasthecore.Inthisdesign,microcontrollercommunicatewithdevelopmentboardbyserialcommunication,mutualtransmissionofthedataneeded,ARMdevelopmentboardresourcesontheInternetpassthecorrespondinginterface,theinterfacecanbeaccessedontheInternet.TheARMdevelopmentboardtogetoverthedatastoredinMySQL,thentheRESTservicetosharedata,otherdevicesontheInternetwillbeabletoaccessthesedevicesthroughthenetwork.Separationofthecouplingsystemsoftware,hardware,andcannotonlyfacilitatethedevelopmentofthesystem,canalsobeeasilyreplacedbyacompositioncorrespondingtodifferenthardware,tomakeiteasiertounderstand,andcanconnectmoredevicestoachieverealobjectsassociated.
CodediscussedinthispaperontheGNU/Linuxsystemdevelopment,andschedulingcanbedevelopedondifferentplatforms.
Keywords:
IOT,RESTful,REST
1.绪论
1.1.选题背景
随着科技的发展,计算机电子技术迅猛发展,已经成为生活中不可缺少的部分。
目前人们绝大多数都是采用PC进行网络数据传送,但由于成本高,限制了应用的范围。
而嵌入式系统却越来越受到人们的青睐。
它采用嵌入式的微处理器,支持TCP/IP协议,它已成为网络发展新阶段的标志。
物联网是新一代信息技术的重要组成部分。
其英文名称是TheInternetofthings。
顾名思义,物联网的意思就是物物相连的互联网。
这有两层意思:
第一,物联网是建立在互联网之上的,是互联网的拓展和延伸;第二,其用户端扩展和延伸到了物品与物品之间,进行信息通信和交换。
物联网有如下特征:
首先,广泛应用了各种感知技术。
在物联网中部署了大量的多种传感器,每个传感器都能从外界采集信息,不同类的传感器捕获的信息不同。
而且获得的数据具有实时性,按照一定的规律来采集数据,不断更新数据。
其次,它是建立在互联网上的网络。
物联网技术的核心和基础仍是互联网,通过各种无线和有线网络与互联网结合起来,将物体的信息准确实时地传递出去,数据传输过程中必须适应各种网络协议。
还有,物联网本身也具有一种智能处理的能力,能够智能控制物体。
物联网从传感器中获得数据,然后进行分析,处理处有意义的数据,来适应不同用户的需求。
1.2.设计内容
设计主要是关于基于RESTful服务的网络服务构建,可采用有线网络、无线网络、手机GSM网络等与Internet相关,通过手机、电脑、移动设备等登录到网页可实现控制家电的上的,并可实时查看诸如温度等一些信息的基本内容。
硬件设计时,采用Arduino单片机系统,作为一个基于Atmega328芯片的最小系统,Arduino可以系统代码。
Arduino主要用于展示LED灯的控制,通过与RaspberryPI开发板相连来获取实时状态。
RaspberryPI作为一个ARM开发板,由于其运行的是Linux系统,在软件方面有着相对于其他开发板较好的支持,在这里是作为数据传输设备以用来进行模块分离。
软件设计时,由于一个物联网系统其核心是以网络为基础的,需要优先考虑网络方面的优化,学需要考虑数据库等的问题。
用户界面设计时,随着近来来平板、手机等移动设备的流行,在设计时不能再以桌面程序为核心,需要考虑不用设备之间的兼容性等问题,这里便以网页为核心作为显示。
而,随着云计算技术的流行,未来的物联网系统必然也会基于云计算技术构建。
作为一个可视化的网页来说,实时的状态显示等是较为重要,同时我们需要考虑的是用户体验。
1.3.设计的目的及其意义
设计以简化物联网系统为主,简化一个可扩展的最小的物联网系统,以简化系统的逻辑为起点,为广大的用户提供一个良好的了解物联网系统方面知识的框架。
1.4.国内外发展现状和趋势
物联网是建立在互联网技术之上的。
目前,我国物联网发展与全球同处于起步阶段,初步具备了一定的技术、产业和应用基础,呈现出良好的发展态势。
把单片机应用系统和Internet连接也已经是一种趋势。
目前无线通信网络已经覆盖各地,是实现“物联网”必不可少的设施,可以将安置在每个物品上的电子介质产生的数字信号通过无线网络传输出去。
“云计算”技术的运用,使数以亿计的各类物品的实时动态管理变得可能。
物联网技术的推广已经取得一定的成效。
在多方面已经开始应用,如远程抄表,电力行业,视频监控等等。
以及在物流领域和医疗领域也都日趋成熟,如物品存储及运输监测,远程医疗,个人的健康监护等。
除此之外在环境监控,楼宇节能,食品等方面也开展了广泛应用。
尽管在这些领域已经取得一些进展,但应认识到,物联网发展技术还存在一系列制约和瓶颈。
有几个方面可以表现出来:
核心技术与国外差距较大,集成服务能力不够,缺乏骨干企业,应用水平不高,信息安全存在隐患。
我们国家在PC架构领域还没有主动权,软件产品很少。
目前,计算环境正在向以网络为中心发展,有很多产品不必也windows兼容,因此,研究单片机系统接入网络,前途宽广。
2.系统总体设计方案
物联网的核心也就是网络服务,而网络服务在某种意义上来说,就是需要打造一个多平台的通信协议,在使机器、家电、设备等连上计算机网络。
基本的物联网系统,不仅能控制设备,还可以在远程查看状态。
而复杂的物联网系统可以让互联网上的设备之间实现互联与通信,也就是物联网的最终目标所在——使物体与物体之间的交互成为可能,不需要人为去干预。
系统采用的结构是:
Arduino+RaspberryPi+Laravel+JSON+RESTful+Ajax+Python+HighCharts,其框架图如下所示
系统框架图
Arduino与RaspberryPi通过串口通信的方式实现通信,相互传输所需要的数据,RaspberryPi将资源传于互联网上对应的接口,接口可以在互联网上被访问。
Laravel框架构架于服务器之上,将RaspberyPi获取过来的数据存储于MySQL数据,再以REST服务的方式共享数据,互联网上的其他设备便可以通过网络来访问这些设备。
Ajax用于将后台的数据以不需要刷新的方式传递到网站前台,通过HighCharts框架显示给终端用户。
2.1.硬件方案选择
2.2.单片机选择
Arduino
Arduino,是一个开放源代码的单芯片微电脑,它使用了AtmelAVR单片机,采用了基于开放源代码的软硬件平台,构建于开放源代码simpleI/O接口板,并且具有使用类似Java,C语言的Processing/Wiring开发环境。
Arduino开发板封装了常用的库到开发环境中,可以让用户在开发产品时,将主要注意力放置于所需要实现的功能上,而不是开发的过程中。
在为Arduino写串口程序时,我们只需要用Serial.begin(9600)以9600的速率初始化串口,而在往串口发送数据时,可以用Serial.write(‘1’)的方式向串口发送字串’1’。
51
单片机,又称微控制器,是把中央处理器、存储器、定时/计数器(Timer/Counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。
与应用在个人计算机中的通用型微处理器相比,它更强调自供应(不用外接硬件)和节约成本。
它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。
51单片机相较于Arduino开发板,不仅代码复杂,由于系统比较古老而不方便于快速开发。
2.3.软件方案选择
2.4.数据通讯方式选择
REST
REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征。
获得这些表征致使这些应用程序转变了其状态。
随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移。
SOAP
简单对象访问协议是交换数据的一种协议规范,使用在计算机网络Web服务中,交换带结构信息。
SOAP为了简化网页服务器从XML数据库中提取数据时,节省去格式化页面时间,以及不同应用程序之间按照HTTP通信协议,遵从XML格式执行资料互换,使其抽象于语言实现、平台和硬件。
2.5.数据通信格式选择
JSON
JSON是一种轻量级的数据交换格式。
易于人阅读和编写。
同时也易于机器解析和生成。
它基于JavaScriptProgrammingLanguage,StandardECMA-2623rdEdition-December1999的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。
这些特性使JSON成为理想的数据交换语言。
JSON相对于XML来说可以减少文件的大小,同时我们可以用于网站前端的数据通讯。
对于基于浏览器的客户端使用的web服务更倾向于使用JSON作为表述格式。
XML
可扩展标记语言,是一种标记语言。
标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。
如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。
XML是从标准通用标记语言(SGML)中简化修改出来的。
它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。
XML具有良好的可读性,有着较好的库支持,从Java语言到其他语言,如Linux系统上libxml等对XML的支持比较好。
2.6.网络服务方案选择
2.7.语言选择
PHPLaravel
PHP是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。
PHP的语法借鉴吸收了C语言、Java和Perl等流行计算机语言的特点,易于一般程序员学习。
PHP的主要目标是允许网络开发人员快速编写动态页面,但PHP也被用于其他很多领域。
Laravel
Laravel是一套简洁、优雅的PHPWeb开发框架。
它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
JavaSpring
Java
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言。
Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
Spring
Spring是一个开源框架,是为了解决企业应用程序开发复杂性。
Spring框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。
从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
由于相较于Java在web方面没有PHP来得快速、简单、有效,同时Laravel框架在某些方面如数据迁移、代码生成比Spring快,同时不需要依赖于开发环境,这里以Laravel作为框架,可以利用artisan工具等的强大驱动开发。
2.8.其它
2.9.数据通讯设备
RaspeberryPI
RaspberryPi是一款针对电脑业余爱好者、教师、小学生以及小型企业等用户的迷你电脑,预装Linux系统,体积仅信用卡大小,搭载ARM架构处理器,运算性能和智能手机相仿。
在接口方面,RaspberryPi提供了可供键鼠使用的USB接口,此外还有千兆以太网接口、SD卡扩展接口以及1个HDMI高清视频输出接口,可与显示器或者TV相连。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
它能运行主要的UNIX工具软件、应用程序和网络协议。
它支持32位和64位硬件。
Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
RaspberryPi相比于一般的ARM开发板来说,由于其本身搭载着Linux操作系统,可以用诸如Python、Ruby或Bash来执行脚本,而不是通过编译程序来运行,具有更高的开发效率。
2.10.辅助语言选择
Python
Python,是一种面向对象、直译式计算机程序设计语言,由GuidovanRossum于1989年底发明,第一个公开发行版发行于1991年。
Python语法简洁而清晰,具有丰富和强大的类库。
它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。
常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,速度要求非常高,就可以用C++重写。
Ruby
Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘开发,遵守GPL协议和RubyLicense。
Python相对于Ruby有着更好的跨平台能力,同时有理好的可读性,加之Ruby语言没有对串口通讯及Windows系统更好的支持。
2.11.串口通信模块
PySerial
PySerial封装了串口通讯模块,支持Linux、Windows、BSD(可能支持所有支持POSIX的操作系统),支持Jython(Java)和IconPython(.NETandMono).
在使用PySerial之后,我们只需要
ser=serial.Serial("/dev/ttyACM0",9600)
ser.write("1")
就可以向串口发送一个字符1。
2.12.网页通信
AjaxAJAX是由JesseJamesGaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。
系统主要用Ajax来实现实时温度显示,通过直接访问JSON数据的情况下,可以在不需要刷新页面的情况下直接读取数据。
2.13.数据可视化框架选择
HighCharts
Highcharts是一个用纯JavaScript编写的一个图表库,能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。
HighCharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表。
3.本地系统设计
3.1.硬件设计
RaspberryPi
RaspberryPi开发板在这里主要工作有:
与Arduino开发板,通过USB线连接。
可以直接运行DebianGNU/Linux系统,通过网线上网,并从服务器中读取数据,
通过Python语言接收、发送串口数据。
3.2.软件设计
在本地我们需要解决的问题可以如下描述,Arduino开发板从串口一直读取数据,RaspberryPi从URL中验证数据、解析数据,再将数据发送到串口,我们可以用下面的伪代码来描述:
arduino:
begin
repeat
wait(serial.open)
data:
=receive_data()
led_status:
=parse(data)
ifled_status
oped(led.id)
utilfalse
end
raspberrypi:
begin
repeat
json:
=get_data(url)
ifvalidate(json).success()
data:
=parse(json)
serial.write(data)
utilfalse
end
Arduino
Arduino开发板
ArduinoUNO用的处微控制器是Atmega328,它与Arduino芯片的对应关系如下所示
Arduino管脚Atmega328对应图
其主要参数如下所示:
高性能,低功耗的AVR®8位微控制器•先进的RISC结构
131条指令
绝大多数为单时钟周期执行
32个通用工作寄存器
全静态工作
高达20MIPS的吞吐量,在20MHz
片上2周期乘法器高耐用性非易失性内存段
8K字节的系统内可编程Flash存储器(ATMEGA88PA中)
512字节的EEPROM(ATMEGA88PA)
1K字节的片内SRAM(ATMEGA88PA)
写/擦除次数:
10,000次,000EEPROM
数据保存:
20年在85°C/100年在25°C
(1)
可选的引导具有独立锁定位代码段在系统编程的片上引导程序真正的同时读
写操作
编程软件安全锁外设特点
两个8位定时器/计数器具有独立预分频器和比较模式
1个16位定时器/计数器具有独立预分频器,比较模式,并捕获模式
具有独立振荡器的实时计数器
6个PWM通道
8通道10位ADC在TQFP和QFN/MLF封装温度测量
6通道10位ADC引脚PDIP封装温度测量
可编程的串行USART
主/从机模式的SPI串行接口
面向字节的两线串行接口(飞利浦公司的I2C兼容)
独立的片内振荡器的可编程看门狗定时器
片上模拟比较器
中断和唤醒引脚电平变化单片机的特殊功能
上电复位以及可编程的掉电检测
内部校准振荡器
外部和内部中断源
6种睡眠模式:
空闲模式,ADC噪声抑制,省电,掉电,待机,扩展Standby
Arduino部分硬件程序如下所示,主要负责从串口中读入数据,并用led灯显示。
程序流程图如下所示
Arduino程序流程图
系统主要的功能在于接收和传递数据。
代码如下所示
voidsetup(){
Serial.begin(9600);
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
}
intserialData;
voidloop(){
StringinString="";
while(Serial.available()>0)
{
intinChar=Serial.read();
if(isDigit(inChar)){
inString+=(char)inChar;
}
serialData=inString.toInt();
Serial.print(serialData);
}
if(serialData==1){
digitalWrite(12,LOW);
digitalWrite(13,HIGH);
}else{
digitalWrite(13,LOW);
digit
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 REST 服务 最小 联网 系统 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)