阿里云IoT灯光控制

2019-03-145.2万
精华项目
AI 快速预览详细 收起
本教程介绍了如何使用DFRobot FireBeetle ESP32主控和Gravity LED灯,结合阿里云IoT平台,实现远程控制LED灯的亮灭。首先需要在阿里云IoT平台上创建产品和设备,然后开发一个简单的移动App。通过这个App,用户可以随时随地监测和控制LED灯的工作状态。整个过程不需要复杂的开发技巧,适合初学者入门。
阿里云IoT之灯光控制


阿里云IoT灯光控制图1

       寒冷的冬季,你躺在床上,睡意正浓,突然门缝传来一丝丝灯光,你才发现客厅灯没关,此时你是否想要一个意念就能让灯关。随着物联网概念的提出,万物联网,万物通信成了必然趋势,它虽不能实现意念控制灯的亮灭,但可以辅助我们,通过移动物体(如手机等)远程控制灯的亮灭,监控灯的工作状态,这样你就可以随时随地检测灯工作状态,并根据情况操作灯,而无需走到客厅的开关的位置来关灯了。怎么样,是不是很方便,那如何搭建这样能随时随地监测和控制灯的系统呢?
       上述内容提到了一个很重要的概念“物联网”,那么,什么是物联网呢?简而言之,就是万物联网,万物之间建立通信,实现物与物之间的交流,这个物不是指物体,而是包括物体,生命体在内的世界上各式各样的能具体化的事物个体,如一个人,一只鸟,一条鱼,一个杯子,一本书……。说到这里,估计大家都明白了,要实现随时随地监测和控制灯,就要解决3个关键点:
    a. 能上网的移动控制设备;
    b.灯设备连接到网络上;
    c.灯设备与手机建立网络通信连接。
一看到这3个关键点,相信有的小伙伴已经想到了,那就是可以通过手机App WiFi控制灯的亮灭。但是,对于非专业开发人员的小伙伴来说,不论是开发一个手机App,还是通过WiFi搭建手机与灯的连接,都是令人头痛甚至望而生畏的问题。不过现在不用担心了,DFRobot和阿里云IoT为我们解决了这个难题。
       DFRobot是中国领先从事开源硬件、机器人产品和创客教育的高科技企业。旨在通过提供创新的工具和内容,让全球创客们能更容易将创意变成现实。我们可以借助DFRobot的FireBettle系列ESP32主控,扩展板以及Gravity传感器系列的LED灯等工具以及Arduino软件来搭建软硬件平台。
       阿里云IoT致力于实现万物互联的美好世界,为生态合作伙伴提供基于云端一体化、安全物联网基础平台等,在通过该平台高效连接,管理设备的同时,其开放能力使合作伙伴更高效、低成本地构建各种创新的物联网应用场景。通过它用户可以自己搭建简单的移动APP,再通过手机微信扫描该App的二维码,就可搭建简单的移动应用App,而无需开发技巧。
       此篇重点来了,该应用教程主要介绍了,如何用DFRobot的FireBettle系列的ESP32主控和Gravity系列的LED灯,搭配阿里云IoT平台实现用手机App随时随地远程地控制LED灯亮灭的操作。
好了,废话不多说了,下面就介绍智能灯光的应用教程吧!

所需材料
FireBeetle Gravity扩展板 x1
数字食人鱼红色LED发光模块 x1
智能手机 x1


制作步骤
在制作之前,先下载并安装下列依赖库:
该应用主要分为2个部分:
       一部分是在阿里云IoT上建立产品之间的连接,并生成App二维码,共手机端用户下载;
       另一部分是让连接到ESP32主控上的灯上网,并建立和阿里云IoT平台的连接。

一、在阿里云IoT平台上建立LED灯与手机App的联系

