arduino多點(diǎn)網(wǎng)絡(luò)溫度采集項(xiàng)目_第1頁
arduino多點(diǎn)網(wǎng)絡(luò)溫度采集項(xiàng)目_第2頁
arduino多點(diǎn)網(wǎng)絡(luò)溫度采集項(xiàng)目_第3頁
arduino多點(diǎn)網(wǎng)絡(luò)溫度采集項(xiàng)目_第4頁
arduino多點(diǎn)網(wǎng)絡(luò)溫度采集項(xiàng)目_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

EthernetShieldonA(yù)rduino-awebserverexampleProjectnote—ArduinoEthernetShieldV1.01.SchematicTheArduinoEthernetShieldV1.0isdedicatedfortheArduinoboards.ItusestheMicrochip’sENC28J60SPIbasedstand-aloneEthernetcontroller(HYPERLINKdownloaddatasheethere)andacompatibleRJ45socketwithmagnetics.SincetheENC28J60isa3V3devicethatonlydrive3V3logicleveloutputbutcapableofaccepting5Vlogicinput,a5VCMOS/TTLquadpositiveANDgat(yī)es74HCT08Disusedtoconvertthe3.3logicleveloutputto5Vlogiclevel.Fig1.ArduinoEthernetShieldschematic2.SoftwareStructureTheEthernetShieldsoftwareisintheformatofArduinolibrary,whichyoucandownloadfromHYPERLINKhere.ThelibraryisimplementedbasedonHYPERLINKtux’sopen-sourceTCP/IPstackforAtmega88andENC28J60.Themainfilesinthelibraryare–etherShield.cpp—awrappercppfile,asanArduinolibraryinterfacewithtuxgraphic’scodeip_arp_udp_tcp.c—simplifiedTCP/IPstackimplementationenc28j60.c—ENC28J60SPIroutinesnet.h—networkprotocoldefinitions3.TCP/IPimplementationThestandardTCPisaprotocltoestablishaconnection.Todothis,anumberofpacketsneedstobeexchagedbetweentwosidesfirsttoestablishtheconnection;thendat(yī)apacketscanbeexchaged.Usuallyacomplicat(yī)edstate-machineisneededtoimplementtheTCPprotocol.ForAuduino’sATMEGA168,a8-bitAVRmicrocontrollerwith1KSRAM,itisimpossibletoimplementthefullTCPstack.Alsothewebpagefor8-bitmicrocontrollerthatnormallyisusedtocontrolarelayorreadatemperat(yī)uresensoretc.,isverysimple.Therefore,insteadofimplementingfullTCPprotocl,asingledatapacketTCPprotocolisused.Youwebpagecontents,includingallhtmltags,mustbeinonepacket.ThelengthofpacketislimitedbytheSRAMsize,currentlyhalfoftheRAMspace(500bytes)isusedfornetworkPacketbuffer.Itissufficientforsimplewebpagesasshownbelow.4.Ethersheildlibraryinstallation&modificationFirstdownloadtheethershieldlibraryHYPERLINKhere,thencopy&unzipthelibraryinyourArduinoIDElibrarydirectory(forexamplearduino-0010/hardware/libraries/).Therearethreee(cuò)xamplesinthee(cuò)thershieldlibrary,youmightneedtochangetheipaddressintheexamplesketch(.pde)files.Theipaddressmustbeafreeaddresswithyournetworkrangestaticuint8_tmymac[6]={0x54,0x55,0x58,0x10,0x00,0x24};staticuint8_tmyip[4]={192,168,1,15};staticcharbaseurl[]="";Alsoyoumightliketochangethewebpagecontentsintheprint_webpagefuntion.NotethatthewebpagecontentsarestoredinthePROGMEM(usingPSTRdeclaration)tosavethepreciousSRAMspace.5.ExamplesThreee(cuò)xamplesareincludedintheethershieldlibrary–ethershield_ping.pde—aPINGexampleethershield_webserver.pde—ageneralwebserverexampleethershield_web_temperature.pde—awebserverwithtemperaturesensor(DS18B20)readingsethershield_web_switch.pde—New—Webserverexample,switchon/offLED#include"etherShield.h"//pleasemodifythefollowingtwolines.macandiphavetobeunique//inyourlocalareanetwork.Youcannothavethesamenumbersin//twodevices:staticuint8_tmymac[6]={0x54,0x55,0x58,0x10,0x00,0x24};staticuint8_tmyip[4]={192,168,1,15};staticcharbaseurl[]="";stat(yī)icuint16_tmywwwport=80;//listenportfortcp/www(maxrange1-254)#defineBUFFER_SIZE500stat(yī)icuint8_tbuf[BUFFER_SIZE+1];#defineSTR_BUFFER_SIZE22staticcharstrbuf[STR_BUFFER_SIZE+1];//定義了兩個(gè)數(shù)組一種是uint8_tbuf(501),一種是strbuf(23)EtherShieldes=EtherShield();//preparethewebpagebywritingthedatatothetcpsendbuffer//準(zhǔn)備網(wǎng)頁向tcp發(fā)送寄存器寫入數(shù)據(jù)uint16_tprint_webpage(uint8_t*buf,byteon_off);int8_tanalyse_cmd(char*str);//LEDcathode連接到thePin4,anodeto5Vthrough1K電阻#defineLED_PIN4voidsetup(){/*初始化enc28j60*/?es.ES_enc28j60Init(mymac);es.ES_enc28j60clkout(2);//變換輸出時(shí)鐘changeclkoutfrom6.25MHzto12.5MHzdelay(10);?/*Magjackledsconfiguration,參見enc28j60datasheet,page11*/ //LEDA=green綠燈LEDB=yellow黃燈?// //0x880代表PHLCONLEDB=on,LEDA=on燈AB都亮 //enc28j60PhyWrite(PHLCON,0b0000100010000000);?es.ES_enc28j60PhyWrite(PHLCON,0x880);?delay(500); //?//0x990代表PHLCONLEDB=off,LEDA=off燈AB都滅?//enc28j60PhyWrite(PHLCON,0b0000100110010000);?es.ES_enc28j60PhyWrite(PHLCON,0x990);?delay(500); //?//0x880isPHLCONLEDB=on,LEDA=on //enc28j60PhyWrite(PHLCON,0b0000100010000000); es.ES_enc28j60PhyWrite(PHLCON,0x880);?delay(500);?//?//0x990isPHLCONLEDB=off,LEDA=off //enc28j60PhyWrite(PHLCON,0b0000100110010000);?es.ES_enc28j60PhyWrite(PHLCON,0x990); delay(500);?////0x476isPHLCONLEDA=linksstatus綠燈表達(dá)已連接,LEDB=receive/transmit紅燈表達(dá)正在發(fā)送或接受數(shù)據(jù)//enc28j60PhyWrite(PHLCON,0b0000010001110110);es.ES_enc28j60PhyWrite(PHLCON,0x476); delay(100);//初始化thee(cuò)thernet/iplayer:es.ES_init_ip_arp_udp_tcp(mymac,myip,80); pinMode(LED_PIN,OUTPUT);?digitalWrite(LED_PIN,LOW);//switchonLED}voidloop(){uint16_tplen,dat_p;int8_tcmd;byteon_off=1;plen=es.ES_enc28j60PacketReceive(BUFFER_SIZE,buf);?/*如果收到有效地信息包plen便不等于零*/if(plen?。?){ //arpisbroadcastifunknownbutahostmayalsoverifythemacaddressbysendingittoaunicastaddress.if(es.ES_eth_type_is_arp_and_my_ip(buf,plen)){es.ES_make_arp_answer_from_request(buf);return;}//checkifippacketsareforus檢查ip信息包是不是發(fā)給我方旳:if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){return;}if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V&&buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){es.ES_make_echo_reply_from_request(buf,plen);return;}//tcpportwwwstart,compareonlythelowerbyteif(buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){if(buf[TCP_FLAGS_P]&TCP_FLAGS_SYN_V){es.ES_make_tcp_synack_from_syn(buf);//make_tcp_synack_from_syndoesalreadysendthesyn,ackreturn;}if(buf[TCP_FLAGS_P]&TCP_FLAGS_ACK_V){es.ES_init_len_info(buf);//initsomedatastructuresdat_p=es.ES_get_tcp_dat(yī)a_pointer();if(dat_p==0){//wecanpossiblyhavenodata,justack:if(buf[TCP_FLAGS_P]&TCP_FLAGS_FIN_V){es.ES_make_tcp_ack_from_any(buf);}return;}if(strncmp("GET",(char*)&(buf[dat_p]),4)!=0){ //head,postandothermethodsforpossiblestatuscodessee://plen=es.ES_fill_tcp_dat(yī)a_p(buf,0,PSTR("HTTP/1.0200OK\r\nContent-Type:text/html\r\n\r\n<h1>200OK</h1>"));gotoSENDTCP;}?if(strncmp("/",(char*)&(buf[dat_p+4]),2)==0){plen=print_webpage(buf,on_off);gotoSENDTCP;}cmd=analyse_cmd((char*)&(buf[dat(yī)_p+5]));if(cmd==2){on_off=1;?digitalWrite(LED_PIN,LOW);//打開LED}elseif(cmd==3){on_off=0; digitalWrite(LED_PIN,HIGH);//關(guān)上LED}plen=print_webpage(buf,on_off);? plen=print_webpage(buf,on_off);SENDTCP:es.ES_make_tcp_ack_from_any(buf);//sendackforhttpgetes.ES_make_tcp_ack_with_data(buf,plen);//senddata}}}}//Thereturnedvalueisstoredintheglobalvarstrbufuint8_tfind_key_val(char*str,char*key){uint8_tfound=0;uint8_ti=0;char*kp;kp=key;while(*str&&*str?。?'&&found==0){if(*str==*kp){kp++;if(*kp=='\0'){str++;kp=key;if(*str=='='){found=1;}}}else{kp=key;}str++;}if(found==1){//copythevaluetoabufferandterminateitwith'\0'while(*str&&*str!=''&&*str!='&'&&i<STR_BUFFER_SIZE){strbuf[i]=*str;i++;str++;}strbuf[i]='\0';}return(found);}int8_tanalyse_cmd(char*str){int8_tr=-1;if(find_key_val(str,"cmd")){if(*strbuf<0x3a&&*strbuf>0x2f){//isaASCIInumber,returnitr=(*strbuf-0x30);}}returnr;}uint16_tprint_webpage(uint8_t*buf,byteon_off){inti=0;uint16_tplen;plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0200OK\r\nContent-Type:text/html\r\n\r\n"));plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><p><h1>WelcometoArduinoEthernetShieldV1.0</h1></p>"));plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<hr><br><formMETHOD=getaction=\""));plen=es.ES_fill_tcp_data(buf,plen,baseurl);plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<h2>REMOTELEDis</h2>")); ?plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<h1><fontcolor=\"#00FF00\">"));if(on_off) plen=es.ES_fill_tcp_dat(yī)a_p(buf,plen,PSTR("ON"));else plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("OFF"));plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</font></h1><br>"));if(on_off){?plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<inputtype=hiddenname=cmdvalue=3>"));?plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<inputtype=submitvalue=\"Switchoff\"></form>"));}else{?plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<inputtype=hiddenname=cmdvalue=2>")); plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<inputtype=submitvalue=\"Switchon\"></form>"));}plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</center><hr><p>V1.0<ahref=\"\">.com<a>"));return(plen);}5.Links&DownloadsHYPERLINKArduinoEthernetShieldschematicV1.0HYPERLINKArduinoethershieldlibrary-newversionwithwebclientfuntions&examplesHYPERLINKMicrochipENC28J60datashee(cuò)tTags:HYPERLINKArduino,HYPERLINKethernet,HYPERLINKnetwork,HYPERLINKping,HYPERLINKproject,HYPERLINKwebserverThisentrywaspostedonMonday,August25th,at5:45pmandisfiledunderHYPERLINK\o"ViewallpostsinArduinoprojects"Arduinoprojects.YoucanfollowanyresponsestothisentrythroughtheHYPERLINKRSS2.0fee(cuò)d.YoucanHYPERLINK\l"respond#respond"leavearesponse,orHYPERLINKtrackbackfromyourownsite.OneResponseto“EthernetShieldonArduino-awebserverexample”PaoloMarinoSays:

