根据树莓派的温度采集存储显示系统_第1页
根据树莓派的温度采集存储显示系统_第2页
根据树莓派的温度采集存储显示系统_第3页
根据树莓派的温度采集存储显示系统_第4页
根据树莓派的温度采集存储显示系统_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

《嵌入式综合实践》设计报告设计题目:基于RaspberryPiB+的温度采集、存储、显示系统感谢阅读班级:信息工程2012-04班姓名:陈岩学号:04121471姓名:陈灿坚学号:04121470姓名:郭镭斌学号:04121474姓名:刘杨学号:04121494指导教师:李健时间:2015年6月目录一、 设计任务 3二、 设计方案 3三、设计原理及内容 5(一)树莓派初始配置 5(二)数据的采集 13(三)数据的存储 15(五)数据的显示 20(六)数据的修改 26(七)新浪云端应用申请创建 27(八)数据上传与云端接收 30(九)本地和云端数据库实现同步删除与修改 33(十)互联网显示数据折线图 34(十一)Android客户端 38四、设计成果 40五、设计总结 41六、参考文献 43附录1:实践日志: 44附录2:源程序,见文件夹 51一、设计任务开发一套基于树莓派2、及DS18B20温度传感器的信息采集存储显示系统,相关参数要求如下:谢谢阅读1.在Linux下每隔30秒自动采集一次温湿度信号;感谢阅读2.使用数据库MySQL在本地存储8个小时的温度信号;谢谢阅读3.使用新浪云的MySQL数据库存储温湿度信号;感谢阅读4.编写客户端(PC或Android与网页形式)访问数据库实现读取数据、删除数据等操作,并以曲线表方式显示。感谢阅读二、设计方案系统整体框图如图2-1所示互联网Android终端用户PCDS18B20路由器…………网线树莓派图2-1系统硬件框图为实现项目设计要求,本次设计采用Python、PHP、MySQL、Apache2、HTML等相关软件及编程语言进行开发。感谢阅读开发硬件要求:树莓派B+板一块、DS18B20温度传感器及驱动板一块、网线一根、路由器一个、电源设备。感谢阅读软件及编程要求:Python语言、PHP编程语言、Apache2、MySQL语言、MySQL数据库、新浪云SAE环境,HTML。感谢阅读本系统采用主要采用Python语言编写,对DS18B20温度传感器进行读取并感谢阅读写入本地MySQL数据库和新浪云数据库。另外在本地利用Python语言编写客户端对本地数据库进行读取并以折线图形式绘制出温度记录变化趋势图。利用PHP语言结合LAMP(Linux+Apache+MySQL+PHP/Python)环境实现对本地数据库内的记录进行显示数值显示与修改删除等操作。另外,在新浪云端利用PHP语言编写程序对本地上传数据进行存储,并结合HTML技术实现数据的显示操作,在最终为方便远程显示,结合Android客户端,实现对新浪云应用网页的固定显示,达到观察温度数据变化的目的。谢谢阅读软件实现框图如图2-2所示。Python语言本地MySQL数据库Python客户端读取温度数据折线显示数PHP网页数值显据新浪云PHP指令示、修改、删除接收指令新浪云PHP语言新浪云PHP网页折线图接收温度数据MySQL数据库显示AndroidHTML+JavascriptWebView控件图2-2软件实现框图三、设计原理及内容(一)树莓派初始配置1.系统下载登陆/downloads/,点击DOWNLOADS,下载树莓派的系统。解压系统下载完成后,将得到的压缩文件进行解压,得到名为“win32diskimager感谢阅读(镜像写U盘工具)”的文件夹。烧写系统开“win32diskmigager(镜像写U盘工具)”文件夹,找到Win32DiskImager.exe可执行文件,双击运行。感谢阅读说明:此处最好采用完全版,网上有部分仅有.exe文件,无法使用。谢谢阅读选择刚下载的镜像文件,病选择目标内存卡,点击“写”按钮,等待烧写完成。精品文档放心下载硬件搭建SD卡插入树莓派卡槽,连接网线至路由器接口,并给电源供电。感谢阅读查看树莓派IP地址:通过路由管理器查看名为raspberry的IP地址。精品文档放心下载绑定树莓派的MAC地址和IP。Putty配置首次登陆需要用SSH,双击“putty.exe”文件,在弹出的对话框中输入主机IP地址:10。精品文档放心下载7. 安装远程桌面在命令窗口中loginas:后输入pi,输入密码:raspberry。精品文档放心下载输入sudoapt-getinstallxrdp,安装远程桌面。感谢阅读设置root用户及密码sudopasswd远程登陆1)利用Windows搜索运行“远程桌面”。2)在弹出的对话框中输入计算机IP地址,即树莓派IP地址:10,点击“连接”。精品文档放心下载3)输入username:root,password:********,点击“OK”按钮,出现如下图所示的界面,随后进入到树莓派的远程桌面。精品文档放心下载使用SD卡剩余空间方法一:8GBmicroSD在Windows下使用Win32DiskImager下载映像后,在RPi中只感谢阅读能识别出2.9GB,如下图所示。通过下面11条命令剩余的空间还原出来:命令解释:查看当前磁盘大小,总大小只有2.9GB②查看第二分区的起始地址,后面会用到③使用fdisk操作磁盘④d,删除分区⑤2,删除第二分区⑥创建一个新分区⑦创建主分区⑧分区2⑨输入第一次得到的第二分区起始扇区⑩最后一个sector,默认即可⑪将上面的操作写入分区表设置完成需要重启,sudoreboot。重启完成,使用df-h查看发现空间并没有增大,还需要输入resize2fs感谢阅读/dev/mmcblk0p2。等待一会儿操作完成,再次使用df-h查看发现空间已变大成7.2GB。精品文档放心下载方法二:输入命令raspi-config,选择第一项,回车确认。感谢阅读配置服务器环境(1)安装ApacheApache可以用下面的命令来安装:sudoapt-getinstallapache2谢谢阅读Apache默认路径是/var/www/,其配置文件路径为:/etc/apache2/。重启服精品文档放心下载务生效:sudoserviceapache2restart。感谢阅读(2)安装mysqlsudoapt-getinstallmysql-server感谢阅读安装过程中,会出现一个提示符让你输入一个密码,这个密码是mysqlroot用户的密码。精品文档放心下载(3)安装PHP输入下面的命令,就可以安装PHP5,以及PHP访问mysql数据库所需要的库。谢谢阅读sudoapt-getinstallphp5sudoapt-getinstallphp5-mysql谢谢阅读(4)测试装完成后,可以在连接到树莓派所在局域网的其他电脑或手机的浏览器中输入树莓派的IP地址,就可以访问网站了。此时能看到一个页面显示“Itworks”,但是没有其它内容。谢谢阅读创建一个/var/www/index.php。(二)数据的采集由于树莓派操作系统Dccidentalis和2012年12月以后Raspbian系统已经能够支持DS18B20单总线(1-wire)温度传感器。DS18B20温度传感器是由半导体包装的头和三个引脚组成的一种精确的数字设备。精品文档放心下载硬件部分温湿度传感器的硬件部分包括:树莓派开发板,DS18B20传感器,杜邦线3精品文档放心下载根。接线:VCC接5V的GPIO接口GND接GND的GPIO接口DQ接GPIO18的GPIO接口软件部分:本次项目设计选用Python语言操作GPIO口,可简化程序结构,方便后面的数据存储显示以及程数据的上传功能的实(1)修改Config.txt配置文件:谢谢阅读由于升级后的内核,为防止GPIO冲突,使用了新的dt策略,可能找不到28-精品文档放心下载***文件夹,所以通过修改 Config.txt配置文件解决这个问题,修改如下:精品文档放心下载boot/config.txt配置文件的最后添加:dtoverlay=w1-gpio-pullup,gpiopin=18(根据谢谢阅读自己实际接的管脚而定)。(2)安装单总线驱动:/timofurrer/w1thermsensor网站下载单总线设备驱动压缩包并解压(在Linux下可用unzip命令解压zip压缩包)安装。谢谢阅读(3)升级内核(如果已经升级过可直接逃过此步):apt-getupdataapt-getupgrade(4)确认设备生效:生效后可找到28-*****的文件夹精品文档放心下载sudomodprobew1-gpiosudomodprobew1-thermcd/sys/bus/w1/devices/ls(5)查看当前温度:cd28-****(此为ls查看的文件夹,各个DS18B20设备有自己的设备号)感谢阅读catw1_slave(t/1000即为当前温度值)感谢阅读(6)测试成功后,编写连续监测程序,采用Python语言操作GPIO:感谢阅读importglobimporttimedevice_folder=glob.glob('/sys/bus/w1/devices/'+'28*')[0]device_file=device_folder+'/w1_slave'defread_temp():感谢阅读f=open(device_file,'r')感谢阅读lines=f.readlines()f.close()equals=lines[1].find('t=')谢谢阅读temp_string=lines[1][equals+2:]谢谢阅读temperature=float(temp_string)/1000.0精品文档放心下载returntemperaturewhileTrue:print(‘Currenttemperature:%.2f’%read_temp())感谢阅读time.sleep(1)(三)数据的存储1.MySQL简介(1)数据在数据库中的存储方式:表中的一行称之为一条记录,表中的一条记录对应一个对象的数据。感谢阅读(2)常用操作的实现1)数据库操作创建数据库:createdatabase[ifnotexeits]db_name查看、删除数据库:谢谢阅读显示数据库语句:showdatabases显示数据库创建语句:showcreatedatabasesdb_name精品文档放心下载数据库删除语句:dropdatebase[ifexeits]db_name感谢阅读修改、备份、回复数据库:alterdatabase[ifnotexeits]db_name2)表操作精品文档放心下载创建表:creattabletable_name(field1datatype,field2datatype,field3datatype),其中,field指定列名,datatype指定列类型。谢谢阅读修改表:使用altertable语句追加、修改或删除列。感谢阅读3)数据库CRUD语句Insert语句(增加数据):使用insert语句向表中插入数据。感谢阅读insertintotable[(column[,column…])] values(value[,value])感谢阅读Update语句(更新数据):使用update语句修改表中数据。谢谢阅读UPDATEtb1_nameSETcol_name1=expr1[,col_name2=expr2...]谢谢阅读[WHEREwhere_definition]UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。感谢阅读如果没有WHERE子句,则更新所有的行。Delete语句(删除数据):使用delete语句删除表中数据。精品文档放心下载deletefromtb1_name[WHEREwhere_definition]感谢阅读Select语句(查找数据):select[distinct]*|{column1,column2,column3…}from感谢阅读table具体实现总体方案:在数据存储方面,为了保持数据的连续更新,且选定存储8个小时的温度数据内容,并方便后面显示绘图与数据的修改功能,将数据表创建为以下格式:分三列id、time、temp。分别存放序号、时间和温度,其中序号由自己指定,本项目中由于温度需30s采集一次,连续采集8小时数据,故最多可保持960条数据记录,所以将id设为从1-960,并置为索引,可自由修改,属性设置为INT型即可;time内容由系统自动存入,类型设为TIMESTAMP;temp就存储读取的温度数据。感谢阅读数据更新方案:数据库能够将编号、采集时间(由系统自行写入)和温度值保存成一条纪录,共能存储8个小时的温度信息,即960条记录,编号从1到960。再采集到新的温度值,编号设为961,并存入到表中。再将编号为1的记录用delete语句删除,最后将所有记录的编号减一,这样便实现了数据的更新,类似于DSP中的滑窗形式存储数据,原理如图数据记录更新原理图。精品文档放心下载图数据记录更新原理图(1)登陆数据库:在终端输入命令行:mysql -uroot -p;(-p表示输入的密码不显示出来),精品文档放心下载Enterpassword后面输入密码便可登陆到数据库。查看已有数据库:精品文档放心下载输入showdatabases命令可以看到如下图所示的三个默认的数据库。精品文档放心下载(2)创建新的数据库:输入命令行:creat