准备工作
       1. 注册并登录阿里云账号
       打开谷歌浏览器,输入网址http://iot.aliyun.com,出现图1所示界面,点击该界面右上角的【登录】按钮,再点击【密码登录】框的“免费注册”选项即会出现如图2所示的注册界面,如果已有账号直接登录即可。
阿里云IoT灯光控制图2
图1 阿里云IoT主界面

阿里云IoT灯光控制图3
图2 阿里云IoT账号注册界面
       2.进入阿里云IoT的物联网平台页面
       登录完成后,会进入上图1所示的阿里云IoT主界面,点击如图3所示的【设备接入】”按钮,会跳转到“物联网设备接入”界面,如果是第一次进入,这个按钮应该是【立即开通】,根据要求开通就好了,是免费的。而已经开通了的用户会直接进入图4界面,点击【管理控制台】按钮即可进入物联网平台界面,如图5所示,
果你此前没有创建任何产品,其产品列表处会显示“没有找到产品”,用户可以在该界面完成产品,设备的创建,以及开发相应的开发服务
阿里云IoT灯光控制图4
                                                                                                                                               图3 设备接入进入界面


阿里云IoT灯光控制图5
              图4 物联网设备接入界面      
                                                            
                    阿里云IoT灯光控制图20                  
5 物联网平台界面

以上均为准备工作,主要目的是能成功进入【物联网平台】界面,接下来就是在该界面实现产品的创建设备的创建,以及开发移动App项目

创建产品
该步骤主要分为2部分:
        创建并完善产品信息;
        定义产品的功能。

       1.创建名为“智能灯光系统”的产品
       登录阿里云账号后,直接进入阿里云IoT的物联网平台界面,具体进入方法参考“进入阿里云IoT管理控制台界面”小节;选择物联网平台页面左侧导航栏上的设备管理>产品,在产品管理页面,单击创建产品;选择高级版,单击下一步。具体设置参考图6。
阿里云IoT灯光控制图6
图6 产品创建页面

根据页面提示设置参数,创建一个产品名为“智能灯光系统”的产品,如图7所示,并单击完成。产品创建完成后,将自动出现在产品列表中。
阿里云IoT灯光控制图7
图7 产品信息填写界面
        2.定义产品功能
        为“智能灯光系统”产品添加一个功能名为“工作状态”,产品标识符为“LightStatus”的属性。在产品列表中,找到名为“智能灯光系统”的产品,单击查看,进入产品详情页;在产品详情页中单击功能定义;在自定义功能栏,单击添加功能;设置属性,将LED灯的工作状态定义为产品属性,0表示灯灭,1表示灯亮。具体设置参考图8,单击确定。功能添加完成后,将自动出现在自定义功能列表中,用户可在该处查看产品的标识符“LightStatus”。
阿里云IoT灯光控制图8
图8 添加产品功能界面

如此,一个名为“智能灯光系统”的产品就创建好了,此步骤中,用户要留意产品的标识符“LightStatus”,以供Arduino编程所用。

为产品添加设备
该步骤主要是为已经创建的产品添加设备,即将一个或多个设备挂载在某个产品上。
        
        1. 挂载名为“Family_Light”的设备
        在“智能灯光系统”产品下挂载名称为“Family_Light”的设备。选中左侧导航栏的设备管理>设备,进入设备管理页面;单击添加设备,选中之前创建的产品,并输入设备名称“Family_Light”,如图9所示,单击确认。记录设备证书内容。设备证书包含的ProductKey、DeviceName和DeviceSecret ,是设备后续与物联网平台交流的重要凭证,请妥善保管。设备挂载完成后,将自动出现在设备列表中。
阿里云IoT灯光控制图21
图9 设备添加界面

至此,产品“智能灯光系统”下就挂载了一个设备名为“Family_Light”的设备。

