7672浏览
查看: 7672|回复: 5

阿里云物联网应用1——智能灯光

[复制链接]
本帖最后由 泽雨 于 2021-2-23 18:23 编辑

3.1 应用一:智能灯光



1.首先打开阿里云官网,进入物联网应用平台
阿里云物联网应用1——智能灯光图1

点击立即使用(需要登录)
阿里云物联网应用1——智能灯光图2


2.新建项目,在项目名称框编辑,填写信息,如下图所示:
阿里云物联网应用1——智能灯光图3
阿里云物联网应用1——智能灯光图4



3.创建产品,在我们之前创建的智能灯光项目下创建名为智能灯光的产品,如下图所示:
阿里云物联网应用1——智能灯光图5
阿里云物联网应用1——智能灯光图6


点击完成,则会在产品列表出现一个名叫智能灯光的产品,点击查看。
阿里云物联网应用1——智能灯光图7


定义产品功能
选择功能定义后再点击添加自定义功能为智能灯光产品定义一个灯工作 状态的属性,
灯有两种工作状态:亮灭,可用布尔型表示,其中 0 代表灯灭,1 代表灯亮。 如下
图所示:


阿里云物联网应用1——智能灯光图8

点击确认,则会在产品详情页的自定义功能栏看到所定义的功能及标识符。
阿里云物联网应用1——智能灯光图9

阿里云物联网应用1——智能灯光图10



4. 为产品添加设备。为智能灯光生成一个设备,如下图所示:
阿里云物联网应用1——智能灯光图11

复制证书(非必要)
阿里云物联网应用1——智能灯光图12

查看并记录你的设备的三组数据
阿里云物联网应用1——智能灯光图13
阿里云物联网应用1——智能灯光图14

记录完成后将产品上线
阿里云物联网应用1——智能灯光图15




5. 调试设备,按照下图所示将下拉选项全部调试一遍以记录数据
若不调试的话,之后 web 设计指示灯和开关验证数据格式会出错
阿里云物联网应用1——智能灯光图16




6.将 DF 商城页面附件下载并解压到 Arduino IDE 安装目录下的 libraries 文件中
阿里云物联网应用1——智能灯光图17

