基于ESP8266的大棚环境监测设计与实现_第1页
基于ESP8266的大棚环境监测设计与实现_第2页
基于ESP8266的大棚环境监测设计与实现_第3页
基于ESP8266的大棚环境监测设计与实现_第4页
基于ESP8266的大棚环境监测设计与实现_第5页
已阅读5页,还剩27页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

附录BH1750:intBH1750_Read(intaddress){inti=0;Wire.beginTransmission(address);Wire.requestFrom(address,2);while(Wire.available()){buff[i]=Wire.read();i++;}Wire.endTransmission();returni;}voidBH1750_Init(intaddress){Wire.beginTransmission(address);Wire.write(0x10);Wire.endTransmission();}在loop()中循环读取BH1750的值并进行处理输出inti;uint16_tval=0;if(2==BH1750_Read(BH1750address)){val=((buff[0]<<8)|buff[1])/1.2;Serial.print(val,DEC);}delay(1000);OLED:编写oled初始化及显示函数voidOLED_Init(){oled.begin(SSD1306_SWITCHCAPVCC,0x3C);//"SSD1306_SWITCHCAPVCC"表示显示器为OLEDoled.setTextColor(WHITE);//开像素点发光oled.clearDisplay();//清屏}voidOLED_ShowString(uint8_tx,uint8_ty,uint8_tfont_size,Stringstring){oled.setTextSize(font_size);//设置字体尺寸(>=1)oled.setCursor(x,y);//设置显示坐标oled.println(string);//显示内容oled.display();//开启显示}voidOLED_ShowNum(uint8_tx,uint8_ty,uint8_tfont_size,intNum){oled.setTextSize(font_size);oled.setCursor(x,y);oled.println(Num);oled.display();}通过字符串将我们读取到的光照强度和温湿度显示出来OLED_ShowString(1,9,2,"Temp:"+(String)temperature+"C");OLED_ShowString(1,27,2,"Hum:"+(String)humidity+"%");OLED_ShowString(1,45,2,"Light:"+(String)val);数据上报:constchar*dhttopic="temp01";String

msg="#"+(String)temperature+"#"+(String)humidity+"#"+ledstatus+"#"+val+"#"+beepstatus;//数据上传client.publish(dhttopic,msg.c_str());数据下发:

判断下发的数据是on还是offvoidcallback(char*topic,byte*payload,unsignedintlength){

Serial.print("Messagearrived[");

Serial.print(topic);

Serial.print("]");

StringMqtt_Buff="";

for(inti=0;i<length;i++){

Mqtt_Buff+=(char)payload[i];

}

Serial.print(Mqtt_Buff);

Serial.println();

//SwitchontheLEDifan1wasreceivedasfirstcharacter

if(Mqtt_Buff=="on"){//如果接收字符on,亮灯

turnOnLed();//开

}elseif(Mqtt_Buff=="off"){//如果接收字符off,亮灯

turnOffLed();//关

}

Mqtt_Buff="";}微信小程序://

index.js//

获取应用实例const

app

=

getApp()import

mqtt

from

'../../utils/js/mqtt.min.js';//加载mqtt库Page({

data:

{

uid:"cb9e7a55986e43618c454c489688c6a4",//用户密钥,巴法云控制台获取

ledtopic:"SmartAgr01",//控制led的主题,mqtt控制台创建

dhttopic:"temp01",//传输温湿度的主题,控制台创建

device_status:"离线",//

显示led是否在线的字符串,默认离线

ledOnOff:"关闭",

beepOnOff:"正常",

checked:

false,//led的状态。默认led关闭

wendu:"",//温度值,默认为空

shidu:"",//湿度值,默认为空

light:"",//光照值,默认为空

ledicon:"/utils/img/lightoff.png",//显示led图标的状态。默认是关闭状态图标

client:

null,//mqtt客户端,默认为空

},

mqttConnect(){

var

that

=

this

//MQTT连接的配置

var

options=

{

keepalive:

60,

//60s

,表示心跳间隔

clean:

true,

//cleanSession不保持持久会话

protocolVersion:

4,

//MQTT

v3.1.1

clientId:this.data.uid

}

//初始化mqtt连接

this.data.client

=

mqtt.connect('wxs://:9504/wss',options)

//

连接mqtt服务器

this.data.client.on('connect',

function

()

{

console.log('连接服务器成功')

//订阅dht11温湿度主题

that.data.client.subscribe(that.data.dhttopic,

function

(err)

{

if

(err)

{

console.log(err)

}

})

})

//接收消息

that.data.client.on('message',

function

(topic,

message)

{

console.log(topic)

var

msg

=

message.toString()

if(topic

==

that.data.dhttopic){//如果是温湿度主题的消息

//假设上传的数据为#23#45#off,其中温度是23,湿度45,led为关闭状态

if(msg.indexOf("#")

!=

-1){//如果数据里包含#号,表示获取的是传感器值,因为单片机上传数据的时候用#号进行了包裹

//如果有#号就进行字符串分割

var

all_data_arr

=

msg.split("#");

//分割数据,并把分割后的数据放到数组里。

console.log(all_data_arr)//打印数组

if(all_data_arr[3]

!=

undefined){//判断是否上传了led状态

if(all_data_arr[3]

==

"on"){//如果单片机处于打开状态

that.setData({

//数据赋值给变量

ledOnOff:"打开",//赋值led状态

})

}else{

that.setData({

//数据赋值给变量

ledOnOff:"关闭",//赋值led状态

})

}

}

if(all_data_arr[5]

!=

undefined){//判断是否上传了led状态

if(all_data_arr[5]

==

"on"){//如果单片机处于打开状态

that.setData({

//数据赋值给变量

beepOnOff:"异常",//赋值led状态

})

}else{

that.setData({

//数据赋值给变量

beepOnOff:"正常",//赋值led状态

})

}

}

that.setData({

//数据赋值给变量

wendu:all_data_arr[1],//赋值温度

shidu:all_data_arr[2],

//赋值湿度

light:all_data_arr[4],

//赋值光照

})

}

}

//打印消息

console.log('收到消息:'+msg)

})

//断线重连

this.data.client.on("reconnect",

function

()

{

console.log("重新连接")

});

},//屏幕打开时执行的函数

onLoad()

{

//连接mqtt

this.mqttConnect()

//检查设备是否在线

this.getOnline()

//检查设备是打开还是关闭

this.getOnOff()

//获取服务器上现在存储的dht11数据

this.getdht11()

},

//控制灯的函数1,小滑块点击后执行的函数

onChange({

detail

}){

//detail是滑块的值,检查是打开还是关闭,并更换正确图标

this.setData({

checked:

detail,

});

if(detail

==

true){//如果是打开操作

this.data.client.publish(this.data.ledtopic,

'on')//mqtt推送on

this.setData({

ledicon:

"/utils/img/lighton.png",//设置led图片为on

});

}else{

this.data.client.publish(this.data.ledtopic,

'off')//mqtt推送off

this.setData({

ledicon:

"/utils/img/lightoff.png",//设置led图片为off

});

}

},

//点击led图片执行的函数

onChange2(){

var

that

=

this

//如果点击前是打开状态,现在更换为关闭状态,并更换图标,完成状态切换

if(

that.data.checked

==

true){

this.data.client.publish(this.data.ledtopic,

'off')

this.setData({

ledicon:

"/utils/img/lightoff.png",//设置led图片为off

checked:false

//设置led状态为false

});

}else{

//如果点击前是关闭状态,现在更换为打开状态,并更换图标,完成状态切换

this.data.client.publish(this.data.ledtopic,

'on')

that.setData({

ledicon:

"/utils/img/lighton.png",//设置led图片为on

checked:true//设置led状态为tr

温馨提示

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

最新文档

评论

0/150

提交评论