手机App开发服务
如今,设备灯已经创建完毕,接下来就该准备一个App来控制设备了,该步骤主要分为3部分:
        新建项目;
        导入产品与设备;
        创建移动应用开发。

       1.新建项目
       新建一个项目名为“智能灯光管理”的项目。选中“物联网平台”页面左侧导航栏的开发服务,进入物联网开发页面,单击右侧项目列表的新建项目,填写完成后,具体设置参考图10,单击确定后,新建的“智能灯光管理”项目会自动出现在项目列表中。
阿里云IoT灯光控制图22
图10 项目信息填写界面
        2.导入产品和设备
        将刚才创建的“智能灯光系统”产品和“Family_Light”设备导入新建的“智能灯光管理”项目中。单击“智能灯光管理”项目的查看按钮,进入“智能灯光管理”项目管理页面;单击右上角的导入产品,选中“智能灯光系统”产品,单击导入,如图11所示。导入成功后,关联设备和关联产品的数字会发生变化。
阿里云IoT灯光控制图23
图11 产品导入选择界面
       3.创建移动应用开发
       该步骤主要分为5部分:App的UI界面拖建;关联设备与UI控件;App首页路由配置;账号用户添加;手机App发布。
      
       搭建App名为“家庭灯控制”App的UI界面
       选中“智能灯光管理”项目左侧导航栏的移动应用开发,单击新增移动应用,选择可视化搭建,新建一个应用名为“家庭灯控制”的App,单击完成,具体参考图12选中弹出的模板Link Develop公版应用,进入“家庭灯控制”移动应用页面。
阿里云IoT灯光控制图9
图12 “家庭灯控制”移动应用创建
选中左侧导航栏的自定义页面>自定义新增页,编辑,将其修改为“家庭灯控制页面”,接下来就是用鼠标将左侧导航栏的可视化组件拖动到中间的“家庭灯控制页面”中去,组件的具体用法,可自行浏览右下角的如何使用组件?,图片参考如图13所示,最终设计的UI界面如图14所示:
阿里云IoT灯光控制图10
图13 家庭灯控制移动应用管理页面

阿里云IoT灯光控制图11
图14 “家庭灯控制”应用UI设计图
       关联产品设备与UI控件
       此步骤主要是将旨在“家庭灯控制页面”所示的“指示灯”,“开关”等控件与“Family_Light”设备关联起来,达到通过UI界面监测和控制 “Family_Light”设备的工作状态。
       组件的拖动及参数设置这里就不多说了,下面主要介绍一下如何将“指示灯”,“开关”等控件与“Family_Light”设备关联起来?选中的“家庭灯控制页面”的指示灯控件,再单击右侧栏的数据选项;点击链接,选中Family_Light”设备选项,点击确定,选中展示数据框里的“工作状态”选项,保存,及成功将“指示灯”控件与“Family_Light”设备关联,如图15所示。“开关”控件的关联方式同“指示灯”控件一致,如图16所示:
阿里云IoT灯光控制图12
图15 关联“指示灯”控件与“Family_Light”设备

阿里云IoT灯光控制图13
图16 关联“开关”控件与“Family_Light”设备
        App首页路由配置
        该步骤主要是配置App的跳转页面,设置了后,就可以通过它跳转到上述的“家庭灯控制页面”界面。
选中“家庭灯控制”移动应用页面左侧导航栏的模板页面>首页,单击右侧栏的新增页面路由,根据要求填写,如图17所示,这里的标题相当于App的导航栏。
阿里云IoT灯光控制图14
图17 App首页导航栏配置
        账号用户添加
        该步骤添加用户的账户和密码,主要是为“家庭灯控制”App首次登录时所用。
        选中“家庭灯控制”移动应用页面左侧导航栏的账号,单击添加用户,如图18所示,按要求填写信息,记住账号(手机号)和密码。
阿里云IoT灯光控制图15
图18 账号添加页面
       手机App发布
     “家庭灯管理”App开发完成后,点击发布后,用户即可将其下载到手机上。
       点击右上角的发布到线上选项,根据你的手机系统选择Android发布或iOS发布如下图19所示,单击我只想自己使用,单击随机生成,单击下一步,然后耐心等待打包,最终会形成如图20所示的二维码,此时用户可通过手机微信扫描该二维码,即可下载安装该App。