HYPERLINK\l"comment-9#comment-9"September22nd,at(yī)9:27amHi

I’minterestedinthisboardhoweverIhaveaquestion:TheUDPprotocolissupportedbyArduinoEternetorIhavetodeveolpbymyself?

Thanksinadvance.Projectnote—EthernetShieldforArduino-aWebclientexampleThisprojectshowshowtoimplementadistributedsensornetworkbyusingthearduinoandtheethernetshield.1.WebClientconceptSinceIpublishedethernetShieldweb-serverprojectnoteafewmonthsago[link],I’vegotafewemailsabouthowtousetheEthernetshieldasawebclient.Inasense,awebclientapplicationismoreappropriateforasmalldevicesuchastheEthernetshieldonArduino.BasedontheTCP/IPprotocol,itisthewebclient(suchasawebbrowser)whoinitializestheTCPconnections,requestsdatafromorsendsdatatothewebserver.Thereforethee(cuò)thernetshieldrunninginwebclientmodecanbeusedasadistributedsensornodeinthenetwork.Itcansendperiodicorinterruptdrivensensordatatoawebserver.Thewebservercanthenrecord,processandshowthesensordatafromoneormultiplewebclient.Inthisproject,awebclientapplicationisdevlopedfortheethernetshield,whichcansendperiodicdat(yī)a(suchastemperaturereading)orspontaneousdata(suchasinfraredsensordat(yī)aorswitchpress)toawebserver.PHPscriptsthatusedtosaveandshowthedatareceivedonthewebseverarealsodeveloped.2.WebClientTCP/IPimplementationTheWebclientTCP/IPprotocolisimplementedintheclient_process()routine,whichiscalledinthemainArduinosketchloop()routine.Theclientprocessusesastat(yī)emachinetocontroltheTCP/IPprotocolasshowninthefollowingcodesegment–voidclient_process(void){uint16_tplen;?uint8_ti;if(client_dat(yī)a_ready==0)return;//nothingtosend?if(client_state==IDLE){//initializeARPes.ES_make_arp_request(buf,dest_ip);?client_state=ARP_SENT;?return; }?if(client_state==ARP_SENT){plen=es.ES_enc28j60PacketReceive(BUFFER_SIZE,buf);??//destinationipaddresswasfoundonnetworkif(plen?。?){if(es.ES_arp_packet_is_myreply_arp(buf)){client_state=ARP_REPLY;? syn_ack_timeout=0; return;}??} delay(10);? syn_ack_timeout++; ?if(syn_ack_timeout==100){//timeout,serveripnotfound ??client_state=IDLE; ??client_data_ready=0;???syn_ack_timeout=0;? ?return;? }}//sendSYNpackettoinitialconnection?if(client_state==ARP_REPLY){ ?//savedestmac? for(i=0;i<6;i++){? ?dest_mac[i]=buf[ETH_SRC_M(jìn)AC+i];??}es.ES_tcp_client_send_packet(buf,80,1200,TCP_FLAG_SYN_V,//flag1,//(bool)maximumsegmentsize1,//(bool)clearsequenceacknumber0,//0=useoldseq,seqack:1=newseq,seqacknodata:newseq,seqackwithdata0,//tcpdatalength ?dest_mac,??dest_ip); ?client_state=SYNC_SENT;?}//getnewpacketif(client_state==SYNC_SENT){plen=es.ES_enc28j60PacketReceive(BUFFER_SIZE,buf);//nonewpacketincomingif(plen==0){return;}//checkippacketsendtoavrornot?//acceptippacketonlyif(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){??return;}//checkSYNACKflag,afterAVRsendSYNserverresponsebysendSYNACKtoAVRif(buf[TCP_FLAGS_P]==(TCP_FLAG_SYN_V|TCP_FLAG_ACK_V)){//sendACKtoanswerSYNACKes.ES_tcp_client_send_packet(buf,80,1200,TCP_FLAG_ACK_V,//flag0,//(bool)maximumsegmentsize0,//(bool)clearsequenceacknumber1,//0=useoldseq,seqack:1=newseq,seqacknodat(yī)a:newseq,seqackwithdat(yī)a0,//tcpdatalength??? ??dest_mac, ??? dest_ip);//setuphttprequesttoserverplen=gen_client_request(buf);//sendhttprequestpacket//sendpacketwithPSHACKes.ES_tcp_client_send_packet(buf,80,//destinat(yī)ionport1200,//sourceportTCP_FLAG_ACK_V|TCP_FLAG_PUSH_V,//flag0,//(bool)maximumsegmentsize0,//(bool)clearsequenceacknumber0,//0=useoldseq,seqack:1=newseq,seqacknodata:>1newseq,seqackwithdataplen,//tcpdat(yī)alengthdest_mac,? ?? ? dest_ip? ? ? ? ?);return;}//afterAVRsendhttprequesttoserver,serverresponsebysenddatawithPSHACKtoAVR//AVRanswerbysendACKandFINACKtoserverif(buf[TCP_FLAGS_P]==(TCP_FLAG_ACK_V|TCP_FLAG_PUSH_V)){plen=es.ES_tcp_get_dlength((uint8_t*)&buf);//sendACKtoanswerPSHACKfromserveres.ES_tcp_client_send_packet(buf,80,//destinationport1200,//sourceportTCP_FLAG_ACK_V,//flag0,//(bool)maximumsegmentsize0,//(bool)clearsequenceacknumberplen,//0=useoldseq,seqack:1=newseq,seqacknodata:>1newseq,seqackwithdata0,//tcpdatalength??? dest_mac,? ?dest_ip);;//sendfinacktodisconnectfromwebserveres.ES_tcp_client_send_packet(buf,80,//destinationport1200,//sourceportTCP_FLAG_FIN_V|TCP_FLAG_ACK_V,//flag0,//(bool)maximumsegmentsize0,//(bool)clearsequenceacknumber0,//0=useoldseq,seqack:1=newseq,seqacknodata:>1newseq,seqackwithdata0, ??? ??dest_mac, ? ?? ? dest_ip? ? );return;}//answerFINACKfromwebserverbysendACKtowebserverif(buf[TCP_FLAGS_P]==(TCP_FLAG_ACK_V|TCP_FLAG_FIN_V)){//sendACKwithseqack=1es.ES_tcp_client_send_packet(buf,80,//destinat(yī)ionport1200,//sourceportTCP_FLAG_ACK_V,//flag0,//(bool)maximumsegmentsize0,//(bool)clearsequenceacknumber1,//0=useoldseq,seqack:1=newseq,seqacknodat(yī)a:>1newseq,seqackwithdata0, ?? ?? ?dest_mac, ????? ? dest_ip ???);? ?client_state=IDLE;? //returntoIDLEstate?? client_data_ready=0; ?//clientdatasent??}}}Theclientdataisgenerat(yī)edinthegen_client_requestroutine.Thefollowingexampleshowsthatatemperat(yī)urereadingisfilledintothehttpbuffer.Thekeyword“pwd”,“client”and“status”areusedfortheserverphpscripttoidentifythedatathatclientsends.uint16_tgen_client_request(uint8_t*buf){?uint16_tplen;?bytei;?plen=es.ES_fill_tcp_data_p(buf,0,PSTR("GET/ethershield_log/save.php?pwd=secret&client="));for(i=0;client_ip[i]!='\0';i++){buf[TCP_DATA_P+plen]=client_ip[i];plen++;}plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("&status=temperat(yī)ure-"));for(i=0;sensorData[i]!='\0';i++){buf[TCP_DATA_P+plen]=sensorData[i];plen++;} plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("HTTP/1.0\r\n")); plen=es.ES_fill_tcp_dat(yī)a_p(buf,plen,PSTR("Host:\r\n")); plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("User-Agent:AVRethernet\r\n"));plen=es.ES_fill_tcp_dat(yī)a_p(buf,plen,PSTR("Accept:text/html\r\n"));?plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Kee(cuò)p-Alive:300\r\n"));?plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Connection:kee(cuò)p-alive\r\n\r\n")); returnplen;}3.WebServerandPHPscriptsTotestthewebclientapplication,IsetupawebserverinmyhomeLANenvironment.IusedtheHYPERLINKwampserverpackage,whichhasApache,PHPandMYSQL,inthewindows.Theinstallationisstraightforward,afterinstallationyouneedtoallowtheclientipaddresstoaccessyourapachewebserverbymodifyingthehttpd.conffile.Forme,Ijustenableallmylocalipaddressesas–##PossiblevaluesfortheOptionsdirectiveare"None","All",#oranycombinat(yī)ionof:#IndexesIncludesFollowSymLinksSymLinksifOwnerMatchExecCGIMultiViews##Notethat"MultiViews"mustbenamed*explicitly*"OptionsAll"#doesn'tgiveittoyou.##TheOptionsdirectiveisbothcomplicatedandimportant.Pleasesee##formoreinformation.#OptionsIndexesFollowSymLinks##AllowOverridecontrolswhatdirectivesmaybeplacedin.htaccessfiles.#Itcanbe"All","None",oranycombinationofthekeywords:#OptionsFileInfoAuthConfigLimit#AllowOverrideall##Controlswhocangetstufffromthisserver.##onlineofflinetag-don'tremoveOrderDeny,Allow#DenyfromallAllowfrom127.0.0.1192.168.1TwoPHPscriptaredevelopedforsavingandshowingthewebclientdata.Thesave.phpisusedtosavewebclientdatatoadata.txtfile.Itlooksforthekeywords“pwd”,“client”and“status”inthehttpdatasentbytheclient,andthenrecordthemwithtimestamps.<?phpfunctionget_val($val){? return$_GET[$val];}$password=get_val('pwd');if($password!='secret'){ echo"<fontcolor=red><b>Accessdenied!?。。?b></font>";?exit;}$client=get_val('client');if($client==''){?echo"<fontcolor=red><b>Wrongclientnumber!!!</b></font>"; exit;}$status=get_val('status');if($status==''){ echo"<fontcolor=red><b>Wrongclientstatus!!!</b></font>";?exit;}$filename="./dat(yī)a.txt";$time=date("Y-n-jH:i:s");$string=$client.'|'.$time.';'.$stat(yī)us."\r\n";$a=fopen("$filename","a+");fputs($a,$string);fclose($a);?>Theindex.phpscriptdynamicallyreadsdatafromthedat(yī)a.txtfileandshowstheminat(yī)ableformat.Itcanbeaccessedforawebbrowserasshownbelow.4.SoftwarestructureAnewversion

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論