版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
附录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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年山东省春季高考《数学》全真模拟试题(一)
- 数学+答案江西萍乡市2026年萍乡市高三年级第二次模拟考试(萍乡二模)(4.20-4.21)
- 深度解析(2026)《GBT 26548.1-2018手持便携式动力工具 振动试验方法 第1部分:角式和端面式砂轮机》
- 2025挖掘机(采购租赁)合同
- 深度解析(2026)《GBT 24364-2023信息安全技术 信息安全风险管理实施指南》
- YDT 2052-2015《域名系统安全防护要求》(2026年)宣贯培训
- Unit 4 We are having an English class.教学设计-2025-2026学年小学英语一级下剑桥少儿英语
- GBT 24353-2022风险管理 指南(2026年)宣贯培训
- CJT 487-2015《城镇供热管道用焊制套筒补偿器》(2026年)宣贯培训
- 普通基础语言与概论 9
- 2026年小升初数学模拟考试题(难)
- 第11课《山地回忆》课件 2025-2026学年统编版语文七年级下册
- 2026广岩国际投资有限责任公司招聘14人备考题库及答案详解(网校专用)
- 2026广西北部湾国际港务集团有限公司春季招聘273人建设考试参考题库及答案解析
- (2026年版)发热伴血小板减少综合征防控方案解读课件
- 现实中的变量课件2025-2026学年北师大版数学七年级下册
- 2026广东省盐业集团有限公司校园招聘备考题库及答案详解(真题汇编)
- 2025公共汽车和电车中途站候车设施配置标准
- 全过程工程咨询企业服务能力评价指标和评分标准表
- Ozon培训课件教学课件
- 高中生物教学实践生命观念培养的案例分析与教学启示教学研究课题报告
评论
0/150
提交评论