databases

temperature;创建名为temperature的数据库,输入:show如下图:精品文档放心下载

databases;可以查看,界面(3)修改数据库格式:usetemperature;///更改当前要操作的数据库精品文档放心下载createtabletable1(idINT,timetimestampdefaultcurrent_timestamp,tempdouble);感谢阅读//创建表,并指定各列属性showtables; //查看创建的表insertintotable1(id,temp)values(1,23.57);//插入一条记录select*fromtable1;//查看表中所有记录感谢阅读如果上面建表是仅指定time属性为timestamp,在这里要执行一次指令:谢谢阅读ALTERTABLEtable1MODIFYtimeTIMESTAMPDEFAULTCURRENT_TIMESTAMP;谢谢阅读这样可防止后面更新数据时时间数据跟着发生变化。(4)利用Python操作数据库进行数据存储在利用Python语言进行数据库的操作需要安装MySQLdb模块并在程序中导入才能够对数据库进行操作。Python下的Mysql模块MySQLdb安装按照如下步骤进行:谢谢阅读在下载安装MySQLdb之前需下载安装setuptools步骤如下感谢阅读1.下载:在它的官网可以下载到安装包:/pypi/setuptools谢谢阅读2.安装$tar-zxvfsetuptools-0.6c11.tar.gz谢谢阅读$cdsetuptools-0.6c11$pythonsetup.pyinstall之后可以安装MySQLdb模块①下载MySQLforPython安装1.2.3版本,下载地址为:/projects/mysql-感谢阅读python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz感谢阅读②解压,一般树莓派下载下的文件放在Downloads文件夹下,因此需进入其中操作感谢阅读$cdDownloads$tarzxvfMySQL-python-1.2.3.tar.gz谢谢阅读③安装$cdMySQL-python-1.2.3$pythonsetup.pybuild$pythonsetup.pyinstall注:正常情况下在执行:pythonsetup.pybuild会遇到以下错误:谢谢阅读EnvironmentError:mysql_confignotfound精品文档放心下载在这里是因为未找到mysql_config文件位置,这是因为直接使用指令感谢阅读apt-getinstallmysql-server安装的MySQL不算完整。在这里可按照下面步骤:谢谢阅读$sudoapt-getinstalllibmysqlclient-dev 之后查找mysql_config的位置,使用谢谢阅读find/-namemysql_config 这里我们的系统中该文件路径为:谢谢阅读/usr/bin/mysql_config修改setup_posix.py文件,在26行:感谢阅读mysql_config.path=“mysql_config”修改为:感谢阅读mysql_config.path=“/usr/bin/mysql_config”感谢阅读保存后,然后再次执行:pythonsetup.pybuildpythonsetup.pyinstall这样就完成了MySQLdb模块的安装。完成之后即可利用Python语言程序对数据库进行相关操作,在这一部分我们仅需要数据的存储,在这里需要用到数据插入与数据的删除与更新。谢谢阅读db=MySQLdb.connect("localhost","root","041471","temperature")//链接数据库感谢阅读cursor=db.cursor() //获取游标cursor.execute("showtables")精品文档放心下载cursor.execute("select*fromtable1")//选取表感谢阅读value=read_temp() //读取温度数据感谢阅读sql='insertintotable1(id,temp)values(961,%.2f)'%value//生成插入指令cursor.execute(sql)//执行指令谢谢阅读mit()//确认指令执行,执行指令之后必须有cursor.execute("updatetable1setid=id-1")//更新记录,所有id-1精品文档放心下载mit()db.close() //关闭数据库time.sleep(15) //延时(五)数据的显示本项目设计中本地数据显示部分主要利用Python的Tkinter()库进行绘制折线图,Tkinter是Python自带的一款GUI界面编写库,不需要额外下载,就可以实现简单的UI界面显示操作,Python与Tkinter的结合提供了一个快速和容易的方法来创建GUI应用程序。Tkinter的提供了一个强大的面向对象的接口Tk的GUI工具包。另外数据显示需要先对数据库中的数据进行读取。感谢阅读Python查询MySQL数据(1)方法概述:精品文档放心下载Python查询Mysql使用fetchone()方法获取单条数据,使用fetchall()方法获取多条数据。感谢阅读fetchone():该方法获取下一个查询结果集。结果集是一个对象。谢谢阅读fetchall():接收全部的返回结果行.。rowcount:这是一个只读属性,并返回执行execute()方法后影响的行数。(2)所用代码:感谢阅读打开数据库连接db=MySQLdb.connect("localhost","testuser","test123","TESTDB")谢谢阅读使用cursor()方法获取操作游标cursor=db.cursor()SQL查询语句sql="SELECT*FROMtb_name谢谢阅读执行SQL语句cursor.execute(sql)获取所有记录列表results=cursor.fetchall()感谢阅读forrowinresults:id=row[0]time=row[1]temp=row[2]关闭数据库连接db.close()本地显示客户端编写1)Tkinter简介为简化并优化系统,在本地折线显示温度记录采用Python编写客户端方式,主要基于PythonTkinterUI编写库,实现对温度记录的读取与显示。PythonTkinter用法谢谢阅读使用Tkinter创建一个GUI应用程序步骤如下:谢谢阅读导入Tkinter模块创建GUI应用程序的主窗口添加上述部件之一或更多的GUI应用程序进入主事件循环的由用户触发每个事件响应本次使用Tkinter主要目的是构建一个温度读取显示界面,要求为折线显示,故最好选择能够绘制线段的模块。感谢阅读Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为部件。感谢阅读目前有15种Tkinter的部件,具体描述见表3-1。感谢阅读表3-1 Tkinter部件简介Operator DescriptionButton TheButtonwidgetisusedtodisplaybuttonsinyourapplication.谢谢阅读Canvas TheCanvaswidgetisusedtodrawshapes,suchaslines,ovals,polygons,andrectangles,inyourapplication.谢谢阅读Checkbutton TheCheckbuttonwidgetisusedtodisplayanumberofoptionsascheckboxes.Theusercanselectmultipleoptionsatatime.精品文档放心下载Entry TheEntrywidgetisusedtodisplayasingle-linetextfieldforacceptingvaluesfromauser.感谢阅读Frame TheFramewidgetisusedasacontainerwidgettoorganizeotherwidgets.谢谢阅读Label TheLabelwidgetisusedtoprovideasingle-linecaptionforotherwidgets.Itcanalsocontainimages.谢谢阅读Listbox TheListboxwidgetisusedtoprovidealistofoptions谢谢阅读toauser.Menubutton TheMenubuttonwidgetisusedtodisplaymenusinyourapplication.精品文档放心下载Menu TheMenuwidgetisusedtoprovidevariouscommandstoauser.ThesecommandsarecontainedinsideMenubutton.精品文档放心下载Message TheMessagewidgetisusedtodisplaymultilinetextfieldsforacceptingvaluesfromauser.精品文档放心下载Radiobutton TheRadiobuttonwidgetisusedtodisplayanumberofoptionsasradiobuttons.Theusercanselectonlyoneoptionatatime.感谢阅读Scale TheScalewidgetisusedtoprovideasliderwidget.谢谢阅读Scrollbar TheScrollbarwidgetisusedtoaddscrollingcapabilitytovariouswidgets,suchaslistboxes.谢谢阅读Text TheTextwidgetisusedtodisplaytextinmultiplelines.谢谢阅读Toplevel TheToplevelwidgetisusedtoprovideaseparatewindowcontainer.感谢阅读Spinbox TheSpinboxwidgetisavariantofthestandardTkinterEntrywidget,whichcanbeusedtoselectfromafixednumberofvalues.感谢阅读PanedWindow APanedWindowisacontainerwidgetthatmaycontainanynumberofpanes,arrangedhorizontallyorvertically.精品文档放心下载LabelFrame Alabelframeisasimplecontainerwidget.Itsprimarypurposeistoactasaspacerorcontainerforcomplexwindowlayouts.感谢阅读tkMessageBox Thismoduleisusedtodisplaymessageboxesinyourapplications.精品文档放心下载另外Tkinter有一些基本的属性,如大小、颜色、背景等,如Dimensions、Colors、Fonts、Anchors、Reliefstyles、Bitmaps、Cursors等。谢谢阅读在GUI界面制作过程中还必须注意的一点是界面的布局问题,界面的布局直接影响一个GUI界面的直观效果,在Tkinter中布局有以下几种方法:谢谢阅读①pack布局这种布局极为简单直接使用pack函数即可,但这种布局仅具有顺序性,且布局不固定,对美化来说不好操作,不够灵活。谢谢阅读使用pack函数的时候,默认先使用的放到上面,然后依次向下排,它会给我们的组件一个自认为合适的位置和大小,这是默认方式,也是我们上面一直采用的方式。pack函数也可以接受几个参数:感谢阅读side参数指定了它停靠在哪个方向,可以为LEFT,TOP,RIGHT,BOTTOM,分别代表左,上,右,下;谢谢阅读fill参数可以是X,Y,BOTH和NONE,即在水平方向填充,竖直方向填充,水平和竖直方向填充和不填充;感谢阅读expand参数可以是YES和NO,它的anchor参数可以是N,E,S,W(这里的NESW分别表示北东南西,这里分别表示上右下左)以及他们的组合或者是CENTER(表示中间);精品文档放心下载ipadx表示的是内边距的x方向,它的ipady表示的是内边距的y方向,padx表示的是外边距的x方向,pady表示的是外边距的y方向。精品文档放心下载②grid布局grid可以理解为网格,或者表格,它可以把界面设置为几行几列的网格,我们在网格里插入我们想要的元素。这种布局的好处是不管我们如何拖动窗口,相对位置是不会变化的,而且这种布局也谢谢阅读由于我们的程序大多数都是矩形,因此特别适合于网格布局,也就是grid布局。使用grid布局的时候,我们使用grid函数,在里面指定两个参数,用row表示行,用column表示列,其中值得注意的是row和column的编号都从0开始。grid函数还有个sticky参数,它可以用N,E,S,W表示上右下左,它决定了这个组件是从哪个方向开始的,下面的例子可以很好的解释这一点。grid布局直接用后面的行和列的数字来指定了它位于哪个位置,而不必使用其他参数。.grid函数也支持诸如ipadx,ipady,padx,pady,它们的意思和pack函数是一样的,默认边距是0。它还支持参数比如rowspan,表示跨越的行数,columnspan表示跨越的列数。精品文档放心下载③place布局它直接使用死板的位置坐标来布局,这样做的最大的问题在于当我们向窗口添加一个新部件的时候,又得重新测一遍数据,且我们不能随便地变大或者缩小窗口,否则,可能会导致混乱。Place布局较为复杂,不容易理解。感谢阅读2)界面编写在本次设计中为方便灵活布局,采用grid布局形式对界面进行布局操作。谢谢阅读界面布局包含图形显示及数值显示两部分内容。图形显示:使用Tkinter中的Canvas空间生成画布,并在此基础上绘制所需图形,本项目中需显示一个基本的温度--时间的坐标轴及坐标值,并显示连续数据所构成的折线图,在此过程中须对图形布局及尺寸关系有清晰的认识。感谢阅读本项目中存储8个小时的数据,每30s采集一次数据,故共需要960条数据记录,按照本地正常气温值评估最低温度取-20℃,最高温度取50℃,横向时间坐标值应分为960个,另外为了美观考虑上下左右需留出一部分空白区域。谢谢阅读另外数据显示区域目的是显示数据库中最新数据记录因此需要定时进行更新一次,在这里我们采用Label标签显示。感谢阅读折线图绘制:坐标确定:为了此处方便绘制曲线已经将数据库中内容存储时按照时间排序,且间隔时间相等,所以为了方便计算采用id索引值来确定x时间轴坐标值计算如下:精品文档放心下载=(960)×( − − )+感谢阅读温度值坐标确定同样原理,以0℃为基准坐标值,根据实际值相加减比例,另外由于绘图时坐标是从左上角开始故温度高的在图形上侧坐标值小,温度低的再图形上侧,坐标值大,计算公式如下:精品文档放心下载=ℎ+(−ℎ−)×5−()×(−ℎ−)770主要程序:GUI界面最终效果图如下:(六)数据的修改1.设计思路在修改数据方面我们更趋向于简单且并非常用功能,所以我们采用PHP编写网页配合Apache2服务器进行,在所属局域网内的其他终端通过浏览器进行。感谢阅读2.PHP操作数据库简介1)数据库链接在我们访问MySQL数据库前,我们需要先连接到数据库服务器,下面是一个用PHP语言链接MYSQL数据库的语句:谢谢阅读$con=mysql_connect('localhost','root','041471');感谢阅读mysql_select_db('temperature');//选择数据库谢谢阅读2)数据库指令执行PHP和数据库建立链接之后对数据库的操作大部份都是通过mysql_query()来实现的,通过该函数来传递MySQL指令即可完成预期操作,如下精品文档放心下载$insertsql="deletefromtable1whereid=$a[$i]";精品文档放心下载mysql_query($insertsql);这两条语句即可完成删除table1表中id=$a[$i]记录的功能,其中利用第一句是方便于实现语句中含有变量的操作。谢谢阅读3)数据库内容获取PHP数据库内容获取主要通过如下两条语句完成$query=mysql_query("select*fromtable1");感谢阅读$row=mysql_fetch_row($query)感谢阅读3.设计目标本次设计目标是设计一个界面实现数据库内容显示,并在每条数据之后有修改与删除选项,点击修改后可弹出界面对这条数据内容进行修改,确认修改后可以将数据库内容修改,点击删除可直接将该条记录删除。精品文档放心下载具体内容见代码。4.设计结果总体的设计结果是,960条数据分为两个网页现实。第一页显示1—500条,第二个页面显示501-960条。通过“上一页”和“下一页”的超链接可以进行互相切换。精品文档放心下载然后,每条数据都有修改和删除的两个功能,点击删除,则会删除该条数据。同时会上传一条删除语句给新浪云端的PHP文件,然后新浪云也执行这条删除语句,删除对应的数据。点击修改,则会弹出修改数据的网页。如下:感谢阅读修改成功后则返回原始网页,如果修改的是第1-500条,则返回第一页的网页;如果修改的是第501-960条,则返回的是第二页。谢谢阅读(七)新浪云端应用申请创建登陆新浪云控制台,点击“创建新应用”。出现如下界面,点击“继续创建”。为自己创建的App设置二级域名(Appname)和应用名称,选择开发语言为PHP5.3。谢谢阅读完成以上设置后,选择“PHP空应用”,创建应用。看到如下图所示的界面,表面创建成功。点击进入创建的应用进入控制台,选择界面左侧“服务管理”菜单下的“MySQL”选项,出现如下界面。感谢阅读初始化MylSAM,提示进行安全登陆。安全验证完成后,出现如下界面。点击“管理MySQL”,可以管理数据库。选择控制台左侧“应用管理”菜单下的“代码管理”,创建版本。谢谢阅读输入版本号,创建版本。版本创建完成后,点击“编辑代码”进入代码编辑界面。(八)数据上传与云端接收本地数据上传同数据读取一起进行,模拟httpPOST进行传输,需要用到urllib和urllib两个模块,这两个模块树莓派系统的Python里面已经包含可直接使用,若没有可以感谢阅读$sudoapt-getinstallpython-dev精品文档放心下载1.新浪云服务端编写在新浪云作为服务器端使用的是PHP编写,由于每次仅传输一次数据,且由感谢阅读于新浪云端不支持socket通信机制,所以最简单的数据传输方式采用类似于表单的POST方式,在新浪云端建立服务器端,用来接收本地客户端POST过去的数据,并对数据进行提取,并写入新浪云的MySQL数据库,在这一步骤中最难的是要要打通http通道,因为一般的表单POST采用的是C/S模式,本地通过浏览器访问服务器端的网页,填写网页中的表单再提交,这种模式下,该网页地址与服务界面地址相对处于同一物理路径,均在服务器上,较容易定位,而本次所需要用到的模式下,客户端与服务界面处于不同物理服务器上,因此需通过http协议来进行数据传输。谢谢阅读首先需在服务器端建立服务界面,再确定是否能够打通通道,可利用以下在线测试工具:谢谢阅读/httptest.php谢谢阅读在这里需注意,新浪云通过域名地址进行数据传输需在应用地址前加“1.”如本次创建的应用地址为测试界面为其下精品文档放心下载test.php<?phpheader("Content-type:charset=utf-8;");$id=$_POST['id'];$time=$_POST['time'];$temp=$_POST['temp'];精品文档放心下载echo$id.'</br>'.$time.'</br>'.$temp.'</br>';?>感谢阅读有数据返回即通信成功,在本项目的数据传输中,新浪云端主要功能为数据接收与写入,并更新数据库信息,代码如下:谢谢阅读<?phpheader("Content-type:charset=utf-8;");//测试时方便正确显示谢谢阅读$id=$_POST['id']; //变量分配接收到的参数感谢阅读$time=$_POST['time'];$temp=$_POST['temp'];if($id) //如果接收到的数据不为空则进行下面的操作精品文档放心下载{$con=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);//数据库建立连接,新浪云默认方法精品文档放心下载mysql_select_db('app_chyan041471');//选择数据库$query=mysql_query('select*fromtemperature');谢谢阅读$insertin="insertintotemperature(id,temp)values($id,$temp)";精品文档放心下载if(mysql_query($insertin)) //如果数据库数据插入成功则进行下面的精品文档放心下载更新操作{if(mysql_query('deletefromtemperaturewhereid=1'))谢谢阅读echo"yes";elseecho"error";if(mysql_query('updatetemperaturesetid=id-1'))谢谢阅读echo"yes";elseecho"error";}}?>3.Python模拟httppost向新浪云传递数据感谢阅读树莓派本地客户端进行数据传输,主要利用urllib和urllib2两个库,这部分代码较为简单可直接使用,所用代码为:精品文档放心下载importurllibimporturllib2url='http://1./link.php'post_data={'id':'961','temp':'%.2f'%value}精品文档放心下载data=urllib.urlencode(post_data)精品文档放心下载req=urllib2.Request(url,data)精品文档放心下载在这里需要注意地址的正确性,与所需传递数据格式(九)本地和云端数据库实现同步删除与修改为实现数据内容的更好同步,两个数据库内容要实现同步删除与修改,这里采用PHP在修改本地数据的同时能够完成云端数据库内容的同步修改,具体方案与数据上传相类似,在本地修改数据传递指令的同时由云端数据库的结构生成相对应的MySQL操作代码,并通过httpPOST上传至云端服务器某个处理界面,由处理界面接收解析,并连接操作云端数据库,过程如下:感谢阅读1.云端建立处理PHP文件具体建立步骤与数据上传时相同,主要程序:<?phpheader("Content-type:charset=utf-8;");谢谢阅读if($command=$_POST['command']){精品文档放心下载$con=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);精品文档放心下载mysql_select_db('app_chyan041471');精品文档放心下载$query=mysql_query('select*fromtemperature');谢谢阅读if(mysql_query($command))echo"yes";elseecho"no";}?>其中command为接收到的MySQL操作指令。精品文档放心下载2.给新浪云端的PHP文件上传操作指令通过PHP进行httpPOST数据需要对本地进行curl扩展库安装:感谢阅读在这一步完成后即可完成上述要求。程序如下:$url="http://1./test.php";$post_data=array(感谢阅读"command"=>"deletefromtemperaturewhereid=$id"//也可为对应的修改精品文档放心下载指令);$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);谢谢阅读curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);谢谢阅读我们在POST数据哦!curl_setopt($ch,CURLOPT_POST,1);精品文档放心下载把post的变量加上curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);精品文档放心下载$output=curl_exec($ch);curl_close($ch);(十)互联网显示数据折线图为了数据显示方便,在新浪云端编写显示界面,并定时进行更新显示,数据显示需要绘制折线图形。谢谢阅读PHP中图形绘制利用其GD扩展库,GD库是PHP处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片或者生成图片。在网站上GD库通常用来生成缩略图、对图片加水印或者对网站数据生成报表。GD为是一个动态的开放的创建图像的源代码公开的函数库。可以从官方网站/gd处下载,目前GD库支持gif,png,jpeg,wbmp,xbm等多种图像格式。GD库通常用于对图像的处理。谢谢阅读在本项目中,主要利用GD库的绘图功能来绘制数据折线图,在新浪云中,PHP内已经集成安装了GD库不需要额外安装,如果在树莓派上需要使用,不需要按上述下载安装,因为这种方法较为复杂,可直接使用apt-get来获取并安装,指令为:sudoapt-getinstallphp5-gd。谢谢阅读PHP-GD库主要函数及使用方法如下:imagecreate($kuan,$gao)创建图像,指定大小;Imagecolorallocate()创建颜色,由RGB三个颜色元素组成;谢谢阅读Imageline()绘制线段,指定起始点和结束点坐标值,并设置相关属性如颜色、宽度等;精品文档放心下载Imagestring()在图片中某一指定坐标添加文字,只可以是英文和数字。感谢阅读新浪云端该界面编写主要程序及效果<?phpheader("Content-type:charset=utf-8;image/gif");感谢阅读$con=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);感谢阅读mysql_select_db('app_chyan041471');谢谢阅读$gao=370;$kuan=650;$im=@imagecreate($kuan,$gao)谢谢阅读ordie("CannotInitializenewGDimagestream");感谢阅读$zuo=30;//空白$you=20;$shang=30;$xia=20;$background_color=imagecolorallocate($im,150,150,150);//设定各种颜色值谢谢阅读$zuobiao_color=imagecolorallocate($im,0,200,0);感谢阅读$zuobiao2_color=imagecolorallocate($im,0,100,0);感谢阅读$xian_color=imagecolorallocate($im,255,0,0);感谢阅读$text_color=imagecolorallocate($im,255,255,0);谢谢阅读$line_color=imagecolorallocate($im,255,50,50);谢谢阅读ImageTTFText($im,15,0,$kuan/3.5,20,$text_color,"font/simfang.ttf","实精品文档放心下载时温度显示系统");//显示中文ImageTTFText($im,12,0,$zuo+5,$shang+15,$text_color,"font/simfang.ttf"感谢阅读,"温度"); //zuobiaoImageTTFText($im,12,0,$kuan-55,$shang+($gao-$shang-$xia)*4/6-感谢阅读6,$text_color,"font/simfang.ttf","时间");感谢阅读ImageTTFText($im,12,0,$kuan/3*2,25,$text_color,"font/simfang.ttf","感谢阅读最新记录:");ImageTTFText($im,12,0,$kuan/6*5-谢谢阅读10,55,$text_color,"font/simfang.ttf","℃");感谢阅读//绘制坐标轴横轴imageline($im,$zuo,$shang+($gao-$shang-$xia)*4/6,$kuan-谢谢阅读$you,$shang+($gao-$shang-$xia)*4/6,$zuobiao_color);精品文档放心下载imageline($im,$zuo,$shang+($gao-$shang-$xia)*4/6-1,$kuan-谢谢阅读$you,$shang+($gao-$shang-$xia)*4/6-1,$zuobiao_color);精品文档放心下载//绘制坐标轴纵轴imageline($im,$zuo,$shang,$zuo,$gao-$xia,$zuobiao_color);感谢阅读imageline($im,$zuo-1,$shang,$zuo-1,$gao-$xia,$zuobiao_color);谢谢阅读imageline($im,$kuan-$you,$shang,$kuan-$you,$gao-$xia,$zuobiao_color);精品文档放心下载imageline($im,$kuan-$you+1,$shang,$kuan-$you+1,$gao-感谢阅读$xia,$zuobiao_color);//绘制网格imageline($im,$zuo,$shang,$kuan-$you,$shang,$zuobiao_color);imageline($im,$zuo,$shang-1,$kuan-$you,$shang-1,$zuobiao_color);imageline($im,$zuo,$gao-$xia,$kuan-$you,$gao-$xia,$zuobiao_color);imageline($im,$zuo,$gao-$xia+1,$kuan-$you,$gao-$xia+1,$zuobiao_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*4/6,$kuan-$you,$shang+($gao-$shang-$xia)*4/6,$zuobiao_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*4/6-1,$kuan-$you,$shang+($gao-$shang-$xia)*4/6-1,$zuobiao_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*1/6,$kuan-$you,$shang+($gao-$shang-$xia)*1/6,$zuobiao2_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*2/6,$kuan-$you,$shang+($gao-$shang-$xia)*2/6,$zuobiao2_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*3/6,$kuan-$you,$shang+($gao-$shang-$xia)*3/6,$zuobiao2_color);imageline($im,$zuo,$shang+($gao-$shang-$xia)*5/6,$kuan-$you,$shang+($gao-$shang-$xia)*5/6,$zuobiao2_color);//刻画坐标值感谢阅读imagestring($im,5,$zuo-10,$shang+($gao-$shang-$xia)*4/6-7,"0",$text_color);精品文档放心下载imagestring($im,5,$zuo-20,$shang+($gao-$shang-$xia)*3/6-7,"10",$text_color);感谢阅读imagestring($im,5,$zuo-20,$shang+($gao-$shang-$xia)*2/6-7,"20",$text_color);imagestring($im,5,$zuo-20,$shang+($gao-$shang-$xia)*1/6-7,"30",$text_color);imagestring($im,5,$zuo-20,$shang-7,"40",$text_color);imagestring($im,5,$zuo-30,$shang+($gao-$shang-$xia)*5/6-7,"-10",$text_color);imagestring($im,5,$zuo-30,$shang+($gao-$shang-$xia)-7,"-20",$text_color);$length=0;$i=0;$x=array();$y=array();$query=mysql_query('select*fromtemperature');while($row=mysql_fetch_row($query))感谢阅读{$length=$length+1;$year=$row[1][0]*1000+$row[1][1]*100+$row[1][2]*10+$row[1][3];谢谢阅读$month=$row[1][5]*10+$row[1][6];谢谢阅读$day=$row[1][8]*10+$row[1][9];感谢阅读$hour=$row[1][11]*10+$row[1][12];感谢阅读$minute=$row[1][14]*10+$row[1][15];感谢阅读$second=$row[1][17]*10+$row[1][18];谢谢阅读$t[$i]=$row[1];$x[$i]=$row[0]/960*($kuan-$zuo-$you)+$zuo;//确定x坐标,公式和本地显示客户端相同精品文档放心下载$y[$i]=$shang+($gao-$shang-$xia)*4/6-$row[2]/60*($gao-$shang-$xia);感谢阅读$temp_d[$i]=$row[2];$i=$i+1;}for($i=1;$i<$length;$i++){imageline($im,$x[$i-1],$y[$i-1],$x[$i],$y[$i],$line_color);谢谢阅读}imagestring($im,4,$kuan/3*2+50,25,$t[$length-1],$text_color);谢谢阅读imagestring($im,4,$kuan/3*2+50,40,$temp_d[$length-1],$text_color);imagegif($im);谢谢阅读imagedestroy($im);?>最终显示界面如下图所示:(十一)Android客户端Android开发环境较为复杂,不是本次项目重点内容,这里不做介绍,本次项目开发过程中使用的是在Ubuntu15.04界面下安装配置AndroidStudio开发环境进行客户端开发,发现开发较为困难,最终结果为将新浪云网络端生成的PHP图形显示界面插入本地HTML文件并编写JavaScript程序进行定时刷新达到实时显示的目的。精品文档放心下载主要介绍如何使用WebView控件:创建assets文件夹及自己所要插入的网页Ubuntu下的AndroidStudio工程打开是没有asset文件夹的,需要自己创建,路径:Project_name/app/src/main/下面创建谢谢阅读图3.11.1创建asset文件夹及显示HTML文件精品文档放心下载2.创建显示界面及添加WebView控件3.对WebView控件进行界面编辑设置WebView显示的界面,并设置显示自动默认为横屏并允许JavaScript脚本。感谢阅读四、设计成果我们组所设计的温湿度传感器,成功实现了温度的采集、读取、保存、上传新浪云和实时显示的功能。精品文档放心下载它能够在Linux/Android下每隔30秒自动采集一次温度信号,同时将采集到的温度信息保存到本地数据库并上传新浪云的MySQL数据库。两个数据库都能够存储8个小时的960条数据记录。谢谢阅读我们编写了两个客户端,能够访问数据库实现读取数据、删除数据等操作。一个是用Python语言编写的在网页上显示的界面,另一个是在Android客户端上进行显示的界面,都能够显示8个小时的温度曲线并实时更新。除此之外,网页显示还能够准确显示出每次采集温度的时间和所采集到的温度值。谢谢阅读显示界面如下图所示:图4-1 网页客户端显示界面4-2Android客户端显示界面五、设计总结此次综合实践为大学以来工程量相对很大、涉及知识面较广、且课本已学知识涉及很少的一门课程,在这次设计选题阶段,经过讨论,确定了选择课题一——温湿度传感器的设计。着手做设计时,在对照了本专业相关知识之后,依然觉得无从下手。在根据题目要求对相关语言及软件进行简单学习之后有了大概的工作方向,根据方向确定出了所能想到且有可能实现的最高目标。之后进行分工及学习,在学习过程中根据教程进行简单学习,简单对设计的语言进行入门。完成这些学习后,开始在树莓派上实践设计,由于以前对Linux系统没有太多使用使用的经验,对指令操作显得十分困难,在烧写系统及配置环境过程中,都是尽可能的搜集更多地资料,进行比对,逐个排查,最终找到有效解决方法,且在这次设计过程中,找资料这一项即让我们觉得头痛,网上资料十分冗杂,有部分人盗用他人资料的部分造感谢阅读成资料不全,这样在实际操作过程中就很难实现预期目的。在入门之后也有在预期做出来感觉效果不好而放弃的,如本地显示,在起初做的是利用PHP和新浪云一样显示,但成功之后发现受树莓派性能影响,显示较慢,故改成利用客户端显示,考虑到前部分程序是使用Python写的为简化工作量,在了解到Python显示之后为利用自带库进行显示最终慢慢学习显示。此外还有许多预期目标没有实现,如实现交互式数据界面,Android客户端自行下载数据进行画图,但在Android学习过程中遇到很多困难,最终放弃此种想法,改为使用WebView控件这种取巧的简单方法。另外通过这次设计,尤其在配置Android开发环境过程中发现,网络资源下载也是一种问题,由于国家政策及相关群体的影响,对国外网站访问受限,所以下载相关资源很困难,需要不断寻找解决方案。精品文档放心下载此外,在某些过程中体会到某些目的可以尝试着去试验自己认为可以的方法,而不仅仅是向网上借鉴,如在本项目中庸PHP绘制折线图安装GD库,刚开始查询资料都需要另外下载再单独安装,但亲自试验多次都未能成功,突然想到试试apt-get指令能否成功,就试了一下apt-getinstallPHP5-gd,结果成功安装。感谢阅读在本次设计过程中各成员间分工与集体相互合作,完成该项目设计。其中各组员的分工为:精品文档放心下载陈 岩:(1)负责总体思路的构思和架构的构建;(2)树莓派的启动;(3)数据上传;(4)网页客户端编程;(5)Android客户端网页插入;全部完成陈灿坚:(1)本地数据库修改;(2)数据修改界面的编程;工作全部完成郭镭斌:(1)硬件搭建;(2)温度信息采集编程;工作全部完成刘 杨:(1)新浪云数据库创建;(2)网页显示界面编程;工作全部完成小组成员经过努力和交流,都最终完成了自己的设计任务。感谢阅读六、参考文献[1]EbenUptonGarethHalfacree.著.王伟许金超郭栋梁黎颖.译.RaspberryPi用户指南.人民邮电出版社.2013年8月谢谢阅读[2]WesleyJ.Chun著.宋吉广.译.Python核心编程第二版.北京.人民邮电出版社.2008精品文档放心下载7月[3]张若愚.Python科学计算.北京.清华大学出版社.2012年1月精品文档放心下载[4]孙宏明.Android4.X手机/平板电脑程序设计入门、应用到精通第二版.北京.中国水利水电出版社.2012年8月感谢阅读[5].(澳)LukeWellin(.澳)LauraThomson.武欣译.PHP和MySQL.Web开发第4版.北京.机械工业出版社.2009年4月精品文档放心下载网络资料[1]SQL入门.北京传智播客教育[2]MySQL实用技术.杜梓平.苏州工业园区服务外包职业学院精品文档放心下载[3]极客教程[4]慕课网教程附录1:实践日志:时间:2015.07.16(第一天)一、内容:分析所选课题——温湿度传感器设计,查阅资料,确定需要设计的模块及相应的学习内容。感谢阅读二、分析结果:要完成温湿度传感器的设计并使其能够实时显示,我们需要模块来完成。需要学习的新知识有PHP、Android、MySQL等。谢谢阅读时间:2015.07.17(第二天)一、内容:学习在windows下配置wampsever;谢谢阅读学习PHP脚本链接语言、Apache2和MySQL的相关操作。感谢阅读二、方法:网上搜集资料,小组讨论。三、遇到的问题:刚接触新知识,理解起来有些困难,进度稍慢。时间:2015.07.18(第三天)一、内容:继续学习PHP脚本链接语言、Apache2和MySQL的相关操作。谢谢阅读二、方法:网上搜集资料,小组讨论。三、遇到的问题:今天的学习比较顺利。时间:2015.07.19(第四天)一、内容:启动树莓派二、方法:系统下载登陆/downloads/,点击DOWNLOADS,下载树莓派的系统。感谢阅读解压系统下载完成后,将得到的压缩文件进行解压,得到名为“win32diskimager(镜像写感谢阅读盘工具)”的文件夹。烧写系统打开“win32diskmigager(镜像写U盘工具)”文件夹,找到Win32DiskImager.exe可执行文件,双击运行。精品文档放心下载选择刚下载的镜像文件,病选择目标内存卡,点击“写”按钮,等待烧写完成。精品文档放心下载硬件搭建将SD卡插入树莓派卡槽,连接网线至路由器接口,并给电源供电。感谢阅读查看树莓派IP地址:通过路由管理器查看名为raspberry的IP地址。谢谢阅读Putty配置首次登陆需要用SSH,双击“putty.exe”文件,在弹出的对话框中输入主机IP地址:精品文档放心下载10。安装远程桌面在命令窗口中loginas:后输入pi,输入密码:raspberry。输入sudoapt-getinstallxrdp,安装远程桌面。精品文档放心下载设置root用户及密码远程登陆使用SD卡剩余空间三、遇到的问题:系统下载速度慢。解决方法:先下载BT种子,再载通过第三方软件(迅雷下载)进行安装。感谢阅读时间:2015.07.20(第五天)一、内容:学习数据库的相关操作。二、方法:网上查阅资料,建立数据库并进行相关操作练习。时间:2015.07.22(第六天)一、内容:PHP访问mysql数据库二、遇到的问题:问题:变量如何传递三、解决方法:将操作语言单独列出再进行传递时间:2015.07.23(第七天)一、内容:PHP访问mysql数据库二、遇到的问题:问题1:PHP读取出的数据无法绘制成折线图问题2:绘图时imagestring函数无法显示中文谢谢阅读三、解决过程:问题1:思路:网上查阅一下PHP是否需要插件通过查资料得知,PHP需要安装GD库才能绘图,安装GD库的经历如下:感谢阅读(1) 在网上直接下载GD库进行安装,安装失败。精品文档放心下载(2) 用指令安装:apt-getinstallphp5-gd,安装成功。感谢阅读问题2:函数使用错误,换成使用imageTTFText函数,并添加汉字字体文件,语句如下:感谢阅读imageTTFText($im,15,0,$kuan/3.5,20,$text_color,"font/simfang.ttf","实时温度显示系统");谢谢阅读时间:2015.07.24(第八天)一、内容:利用PHP画折线图更改方案二、遇到的问题:利用PHP画折线图时网页显示很慢,刷新时会出现电脑卡掉的状况。感谢阅读三、解决方法:改为利用Python读取数据库内容并画图显示,并开始学习PythonTKinter。谢谢阅读时间:2015.07.26(第九天)一、内容:Python访问mysql数据库二、方法:安装MySQLdb模块三、遇到的问题:问题1:在执行:pythonsetup.pybuild遇到以下错误:感谢阅读EnvironmentError:mysql_confignotfound精品文档放心下载解决方法:首先查找mysql_config的位置,使用find/-namemysql_config问题2:无法找到mysql_config文件解决方法:sudoapt-getins

温馨提示

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

评论

0/150

提交评论