阿里云IoT灯光控制图16
图19 App发布

阿里云IoT灯光控制图17
图20 App微信二维码图
手机App安装后完成后,如图21所示:
阿里云IoT灯光控制图18
图21 “家庭控制灯”App安装完成
由此,一个名为“家庭灯控制”的App即开发完成,可投入使用,首次安装,需登录,账号和密码就是刚才设置的账号和密码,具体参考“账户用户添加”小节。接下来,就是修改Arduino程序,并将程序下载到ESP32主控上,即可打开手机App实现对LED灯的控制了。


二、建立物理设备LED灯和阿里云IoT平台的连接
       第一步已经建立了LED灯虚拟设备同App的联系,第二步就是将我们的LED灯设备关联到上一步建立的虚拟设备上,这就需要借助到我们的Arduino平台了。
      
       为了让连接到ESP32的LED灯上网,我们需要借助ESP32的WiFi模块,为此我们需要配置WiFi的名称和密码,这个WiFi和密码的配置就不多赘述了,把你家庭的WiFi名和密码替换到如图22所示的“配置WiFi和密码”项中即可;网络配置完毕后,我们需要建立物理设备LED灯同阿里云IoT虚拟设备的联系,为此我们需要配置如下几点:u设备证书信息;v产品标识符;w 上报和订阅TOPIC。接下来,是介绍如何从阿里云IoT上获取这些信息,获取后,将信息在如图22所示的程序中修改即可。
阿里云IoT灯光控制图24
图22 设备灯demo信息修改示意图
        1.设备信息获取
        该设备信息主要需要获取以下3种元素:ProductKey;kDeviceName;lDeviceSecret。
上述3种信息,可在“设备管理”创建的Family_Light设备中查看。进入“物联网平台”页面,选择设备管理>设备,单击“Family_Light”设备名选项后的查看按钮,进入设备详情页,单击设备信息,即可查看ProductKey、DeviceName和DeviceSecret,如图23所示。具体查看可参考“为产品添加设备”小节。
阿里云IoT灯光控制图25
图23 设备信息获取页面
        2.产品标识符获取
        该产品标识符,就是为产品定义功能时,你自定义的标识符,可在“产品管理”的“功能定义页”页面查看。选中设备管理>产品,单击查看,单击功能定义,如图24所示,具体可参考“定义产品的功能”小节。
阿里云IoT灯光控制图26
图24 产品标识符获取页面
        3.上报和订阅TOPIC获取
        该信息可在设备详情页内查看,进入设备详情页,单击Topic列表,即可看到如图25所示的页面,它显示的是“发布”和“订阅”,那个“上报”对应“发布”。
阿里云IoT灯光控制图27
图25 上报和订阅信息获取页面
最后,将上述获取的信息,复制粘贴到Arduino程序中,再将程序上传至连接有LED灯的ESP32设备上,复位,此时打开手机手机App上的“家庭灯控制”App即可自由控制LED灯的亮灭了,如下图26所示,至此,一个用手机App随时随地控制LED灯的项目即开发完成。
阿里云IoT灯光控制图19


图26 手机控制LED灯图
程序代码

[mw_shl_code=cpp,true]#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_Aliyun.h"

#define BEDROOD_LIGHT  D2

/*配置WIFI名和密码*/
const char * WIFI_SSID     = "WIFI_SSID";
const char * WIFI_PASSWORD = "WIFI_PASSWORD";

/*配置设备证书信息*/
String ProductKey = "you Product Key";
String ClientId = "12345";/*自定义ID*/
String DeviceName = "you Device Name";
String DeviceSecret = "you Device Secret";

/*配置域名和端口号*/
String ALIYUN_SERVER = "iot-as-mqtt.cn-shanghai.aliyuncs.com";
uint16_t PORT = 1883;

/*需要操作的产品标识符*/
String Identifier = "you Identifier";

/*需要上报和订阅的两个TOPIC*/
const char * subTopic = "you sub Topic";//****set
const char * pubTopic = "you pub Topic";//******post

DFRobot_Aliyun myAliyun;
WiFiClient espClient;
PubSubClient client(espClient);

static void openLight(){
  digitalWrite(BEDROOD_LIGHT, HIGH);
}

static void closeLight(){
  digitalWrite(BEDROOD_LIGHT, LOW);
}

void connectWiFi(){
  Serial.print("Connecting to ");
  Serial.println(WIFI_SSID);
  WiFi.begin(WIFI_SSID,WIFI_PASSWORD);
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("WiFi connected");
  Serial.print("IP Adderss: ");
  Serial.println(WiFi.localIP());
}

void callback(char * topic, byte * payload, unsigned int len){
  Serial.print("Recevice [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < len; i++){
    Serial.print((char)payload);
  }
  Serial.println();
  StaticJsonBuffer<300> jsonBuffer;
  JsonObject& root = jsonBuffer.parseObject((const char *)payload);
  if(!root.success()){
    Serial.println("parseObject() failed");
    return;
  }
  const uint16_t LightStatus = root["params"][Identifier];
  if(LightStatus == 1){
    openLight();
  }else{
    closeLight();
  }
  String tempMseg = "{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":"+(String)LightStatus+"},\"method\":\"thing.event.property.post\"}";
  char sendMseg[tempMseg.length()];
  strcpy(sendMseg,tempMseg.c_str());
  client.publish(pubTopic,sendMseg);
}

