欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > esp8266外控LED灯颜色调节亮度

esp8266外控LED灯颜色调节亮度

2024/11/13 21:13:34 来源:https://blog.csdn.net/tundra38/article/details/143740525  浏览:    关键词:esp8266外控LED灯颜色调节亮度

仍然使用,小程序控制,通过阿里云的物联网模型,选择ESP8266上外接的LED的颜色,再调节亮度
首先,根据逻辑,应该先从小程序传出一个物模型调用,选择颜色,再传出亮度的物模型调用,调节亮度。

阿里云上的物模型如下:
先是颜色,注意功能类型选择服务,标识符是代码通讯的标志,注意服务的标识符和参数的标识符可以一致也可以不一致,跟代码里的对应就可以,参数这里一个颜色也够了
在这里插入图片描述
在这里插入图片描述
然后亮度调节的物模型,一样类型是服务,注意标识符,参数可以只有一个
在这里插入图片描述
在这里插入图片描述
对应的小程序函数如下:

//调用服务使用单选框改变颜色:在阿里云的物理模型添加服务标识符colorset,参数里的标识符也colorset,类型text
radioChangeColor: function (e) {var DeviceName = this.options.deviceNamevar that = thisconsole.log("radio"+e.detail.value)//防止重复点击that.setData({buttonDisabled: true})var str1 = "{\"colorset\":"str1 += "\""+e.detail.value+"\""//"\""+变量+"\""str1 += "}"//如果想传出两个变量,物模型标识符colorset,其中参数colorset字符串,light整型var str2 = "{\"colorset\":"str2 += "\""+e.detail.value+"\""str2 +=",\"light\":"str2 += ""+this.data.x.light+""str2 += "}"console.log('str2')   //str1此时为字符串{'color':hh}console.log(str2)console.log('str1')   //str1此时为字符串{'color':hh}console.log(str1)console.log("str1",typeof str1) //x为对象格式object//var Obj = that.data.y//console.log("json",that.data.y)// console.log(Obj)aliSdk.request({//Action: "SetDeviceProperty",Action: "InvokeThingService",//IotInstanceId:"iot-06z00j02g2qt4mg",//实例IDProductKey: app.globalData.productKey,DeviceName: DeviceName,Identifier: "colorset",//虚拟设备收到消息received topic=/sys/a1S84XbXw8t/test02/thing/service/OpenDevice, payload={"method":"thing.service.OpenDevice","id":"207343321","params":{},"version":"1.0.0"}//Args: str1Args: str2// Items: '{"color":"red"}'//无参服务,所以传空}, {method: "POST"},(res) => {console.log("success")console.log(res) //查看返回response数据that.setData({openedDevice: !that.data.openedDevice})},(res) => {console.log("fail")wx.showToast({title: '网络连接失败',icon: 'none',duration: 1000,complete: () => {}})},(res) => {console.log("complete")that.setData({buttonDisabled: false})})
},

调节亮度的函数如下:

changeDeviceLight: function (e) {var DeviceName = this.options.deviceNamevar that = thisconsole.log(`携带值为`, e.detail.value)console.log("x",typeof that.data.x) //x为对象格式objectthat.data.x.light=e.detail.value    //将x里的数值替换成当前调节器的值var str = JSON.stringify(that.data.x);    //将对象转换成字符串,//var Obj = JSON.parse(str);    如果需要字符串转换成对象console.log("str",typeof str)        //此处可以校验是否已是字符串console.log("str",str)console.log("lightvalue",that.data.x)//防止重复点击that.setData({buttonDisabled: true})aliSdk.request({Action: "InvokeThingService",//IotInstanceId:"iot-06z00j02g2qt4mg",//实例IDProductKey: app.globalData.productKey,DeviceName: DeviceName,Identifier: "light",//Args: "{'light':51}" //传送参数时,格式为{'Identifier':数值},传入格式必须有引号,也就是对象转换成字符串格式Args: str}, {method: "POST"},(res) => {console.log("success")console.log(res) //查看返回response数据that.setData({openedDevice: !that.data.openedDevice})},(res) => {console.log("fail")wx.showToast({title: '网络连接失败',icon: 'none',duration: 1000,complete: () => {}})},(res) => {console.log("complete")that.setData({buttonDisabled: false})})
},

arduino这边,有一个报错点,就是第一次改变灯的颜色调用mqtt解析函数的时候,会获取颜色参数,放入key2中,第二次调节亮度时再次调用mqtt解析函数,key2又被冲掉了,所以key2不能在函数调用的时候才被创建初始化,应该在一开始定义,一开始定义String key2;arduino中的字符串应该是双引号定义
而后 String key2 = jsonBuffer[“params”][“colorset”]; 这里由于arduinoJson库会报错
因此转接了一次

 if (method == "thing.service.light") {Serial.println(key2);key1 = jsonBuffer["params"]["light"];Serial.println(key1);if(key2 == "r"){Serial.println("ok");analogWrite( LED_PIN1, key1);digitalWrite( LED_PIN2, LOW);digitalWrite( LED_PIN3, LOW);}// AliyunIoTSDK::begin(espClient,PRODUCT_KEY,DEVICE_NAME,DEVICE_SECRET,REGION_ID);//  AliyunIoTSDK::send("colour", "red");}//如果想实现流水灯的效果,在某个信号开启后,用delay即可,3000=3s}if (method == "thing.service.colorset") {String  key3 = jsonBuffer["params"]["colorset"];key2=key3;Serial.println(key2);//digitalWrite(LED_BUILTIN, HIGH);digitalWrite( LED_PIN1, HIGH);digitalWrite( LED_PIN2, LOW);digitalWrite( LED_PIN3, LOW);// AliyunIoTSDK::begin(espClient,PRODUCT_KEY,DEVICE_NAME,DEVICE_SECRET,REGION_ID);//  AliyunIoTSDK::send("colour", "red");}//如果想实现流水灯的效果,在某个信号开启后,用delay即可,3000=3s}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com