您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于Wi-Fi与MQTT的远程控制和数据采集实验
第1页/共7页2016-2017学年第二学期课程实验报告课程名称:无线传感网络实验名称:基于Wi-Fi与MQTT的远程控制和数据采集实验姓名班级学号同组同学实验课表现出勤、表现得分25%25实验报告得分50%实验总分操作结果得分25%25实验目的了解WiFi的工作原理和技术特点,通过MQTT即时通讯平台,利用NodeMCU开发一个基于Wi-Fi的远程控制和数据采集实验。实验内容以小组为单位,利用NodeMCU和ESP8266实现互联网的连接,通过MQTT代理服务器与手机或者PC机通讯,实现通过手机或者PC机控制和采集NodeMCU的节点(如控制LED灯的开关/采集温湿度数据)的目的。doubleFahrenheit(doublecelsius){return1.8*celsius+32;}//摄氏温度度转化为华氏温度doubleKelvin(doublecelsius){returncelsius+273.15;}//摄氏温度转化为开氏温度//露点(点在此温度时,空气饱和并产生露珠)第2页/共7页//参考:(doublecelsius,doublehumidity){doubleA0=373.15/(273.15+celsius);doubleSUM=-7.90298*(A0-1);SUM+=5.02808*log10(A0);SUM+=-1.3816e-7*(pow(10,(11.344*(1-1/A0)))-1);SUM+=8.1328e-3*(pow(10,(-3.49149*(A0-1)))-1);SUM+=log10(1013.246);doubleVP=pow(10,SUM-3)*humidity;doubleT=log(VP/0.61078);//tempvarreturn(241.88*T)/(17.558-T);}//快速计算露点,速度是5倍dewPoint()//参考:(doublecelsius,doublehumidity){doublea=17.271;doubleb=237.7;doubletemp=(a*celsius)/(b+celsius)+log(humidity/100);doubleTd=(b*temp)/(a-temp);returnTd;}#includeESP8266WiFi.h#includePubSubClient.h#includedht11.h#defineDHT11PIN2//使用2引脚口作为OneWire接线引脚//Updatethesewithvaluessuitableforyournetwork.constchar*ssid=ITC;constchar*password=itcitcitc;constchar*mqtt_server=123.206.123.183;WiFiClientespClient;PubSubClientclient(espClient);longlastMsg=0;charmsg[50];dht11DHT11;voidsetup(){pinMode(BUILTIN_LED,OUTPUT);//InitializetheBUILTIN_LEDpinasanoutputSerial.begin(9600);setup_wifi();第3页/共7页client.setServer(mqtt_server,1883);client.setCallback(callback);Serial.begin(9600);Serial.println(DHT11TESTPROGRAM);Serial.print(LIBRARYVERSION:);Serial.println(DHT11LIB_VERSION);Serial.println();}voidsetup_wifi(){delay(10);//WestartbyconnectingtoaWiFinetworkSerial.println();Serial.print(Connectingto);Serial.println(ssid);WiFi.begin(ssid,password);while(WiFi.status()!=WL_CONNECTED){delay(500);Serial.print(.);}Serial.println();Serial.println(WiFiconnected);Serial.println(IPaddress:);Serial.println(WiFi.localIP());}voidcallback(char*topic,byte*payload,unsignedintlength){Serial.print(Messagearrived[);Serial.print(topic);Serial.print(]);for(inti=0;ilength;i++){Serial.print((char)payload[i]);}Serial.println();//SwitchontheLEDifan1wasreceivedasfirstcharacterif((char)payload[0]=='1'){digitalWrite(BUILTIN_LED,LOW);//TurntheLEDon(NotethatLOWisthevoltagelevel//butactuallytheLEDison;thisisbecause//itisacivelowontheESP-01)第4页/共7页}else{digitalWrite(BUILTIN_LED,HIGH);//TurntheLEDoffbymakingthevoltageHIGH}}voidreconnect(){//Loopuntilwe'rereconnectedwhile(!client.connected()){Serial.print(AttemptingMQTTconnection...);//Attempttoconnectif(client.connect(ESP8266Client)){Serial.println(connected);//Onceconnected,publishanannouncement...client.publish(xhs,reconnect);//...andresubscribeclient.subscribe(inTopic);}else{Serial.print(failed,rc=);Serial.print(client.state());Serial.println(tryagainin5seconds);//Wait5secondsbeforeretryingdelay(5000);}}}voidloop(){Serial.println(\n);intchk=DHT11.read(DHT11PIN);//从OneWire接线引脚读数Serial.print(Readsensor:);switch(chk){caseDHTLIB_OK:Serial.println(OK);break;caseDHTLIB_ERROR_CHECKSUM:Serial.println(Checksumerror);break;caseDHTLIB_ERROR_TIMEOUT:Serial.println(Timeouterror);break;default:Serial.println(Unknownerror);第5页/共7页break;}Serial.print(Humidity(%):);Serial.println((float)DHT11.humidity,1);//输出1位小数Serial.print(Temperature(oC):);Serial.println((float)DHT11.temperature,2);//显示摄氏温度Serial.print(Temperature(oF):);Serial.println(Fahrenheit(DHT11.temperature),2);//显示华氏温度Serial.print(Temperature(K):);Serial.println(Kelvin(DHT11.temperature),2);//显示开氏温度Serial.print(DewPoint(oC):);Serial.println(dewPoint(DHT11.temperature,DHT11.humidity));Serial.print(DewPointFast(oC):);Serial.println(dewPointFast(DHT11.temperature,DHT11.humidity));delay(2000);if(!client.connected()){reconnect();}client.loop();longnow=millis();if(now-lastMsg2000){lastMsg=now;snprintf(msg,75,%ld摄氏度%ld湿度,DHT11.temperature,DHT11.humidity);Serial.print(Publishmessage:);Serial.println(msg);client.publish(xhs,msg);}}实验过程中遇到的问题以及如何解决的?(可以写多条,是否认真填写将影响实验成绩)第6页/共7页在实验过程中我遇到了.......问题没有问题的情况下,是否有创新思路(或多做哪些工作)。本次实验的体会(可以写多条,是否认真填写将影响实验成绩)通过本实验,我理解/了解/熟悉了.......1.MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;2、对负载内容屏蔽的消息传输;3、使用TCP/IP提供网络连接;4、有三种消息发布服务质量:“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。“至少一次”,确保消息到达,但消息重复可能会发生。“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。5、小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量;6、使用LastWill和Testament特性通知有关各方客户端异常中断的机制;[2.3.思考题1教师评价第7页/共7页实验态度A.很认真B.认真C.比较认真D.不认真独立完成情况A.很好B.好C.比较好D.不好收获和体会A.多B.比较多C.少D.很少思考题回答情况A.很好B.好C.比较好D.不好评阅教师:杨博雄日期:2017.4.
本文标题:基于Wi-Fi与MQTT的远程控制和数据采集实验
链接地址:https://www.777doc.com/doc-2312800 .html