void ConnectAliyun(){
  while(!client.connected()){
    Serial.print("Attempting MQTT connection...");
    /*根据自动计算的用户名和密码连接到Alinyun的设备,不需要更改*/
    if(client.connect(myAliyun.client_id,myAliyun.username,myAliyun.password)){
      Serial.println("connected");
      client.subscribe(subTopic);
    }else{
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}
void setup(){
  Serial.begin(115200);
  pinMode(BEDROOD_LIGHT,OUTPUT);
  
  /*连接WIFI*/
  connectWiFi();
  
  /*初始化Alinyun的配置,可自动计算用户名和密码*/
  myAliyun.init(ALIYUN_SERVER,ProductKey,ClientId,DeviceName,DeviceSecret);
  
  client.setServer(myAliyun.mqtt_server,PORT);
  
  /*设置回调函数,当收到订阅信息时会执行回调函数*/
  client.setCallback(callback);
  
  /*连接到Aliyun*/
  ConnectAliyun();
  
  /*开机先关灯*/
  closeLight();
  
  /*上报关灯信息*/
  client.publish(pubTopic,("{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":0},\"method\":\"thing.event.property.post\"}").c_str());
}

void loop(){
  if(!client.connected()){
    ConnectAliyun();
  }
  client.loop();
}[/mw_shl_code]

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(21)
雷菡
雷菡
看到前面kevin_wk说阿里云IoT更新后有问题,灯不会亮了。这个案例目前还能实现不?能实现的话,我就整一个作为案例,不能实现的话,就不费力气啦。
kevin_wk
kevin_wk
这套代码在新版的阿里云Iot(现在的时间是2023-02-01)会有问题了,问题如下:
LED灯会一直被关闭
问题原因:
新版的阿里云Iot,在添加完设备后,会为设备自动定义如下主题,如下图所示:
attach://154277.png
出现问题的地方是,当设备订阅这个主题: 后
调用如下方法
[code]/*需要操作的产品标识符*/
String Identifier = "LightStatus";
/*需要上报和订阅的两个TOPIC*/
const char * subTopic = "/sys/a17x7FncZl0/DPR-LED/thing/service/property/set";//****set
const char * pubTopic = "/sys/a17x7FncZl0/DPR-LED/thing/event/property/post";//******post
...
void callback(char * topic, byte * payload, unsigned int len){
Serial.print("Recevice [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < len; i++){
Serial.print((char)payload[i]);
}
Serial.println();
StaticJsonBuffer<300> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject((const char *)payload);
if(!root.success()){
Serial.println("parseObject() failed");
return;
}
const uint16_t LightStatus = root["params"][Identifier];
if(LightStatus == 1){
openLight();
}else{
closeLight();
}
String tempMseg = "{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":"+(String)LightStatus+"},\"method\":\"thing.event.property.post\"}";
char sendMseg[tempMseg.length()];
strcpy(sendMseg,tempMseg.c_str());
client.publish(pubTopic,sendMseg);
}
void setup(){
...
/*开机先关灯*/
closeLight();
/*上报关灯信息*/
client.publish(pubTopic,("{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":0},\"method\":\"thing.event.property.post\"}").c_str());
}
[/code]
在函数setup()中调用:[code] client.publish(pubTopic,("{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":0},\"method\":\"thing.event.property.post\"}").c_str());[/code]
阿里云收到消息后,在这个主题“/sys/a17x7FncZl0/DPR-LED/thing/event/property/post_reply” 发送消息,在串口窗口,可以看到返回的参数是:
[code]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"}
[/code]
可以看到,返回Json对象,根本没有属性[code]const uint16_t LightStatus = root["params"][Identifier];[/code]
故这里得到 LightStatus 最终为0,根据下面的代码,回关闭LED。
[code] if(LightStatus == 1){
openLight();
}else{
closeLight();
;[/code]
跟离谱的是,接着下面的代码
[code] }
String tempMseg = "{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":"+(String)LightStatus+"},\"method\":\"thing.event.property.post\"}";
char sendMseg[tempMseg.length()];
strcpy(sendMseg,tempMseg.c_str());
client.publish(pubTopic,sendMseg)[/code]
又会在这个主题
[code]const char * pubTopic = "/sys/a17x7FncZl0/DPR-LED/thing/event/property/post";//******post[/code]
上发送消息,又引发回调函数 callback() 响应主题[code]/sys/a17x7FncZl0/DPR-LED/thing/event/property/post_reply[/code]
然后造成一些循环,串口将一直输出:
[code]15:00:12.029 -> 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"}
15:00:12.236 -> 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"}
15:00:12.338 -> 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"}
15:00:12.476 -> 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"}
15:00:12.649 -> 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"}
15:00:12.853 -> 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"}
15:00:13.060 -> 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"}
15:00:13.161 -> 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"}
15:00:13.369 -> 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"}
15:00:13.506 -> 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"}
15:00:13.677 -> 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"}
15:00:13.882 -> 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"}
15:00:13.985 -> 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"}
15:00:14.090 -> 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"}[/code]
灯将一直被关闭。
在这里,希望官方看看是否更新先示例代码。
成果者也
成果者也回复kevin_wk
那怎么办啊大佬
HugoWang
HugoWang
能否信息我一下,有偿服务,谢谢
DFHk-0ykaN8
DFHk-0ykaN8
大神请收下我的膝盖!大神请收下我的膝盖!
DFHk-0ykaN8
DFHk-0ykaN8
温湿度D6,土壤A2,蜂鸣器D7同时使用的话是否可以实现?引脚够用就可以吗?
DFS123456
DFS123456
连接不成功,rc=2
DFHymJkpq1I
DFHymJkpq1I
exit status 1
'D2' was not declared in this scope
Nicholas
Nicholas
非常好
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void openLight()':
sketch_jan02a:6: error: 'D2' was not declared in this scope
#define BEDROOD_LIGHT D2
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino:30:16: note: in expansion of macro 'BEDROOD_LIGHT'
digitalWrite(BEDROOD_LIGHT, HIGH);
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void closeLight()':
sketch_jan02a:6: error: 'D2' was not declared in this scope
#define BEDROOD_LIGHT D2
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino:34:16: note: in expansion of macro 'BEDROOD_LIGHT'
digitalWrite(BEDROOD_LIGHT, LOW);
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void connectWiFi()':
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino:40:37: warning: invalid conversion from 'const char*' to 'char*' [-fpermissive]
WiFi.begin(WIFI_SSID,WIFI_PASSWORD);
^
In file included from C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino:1:0:
C:\Users\acer\Desktop\arduino-1.8.3\libraries\WiFi\src/WiFi.h:79:9: note: initializing argument 1 of 'int WiFiClass::begin(char*, const char*)'
int begin(char* ssid, const char *passphrase);
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void callback(char*, byte*, unsigned int)':
sketch_jan02a:74: error: 'client' was not declared in this scope
client.publish(pubTopic,sendMseg);
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void ConnectAliyun()':
sketch_jan02a:78: error: 'client' was not declared in this scope
while(!client.connected()){
^
sketch_jan02a:81: error: 'myAliyun' was not declared in this scope
if(client.connect(myAliyun.client_id,myAliyun.username,myAliyun.password)){
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void setup()':
sketch_jan02a:6: error: 'D2' was not declared in this scope
#define BEDROOD_LIGHT D2
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino:94:11: note: in expansion of macro 'BEDROOD_LIGHT'
pinMode(BEDROOD_LIGHT,OUTPUT);
^
sketch_jan02a:100: error: 'myAliyun' was not declared in this scope
myAliyun.init(ALIYUN_SERVER,ProductKey,ClientId,DeviceName,DeviceSecret);
^
sketch_jan02a:102: error: 'client' was not declared in this scope
client.setServer(myAliyun.mqtt_server,PORT);
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void loop()':
sketch_jan02a:118: error: 'client' was not declared in this scope
if(!client.connected()){
^
sketch_jan02a:121: error: 'client' was not declared in this scope
client.loop();
^
exit status 1
'D2' was not declared in this scope
Nicholas
Nicholas

C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void openLight()':
sketch_jan02a:6: error: 'D2' was not declared in this scope
#define BEDROOD_LIGHT D2
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino:30:16: note: in expansion of macro 'BEDROOD_LIGHT'
digitalWrite(BEDROOD_LIGHT, HIGH);
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void closeLight()':
sketch_jan02a:6: error: 'D2' was not declared in this scope
#define BEDROOD_LIGHT D2
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino:34:16: note: in expansion of macro 'BEDROOD_LIGHT'
digitalWrite(BEDROOD_LIGHT, LOW);
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void connectWiFi()':
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino:40:37: warning: invalid conversion from 'const char*' to 'char*' [-fpermissive]
WiFi.begin(WIFI_SSID,WIFI_PASSWORD);
^
In file included from C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino:1:0:
C:\Users\acer\Desktop\arduino-1.8.3\libraries\WiFi\src/WiFi.h:79:9: note: initializing argument 1 of 'int WiFiClass::begin(char*, const char*)'
int begin(char* ssid, const char *passphrase);
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void callback(char*, byte*, unsigned int)':
sketch_jan02a:74: error: 'client' was not declared in this scope
client.publish(pubTopic,sendMseg);
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void ConnectAliyun()':
sketch_jan02a:78: error: 'client' was not declared in this scope
while(!client.connected()){
^
sketch_jan02a:81: error: 'myAliyun' was not declared in this scope
if(client.connect(myAliyun.client_id,myAliyun.username,myAliyun.password)){
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void setup()':
sketch_jan02a:6: error: 'D2' was not declared in this scope
#define BEDROOD_LIGHT D2
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino:94:11: note: in expansion of macro 'BEDROOD_LIGHT'
pinMode(BEDROOD_LIGHT,OUTPUT);
^
sketch_jan02a:100: error: 'myAliyun' was not declared in this scope
myAliyun.init(ALIYUN_SERVER,ProductKey,ClientId,DeviceName,DeviceSecret);
^
sketch_jan02a:102: error: 'client' was not declared in this scope
client.setServer(myAliyun.mqtt_server,PORT);
^
C:\Users\acer\Desktop\sketch_jan02a\sketch_jan02a.ino: In function 'void loop()':
sketch_jan02a:118: error: 'client' was not declared in this scope
if(!client.connected()){
^
sketch_jan02a:121: error: 'client' was not declared in this scope
client.loop();
^
exit status 1
'D2' was not declared in this scope
这是什么情况呀
Nicholas
Nicholas
努力加油奋斗
Nicholas
Nicholas
楼主很给力
HaVr1rBv
HaVr1rBv
您好,我想问一下手机APP一直下载不了,有遇到同样的情况吗?有解决办法吗?
Z先生
Z先生
你好,请教一下,如果我需要控制两个led,那么回调函数该怎么写呢,一块esp32上有10个数字输出,我在其中两个引脚各连接一个LED。但LED的识别码是不同的,那么Json信息该如何解码呢。
时间都去哪了
时间都去哪了
您好楼主,我想问一下,我遇到这种情况应该怎么解决,我是直接复制你的程序代码的。
在用Arduino 1.8.9编译时候提示如下错误:
StaticjsonBuffer是Arduinokson 5中的一个类。请访问arduinokson.org/upgrade了解如何将您的程序升级到arduinokson。
我应该如何解决,谢谢
xjl123
xjl123
为什么我通过手机控制灯的状态,但灯总是一闪一闪的
wuji
wuji
作者
回复xjl123
检查下程序上报的逻辑
龙神ldy
龙神ldy
阿里云发布web以后。指示图标 没有变化,数据已经配置了。开关都正常,就是图标没有反应,按道理 关了是一种颜色,开了是一种颜色。但是怎么就没改变,。
wuji
wuji
作者
回复龙神ldy
关掉物理设备,使用阿里云的在线模拟调试虚拟设备,看看有没有反应
hnyzcj
hnyzcj
设备没有激活什么鬼
hnyzcj
hnyzcj回复wuji
有QQ留一个
wuji
wuji
作者
回复hnyzcj
可以的,在阿里云平台上创建一个产品,为它定义LED1,LED2,LED3,人体温度5等等的功能属性,每个功能都有特定的标识符,再为这个产品创建一个设备,这个设备会继承该产品的所有属性,操作这些标识符就能实现控制和获取信息,关联ESP32和设备,通过上报和订阅和标识符,就能控制ESP32上连接的设备
共13条回复,已加载2条,点击查看更多共13条回复,已加载全部
senghu
senghu
好了,问题解决掉了,用论坛上提供的库文件就可以了;估计套件提供的库文件有点问题
wuji
wuji
作者
回复senghu
。。。。。。。
这就尴尬了!!
论坛上的库和阿里云套件的库文件是一样的呀,除了ArduinoJson-master库因为套件的太大,就在网上随便找了个,其他库都是从那套件中的库取出来的。
senghu
senghu
这些参数我用MQTT.fx现在连接成功了,但是套件还是提示一样的错误
xjl123
xjl123回复DFrkjrpHu_E
我也一样
DFrkjrpHu_E
DFrkjrpHu_E回复senghu
是的,我也是一样的问题,你有解决吗?
senghu
senghu
serName=OMji93q1h08z4sG8eaVu&a1E7SXomX7L
Attempting MQTT connection...failed, rc=2 try again in 5 seconds
Attempting MQTT connection...failed, rc=2 try again in 5 seconds
Attempting MQTT connection...failed, rc=2 try again in 5 seconds
wuji
wuji
作者
回复senghu
MQtt连接失败,两种情况,一种是那些连接参数填错了。一种是PubSubClient.h的没更改过