kylinpoet 发表于 2019-5-1 00:39:38

IoT套件测评——物联网初上手+示例代码bug汇报

IoT套件测评——物联网初上手+示例代码bug汇报
一、准备工作:
1. 访问阿里云套件地址:https://www.dfrobot.com.cn/goods-1896.html 拉到最下面
2. 下载 阿里云IOT入门套件库文件及样例代码:
https://www.dfrobot.com.cn/images/upload/File/20190327164350d56gcn.rar(因为本文会报告一个bug,所以这个地址很可能会被修改,所以正确的下载地址以:https://www.dfrobot.com.cn/goods-1896.html,为准。)
3. 解压,并将其放在Arduino安装目录的libraries文件夹,
4. 下载套件地址下面的:Starter Kit for Aliyun IoT (教程)
https://www.dfrobot.com.cn/images/upload/File/20190313103347ey6ngg.pdf
然后按照教程先创建一个产品。
因此以上内容不再赘述,本文从创建产品的一个设备开始说起:

二、阿里云平台设置:
找到管理控制台——》产品与服务——》物联网平台


点击添加设备,会弹出一下窗口,产品就选择你已经创建的产品,注意以下的DeviceName,在Arduino代码编辑里有用。

点击确认后,

这里可以一键复制,因为这里的三个内容,都有用到。
三、Arduino设置:
现在我们打开Arduino,选择套件里提供的示例程序(注意:请完成准备工作里库文件的复制)

并选择开发板:

然后填写相应的内容:

其中的ProductKey、DeviceName、DeviceSecret就是刚才一键复制的内容,ClientId可以任意字符,下面的 subTopic和pubTopic在点击设备列表的查看:


可以看到,请注意示例代码里的subTopic填写的是第二行有”set”的全部内容,pubTopic是第一行有post的全部内容(到时我会建议示例里进行修改,有可能这步不用操作了)。
都填写好后,就可以直接编译上传到板子上了,然后将LED灯连接到插有FireBeetle扩展板的ESP32的D2口。
由此准备工作即完成,接下来就是如何用搭建好的平台来实现物理设备同阿里云IOT平台上的通信。
四、物联互通配置:

如图所示,选择开发服务下的 IoT Studio(这里阿里云做了调整,和DF提供的官方教程说明不一样),因为官方教程用的是创建移动可视化开发,我这里选用Web可视化开发,

点击选择模板,按照提示新建应用。并如下图提示,拖入指示灯和开关。

选中开关,点击右边属性内容的配置数据


选择相应的产品和设备即可,这里的设备属性(灯工作状态)是从哪里来的呢?

要重新来到产品,点击查看,选择功能定义——》添加功能


功能名称任意,标识符很重要!!!数据类型因为灯只有两个状态,所以就用bool型。
添加完成后,重新回到 IoT Studio


当我们点确定的时候,会弹出一个错误提示,我们按照说明点击在线模拟。
将我们设置的那个标识符,填到Arduino示例代码的Identifier处,重新编译上传


当我们点击发送指令的时候,可以看到灯已经亮了。
继续选择,我们刚才拖入的指示灯组件,按照按钮进行同样设置。完成后点击发布。


这个链接就是web控制界面了,这时候点击相应按钮,就可以控制灯亮和灯灭了。

五、额外说明:
那么说好的Bug在哪里呢?
如果你们按照我的提示来进行操作的话,最后一步点击按钮开关的时候,指示灯是不会随着按钮开关开启和关闭的。
原因是在Arduino的示例代码有问题,第75行源代码为:
String tempMseg = "{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":"+(String)LightStatus+"},\"method\":\"thing.event.property.post\"}";
应改为:
String tempMseg = "{\"id\":\""+ ClientId +"\",\"params\":{\""+Identifier+"\":"+(String)LightStatus+"},\"method\":\"thing.event.property.post\"}";
这样上行的时候,就不会json格式错误。
另外,有个代码修改建议:示例代码的第26,27行设置subTopic和pubTopic的时候
/*需要上报和订阅的两个TOPIC*/
const char * subTopic = "/sys/a1GSvSic1wv/df_ali2/thing/service/property/set";//****set
const char * pubTopic = "/sys/a1GSvSic1wv/df_ali2/thing/event/property/post";//******post
按照阿里云的格式,其实可以用变量进行替换,而不用硬编码。
如:
const char * subTopic = "/sys/" + ProductKey + "/" + DeviceName + "/thing/service/property/set";//****set
const char * pubTopic = "/sys/" + ProductKey + "/" + DeviceName + "/thing/service/property/post";//******post
这样在配置的时候,就不用再修改这里的内容了。

套件来源:DFRobot创客商城
产品链接:https://www.dfrobot.com.cn/goods-1896.html
页: [1]
查看完整版本: IoT套件测评——物联网初上手+示例代码bug汇报