打开 Arduino IDE,点击文件->示例->DFRobot_Aliyun->SmartLight 项目
(注意开发板选择 Firebattle-ESP32
阿里云物联网应用1——智能灯光图18

修改程序——WiFi 名及密码,直接将其修改成能使用的 WiFi 即可,就不多说了,这
里主要介绍如何获取产品标识符、设备证书信息(ProductKey、DeviceName、
DeviceSecret)、及订阅和上报 TOPIC。设备信息证书。进入智能家居管理项目,在左
侧导航栏选择设备管理->设备,在设备列表中找到我们刚才创建的设备,单击其后的
查看,即可看到该设备的设备证书信息,如下图所示:
阿里云物联网应用1——智能灯光图19
阿里云物联网应用1——智能灯光图20
阿里云物联网应用1——智能灯光图21

至此,智能灯光的 Arduino 程序修改完毕,此时编译上传至 ESP32 即可。执行
端已经 准备完毕。
现在来介绍如何创建一个 Web 可视化开发来实现对 LED 灯的控制和监测了。首先
是 Web 可视化开发的应用如下图所示在项目管理界面中点击主页然后点击新建。输入
名称后点击确认即可。
阿里云物联网应用1——智能灯光图22

Web 页面编辑
阿里云物联网应用1——智能灯光图23

Step1——点击配置按钮,然后将自定义新增页 1 改为 LED
阿里云物联网应用1——智能灯光图24

Step2——添加组件为了美观,我们放上一张背景图,所以先添加一张图片,将图片拖
到画布中,设置为锁定。然后上传一张比较好看的图片。背景图原图如下。
阿里云物联网应用1——智能灯光图25

添加文字——将文字拖到画布中,改为 DFRobot,将字体颜色改为蓝色,贴合背景色。
阿里云物联网应用1——智能灯光图26

添加指示灯——将指示灯拖到画布中,然后配置参数,产品配置为智能灯光,设备配
置为刚才创建的设备 ,属性为灯工作状态,点击验证数据格式,再点击确定,这就配
置完成了.
阿里云物联网应用1——智能灯光图27

添加开关——将开关拖到画布中,然后配置参数,产品配置为智能灯光,设备配置为
之前创建的设备,属性为灯工作状态,点击验证数据格式,再点击确定。
阿里云物联网应用1——智能灯光图28

将指示灯和开关的颜色进行修改,符合背景图的颜色
可用账户设置(可选)
Web 可视化如果要移植使用,需要绑定域名,为了安全需要,绑定域名使用阿里云设置了付费。
如果需要移植使用的,可参考应用设置->域名管理,CDN 付费原则。
如果只是个人 需要不必添加域名,默认系统的域名即可。
阿里云物联网应用1——智能灯光图29

Web可视化发布
点击右上角发布选项,然后跳到第二张图,备注网页信息,直接点击确定,然后得到网页链接。
注意:如果不需要绑定域名,直接点击网页链接,不要点击其他选择。
阿里云物联网应用1——智能灯光图30
阿里云物联网应用1——智能灯光图31

Web 查看
Web的页面已经生成,可直接在网页上点击开关按钮,实物LED就会执行相应的命令
教程pdf附件见下
阿里云物联网应用1——智能灯光图31







闻道  学徒

发表于 2021-3-3 11:39:15

完全按照教程去做,到web可视化开发时,出现以下问题,这是 怎么回事
WedMarch-202103038051..png
回复

使用道具 举报

柳春晓  高级技师

发表于 2021-4-30 16:25:13

闻道 发表于 2021-3-3 11:39
完全按照教程去做,到web可视化开发时,出现以下问题,这是 怎么回事

这个是因为没有调试过虚拟设备,在设备-在线调试-虚拟设备调试,把每一个属性都上传一下就行了
教程中有个“5.调试设备”,你那一步没有操作,所以会出这个错误,如果按照这个帖子一步步完全一样操作是没问题的
回复

使用道具 举报

kevin_wk  学徒

发表于 2023-2-1 16:15:01

本帖最后由 kevin_wk 于 2023-2-1 16:55 编辑

这套代码在新版的阿里云Iot(现在的时间是2023-02-01)会有问题了,问题如下:
LED灯会一直被关闭

问题原因:
新版的阿里云Iot,在添加完设备后,会为设备自动订阅如下主题:/sys/a17x7FncZl0/DPR-LED/thing/event/property/post_reply,如下图所示:

出现问题的地方是,当设备订阅这个主题:/sys/a17x7FncZl0/DPR-LED/thing/event/property/post_reply 后,调用如下方法
  1. ...
  2. /*需要操作的产品标识符*/
  3. String Identifier = "LightStatus";
  4. /*需要上报和订阅的两个TOPIC*/
  5. const char * subTopic = "/sys/a17x7FncZl0/DPR-LED/thing/service/property/set";//****set
  6. const char * pubTopic = "/sys/a17x7FncZl0/DPR-LED/thing/event/property/post";//******post
  7. ...
  8. void callback(char * topic, byte * payload, unsigned int len){
  9.   Serial.print("Recevice [");
  10.   Serial.print(topic);
  11.   Serial.print("] ");
  12.   for (int i = 0; i < len; i++){
  13.     Serial.print((char)payload);
  14.   }
  15.   Serial.println();
  16.   StaticJsonBuffer<300> jsonBuffer;
  17.   JsonObject& root = jsonBuffer.parseObject((const char *)payload);
  18.   if(!root.success()){
  19.     Serial.println("parseObject() failed");
  20.     return;
  21.   }
  22.   const uint16_t LightStatus = root["params"][Identifier];
  23.   if(LightStatus == 1){
  24.     openLight();
  25.   }else{
  26.     closeLight();
  27.   }
  28.   String tempMseg = "{"id":"+ClientId+","params":{""+Identifier+"":"+(String)LightStatus+"},"method":"thing.event.property.post"}";
  29.   char sendMseg[tempMseg.length()];
  30.   strcpy(sendMseg,tempMseg.c_str());
  31.   client.publish(pubTopic,sendMseg);
  32. }
  33. void setup(){
  34.   ...
  35.   /*开机先关灯*/
  36.   closeLight();
  37.   
  38.   /*上报关灯信息*/
  39.   client.publish(pubTopic,("{"id":"+ClientId+","params":{""+Identifier+"":0},"method":"thing.event.property.post"}").c_str());
  40. }
复制代码

在函数setup()中调用:
  1. client.publish(pubTopic,("{"id":"+ClientId+","params":{""+Identifier+"":0},"method":"thing.event.property.post"}").c_str());
复制代码
将会在主题 /sys/a17x7FncZl0/DPR-LED/thing/event/property/post 上发送消息,
阿里云收到该主题消息后,会在这个主题 /sys/a17x7FncZl0/DPR-LED/thing/event/property/post_reply 发送消息,而设备已经订阅了这个主题(在阿里云IOT Studio 中添加设备时,平台就自动为设备订阅了该主题,这是问题所在!),
故设备会收到这个主题上的消息,在串口窗口可以看到这个主题返回的消息如下:
  1. 15:00:16.777 -> Recevice [/sys/a17x7FncZl0/DPR-LED/thing/event/property/post_reply] {"code":200,"data":{},"id":"12345","message":"success","method":"thing.event.property.post","version":"1.0"}
复制代码
很明显,在返回Json对象中根本没有属性 LightSwitch
  1. /*需要操作的产品标识符*/
  2. String Identifier = "LightSwitch";
复制代码
如下代码
  1.   const uint16_t LightStatus = root["params"][Identifier];
  2.   if(LightStatus == 1){
  3.     openLight();
  4.   }else{
  5.     closeLight();
  6.   }
复制代码

LightStatus 最终值为0,将会关闭LED:更糟糕的是,在 callback() 函数中接着执行如下代码:
  1.   client.publish(pubTopic,sendMseg);
复制代码

在这个主题 /sys/a17x7FncZl0/DPR-LED/thing/event/property/post 上发送消息,
又引发回调函数 callback() 响应主题 /sys/a17x7FncZl0/DPR-LED/thing/event/property/post_reply,

就这样造成死循环,灯将一直被关闭。

在这里,希望官方验证下是否存在上述问题,考量下是否要更新下示例代码,
否则让学习者购买了套件,所有示例都运行出现异常,打击了初学者的信心,同时也有损自己品牌的口碑








回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-2-1 17:30:35

厉害厉害
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-2-1 17:33:38

赞赞赞赞赞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail