DFSyBM3-i4u 发表于 2021-12-7 12:51:46

[案例教程]【NB-IoT 物联网开发板ESP32 TinkerNode】智能家居

Hello,大家好。本次项目将会使用Esp32的板载LED灯,在阿里云平台上,借助阿里云的IoT Studio WEB可视化开发功能,搭建一个远程控制灯的开关以及亮度的系统,这也是智能家居系统中一个典型的远程开关控制场景。
**项目的主要目的:**
①初步了解阿里云平台的使用方法
②了解Esp32 & TinkerNode开发板的功能,熟悉使用过程。



**视频教程**

为了方便大家的学习,除了文字教程外,我们还制作了视频教程供大家参阅。




https://www.bilibili.com/video/BV1fA41187UA




**元件清单**

[**FireBeetle 萤火虫 ESP32微控制器**](https://www.dfrobot.com.cn/goods-1394.html) X 1
[**ESP32扩展板**](https://www.dfrobot.com.cn/goods-1394.html) X 1
[**TinkerNode物联网开发板**](https://www.dfrobot.com.cn/goods-3128.html) X 1(可选)



**如果你是第一次使用ESP32,请先参照ESP32的官方wiki进行环境配置** :[**ESP32官方wiki**](https://wiki.dfrobot.com.cn/_SKU_DFR0478_FireBeetle_Board_ESP32主板控制器V4_0)



**1. 阿里云IoT注册与产品创建**

本次项目选择的是阿里云IoT作为项目的云平台,所以需要大家注册一个阿里云IoT平台的账号,并跟随接下来的教程,熟悉阿里云IoT平台的使用方法。

**注册新用户**

首先,打开阿里云IoT的首页 https://iot.aliyun.com/ 。点击右上角的免费注册,创建一个阿里云IoT的账号。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/49a5c47cc8dbed89b59c4c3bc74f7978.png)





**开通物联网平台**

登录阿里云平台,点击右上角的工作台,即可进入阿里云控制台首页。
在左上角的工具栏中,选择产品,在列表中找到物联网IoT,点击进入物联网应用开发。
注意:如果是第一次使用物联网应用开发,需要开通物联网应用开发的服务,这个服务在数据量不多或者不进行商用时是免费的。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/0f66487ce25e5089b522528a97fadb48.png)





**阿里云平台管理体系**

在开始制作项目之前,我们需要先来了解一下阿里云IoT平台中的设备管理体系,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM1MDV8Y2I2NzA1MGR8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

在阿里云的物联网平台中,有项目、产品和设备三种概念,它们是一种从属关系。在物联网iot中可以创建多个项目;一个物联网项目可以包含多个产品;一个物联网产品也可以包含多个设备。在这其中,每一个项目、产品以及设备,都有自己独立的管理界面,方便我们进行调试和数据的查询。另外,需要注意的一点是,在阿里云IoT平台中,同一个设备可以从属于多个不同的产品,同一个产品也可以从属于多个不同的项目,这一点在我们进行多项目开发时,是十分便利的。
了解完阿里云平台的体系之后,接下来我们就可以开始项目的制作了。

**新建项目**

在物联网平台的页面左侧,选择**IoT Studio** -> **项目管理**,点击**新建项目**,新建一个空白项目,如下图所示。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/65a4a6ff0443224e1d975ae1d0c8b155.png)

项目的名称,我们可以填写“智能家居”,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM1MDh8ZGE1M2FmZTR8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

创建完成后,我们会进入“智能家居”项目的管理页面,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM1MDl8M2M0ZTYwZmN8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

此时,我们就已经创建好了项目,接下来我们需要为这个项目添加产品和设备。

**新建产品**

在项目管理页面左侧的功能栏点击**产品**,在弹出的产品页面中选择**创建产品**,如下图所示。

!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM1MTB8NzEzZmYwNjF8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

产品的名称填写“**物联网灯控**”,所属品类选择“**自定义品类**”,其他选项默认,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM1MTF8ZjZiNTM3MTF8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

完成后点击保存,此时我们已经在“智能家居”项目下创建了一个名为“物联网灯控”的新产品,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM1MTR8NmQwYjhhYTh8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

**功能定义**

接下来,我们需要对产品进行功能定义,这一步也叫作定义产品的“物模型”,物模型创建的过程就是通过协议描述产品的功能,定义产品有几组传感器数据,有什么控制功能,数据的类型是什么。
在产品页面,点击“物联网灯控”产品后的**查看**,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM1MTh8NWIwNDU5ODd8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

选择**功能定义** -> **自定义功能** -> **添加自定义功能** ,如下图所示**。**

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/3c4f588f3b3d65a9f179a66a69ecfe50.png)



![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/010d600af83216832a23d48866c71f99.png)

由于本次项目需要实现的目标是,通过云平台实现LED灯的开关,所以我们需要创建一个数据类型为bool类型的自定义功能(物模型)。
Ps:bool(布尔型)式编程语言的一种变量类型,布尔型变量的值只有两个,False(假)和True(真),即0和1。
所以在创建自定义功能时,我们的功能名称填写“灯工作状态”,标识符填写“LightStatus”,数据类型选择“bool(布尔型)”,布尔值0为关灯,1为开灯,读写类型选“读写”,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM1MzR8NTYxY2I1NWV8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

创建完成后,效果如下图所示。点击发布上线。
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/8662c8429ba54982f6ace50cfc33c1fd.png)

**新增设备**

完成了产品的功能定义之后,我们需要为“物联网灯控”产品,建立一个设备,这样我们就要可以将Esp32 开发板连接到阿里云平台了。
在项目管理页面左侧的功能栏点击**设备**,在弹出的设备页面中选择**添加设备**,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM1MTV8N2ExZTk5MDd8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

在弹出的窗口中,产品选择“物联网灯控”,添加方式选择自动生成,设备数量填写1,如下图所示。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/c5e91f77bd14c5b37524d612a1b090e0.png)

到此,我们已经在阿里云平台上创建好了项目、产品和设备。



**2. 代码调试**

右击Arduino IDE图标,打开文件所在位置,点击libraries文件夹,下载并解压文末的库压缩包,把四个库文件夹复制到libraries文件夹下。重启Arduino IDE软件就可成功加载库环境。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/101628dbd5c231e6a8fd4b7e9f8d66c6.png)

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/67fc9701d57b1eecff8b5e3a452f7282.png)

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/55aa5125cb0979db01204b6a9af3fd6a.png)

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/c723998e2df16ec8944d97c36651c60b.png)



在Arduino IDE中,点击**文件**->**示例**->**DFRobot_IoT**->**Bedroom_Light**,如下图所示。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/00835c7eb7874bb94094ef35e15d23c8.png)

在样例中,我们需要进行修改的有以下四个部分:
① WiFi名称和密码的设置
将当前设备所连接的WiFi名称和密码,填写在代码中的WIFI_SSID、WIFI_PASSWORD变量值的双引号内,即下列代码所示:



```
/*Set WIFI name and password*/
const char* WIFI_SSID       = "YOUR_WIFI_SSID";
const char* WIFI_PASSWORD   = "YOUR_WIFI_PASSWORD";复制代码
```

② 产品标识符设置
是用户在配置产品功能的过程中,自行设置的用以标识产品的名称或符号。
进入智能家居项目,在做左侧导航栏选择产品,在产品列表中找到名为智能灯光的产品,点击查看,复制我们刚刚设置的产品标识符,如下图所示:

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM2NTd8MDNkODRiMjZ8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

将该产品的产品标识符复制到代码中的Identifier变量值的双引号内,即下列代码所示:

```
/*Product identifier that needs to be operated*/
String Identifier = "Your_Identifier";
复制代码
```

③ 设备证书信息设置
设备证书信息,包含阿里云IoT平台分配的ProductKey、DeviceSecret,以及DeviceName。
进入智能家居项目,在做左侧导航栏选择设备,在设备列表中找到刚刚创建的设备,点击查看,可以从设备管理页面查看该设备的设备证书信息,如下图所示:

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/e59adc7eb195ad2dc06650dbc0b98267.png)

将该设备的设备证书信息分别复制粘贴到代码中ProductKey、DeviceName、DeviceSecret变量值的双引号内,ClientId可设置任意参数,即下列代码所示:



```
/*Configure device certificate information*/
String ProductKey = "Your_Product_Key";
String ClientId = "12345";/*Custom id*/
String DeviceName = "Your_Device_Name";
String DeviceSecret = "Your_Device_Secret";复制代码
```

④ 发布和订阅Topic设置
是用户完成设备配置后,在阿里云IoT平台上进行发布和订阅所需要的Topic信息。
可以从设备的物模型Topic列表中查看设备发布和订阅的Topic信息,如下图所示:

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/c35585005c5b13db54665c8115907880.png)

将发布和订阅的Topic信息填写在代码中对应位置,如下列代码所示:

```
/*TOPIC that need to be published and subscribed*/
const char * subTopic = "Your_sub_Topic";//****/set
const char * pubTopic = "Your_pub_Topic";//******/post复制代码
```

至此,Arduino程序已经修改完成了,可以将代码上传至Esp32 开发板。
代码上传完成后,打开Arduino串口监视器,波特率设置为115200,可以看到WiFi和MQTT分别连接成功,如下图所示:

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM1OTN8MmU5Y2JiNGF8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

MQTT连接完成后,可以在设备管理界面看到设备显示在线,如下图所示:

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM2NjB8NDZlY2QyZDB8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

至此,我们可以在阿里云IoT平台上对该设备进行在线调试。

**在线调试**

在设备管理界面选择在线调试,在调试设备栏选择调试真实设备,功能选择为“灯工作状态(LightStatus)”,方法选择为“设置”。在代码框中通过修改LightStatus的值为1,并点击发送指令,即可以实现控制Esp32板载LED开关的功能,如下图所示:

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM2MTF8ZTE0M2E2MTR8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

同时我们可以在Arduino IDE的串口监视器中看到TinkerNode收到阿里云iot平台发送的调试信息,如下图所示:

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM2NTl8YzA5MzIxMmF8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

同时可以看到TinkerNode板载LED,随着LightStatus状态标识符的改变而变化。
![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM2MTJ8MzMyMTJiZDd8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

至此,我们已经建立了Esp32与云平台的连接,并且可以通过云平台控制Esp32开发板上LED的开关状态。

**3. IoT Studio Web可视化页面开发**

在阿里云平台中,可以进行Web可视化页面的开发,这也是IoT Studio的核心功能,我们可以通过Web可视化页面开发,开发个性化的设备控制页面。接下来,就让我们为刚刚制作的智能家居项目,创建一个Web可视化页面吧!

在智能家居的项目管理页面,在左侧的功能菜单栏选择主页,在项目开发中选择Web应用,点击新建,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM2MTN8YzlhNTI4MWV8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

在弹出的窗口中,可以给新建的Web应用命名,这里我们命名为“智能家居控制页面”,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM2MTR8Y2RiZDRjZTV8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

点击确认后,进入Web可视化开发的页面,我们可以看到,上方是基础的菜单栏,左侧为功能区,中间是可视化开发的画布,右侧是属性配置区,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM2MTV8NzFhZDM4NmN8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

在左侧的菜单栏,选择组件,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM2MTZ8Y2ZlMjEzZWR8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

选择组件后,我们可以看到出现很多功能各异的组件,有指示灯、开关、按钮、仪表盘、时钟等,在这里阿里云还专门区分出了基础和工业组件,以及更细化的变配电组件。而工业组件相比基础组件,带有了更丰富的显示功能。如果是对工业场景有一定了解的朋友,这时候应该已经大概了解了可视化页面的功能,他与PLC中的组态是十分类似的。
Ps:如果有兴趣的话,可以点击查看[组态的概念](https://baike.baidu.com/item/组态)。在这次的项目中,我们需要用到开关和指示灯两个组件,通过开关控制LED灯的状态,并通过指示灯显示出来。
将开关和指示灯两个组件从左侧的组件栏拖到中间的画布中,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM3MzF8OWUxYjBlOGJ8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

点击指示灯组件,在右侧的配置栏点击**配置数据源**,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM3MzJ8OGNjNmNmYWR8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

选择我们创建的“物联网灯控”产品,点击**确定**,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM3MzN8ZWNkMDJlOTN8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

在设备的选项中,选择**指定设备**,在弹出的窗口中选择我们刚刚创建的设备,点击**确定**,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM3MzR8MzE0NTJjYjZ8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

在属性选项,点击**选择属性**,在弹出的窗口中选择我们在产品中定义的功能(物模型)“灯工作状态”,点击**确定**,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM3MzV8MTJlYmE0Nzd8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

此时我们可以点击验证数据格式,如果配置正确,系统会提示数据格式验证成功,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM3MzZ8NmFkNDZhZTl8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

最后点击**确定**,完成指示灯的数据源配置。
此时我们可以在右侧的配置栏看到“已配置数据源”的提示,并且我们可以修改指示灯的展示样式,可以是颜色或者图片,这里我们选择颜色。同时,我们可以在配置栏中自行配置开关灯时,指示灯的颜色,这里我们使用默认的颜色,大家可以根据自己的习惯修改。
到此我们已经完成了指示灯的相关配置。
接下来我们要进行开关的配置,同样的点击开关组件,在右侧的配置栏点击**配置数据源**,执行与配置指示灯相同的操作,如下图所示。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM3Mzd8N2MxMDE1ZTd8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

全部完成后点击确认,完成开关组件的配置。
Ps: 开关组件也可以自行配置颜色。
至此,我们已经完成了可视化页面的开发。我们点击右上角菜单栏的预览按钮,就可以预览我们制作的可视化页面功能,进行功能调试。点击预览页面中的开关,就可以看到Esp32 主控板上的LED和页面中的指示灯先后亮起。调试完成后,回到Web可视化开发界面,点击右上角菜单栏中的发布,如下图所示。

!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM3Mzh8MmI4NThkOGZ8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

发布后,我们回到IoT Studio的主页,此时我们可以看到页面中多了一个名为“智能家居控制页面”的Web应用,并且发布状态已经变为“已发布”,此时我们可以点击右侧的发布地址,既可以进入该Web控制页面。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM3Mzl8YTUyYzI3ZTR8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

Esp32开发板上的LED灯了,最终发布页面的效果如下图所示。


![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM3NDB8NTA5YTNmYmV8MTYzODMyNzk0NXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

另外,阿里云中也可以自行添加图片背景,大家可以自行尝试。





本项目同样适用于TinkerNode,请先参照TinkerNode的官方wiki进行环境配置:[**TinkerNode官方wiki**]((https://wiki.dfrobot.com.cn/_SKU_DFR0530_TinkerNode_NB-IoT_物联网开发板_V1_0)),然后烧录TinkerNode版本代码。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTM2NTZ8ZTNmMWI3MjN8MTYzODg1MTg1MXwwfDMwMzY5Mw%3D%3D&noupdate=yes)

aliteamer 发表于 2022-6-22 18:22:49

老师您好!想问下您程序上传后串口监视器一直输出这个信息Recevice {"code":520,"data":{"topic":"/sys/a1jMWCbieSf/${deviceName}/thing/event/property/post","productKey":"a1jMWCbieSf","deviceName":"${deviceName}"},"id":"123456","message":"no active session for a1jMWCbieSf&${deviceName}"}是怎么回事儿啊

DFSyBM3-i4u 发表于 2022-8-4 11:25:50

aliteamer 发表于 2022-6-22 18:22
老师您好!想问下您程序上传后串口监视器一直输出这个信息Recevice

改一下topic.把${deviceName}改成DeviceName

String DeviceName = "led11";

/*需要上报和订阅的两个TOPIC*/
const char * subTopic = "/sys/a1UfuGOV44D/led11/thing/service/property/set";//****set
const char * pubTopic = "/sys/a1UfuGOV44D/led11/thing/event/property/post";//******post

keepreal 发表于 2022-8-9 17:04:32

哪里下载库文件呢?

DFSyBM3-i4u 发表于 2022-8-10 15:52:12

keepreal 发表于 2022-8-9 17:04
哪里下载库文件呢?

加载板卡就行

NeloKin 发表于 2023-1-6 15:32:45

教程写的很好,然而,随着阿里云的更新以及一些库文件的更新,此教程使用上出现了一些困难的地方。
首先,阿里云已将物联网应用开发移除产品首页,需要进入物联网网站方可寻找到,如附件截图所示。
其次,ArduinoJson库需要更新,默认ide版本为ArduinoJson5,需要升级到ArduinoJson6方可正常使用,希望能补充在教程内。
感谢修正

aliteamer 发表于 2023-9-6 15:21:58

DFSyBM3-i4u 发表于 2022-8-4 11:25
改一下topic.把${deviceName}改成DeviceName

String DeviceName = "led11";


好的好的,谢谢您!就是现在阿里云studio不能免费用了,您有推荐免费的或者便宜一点的IoT平台嘛

DFSyBM3-i4u 发表于 2023-9-14 09:48:02

aliteamer 发表于 2023-9-6 15:21
好的好的,谢谢您!就是现在阿里云studio不能免费用了,您有推荐免费的或者便宜一点的IoT平台嘛 ...

easyiot网址:https://iot.dfrobot.com/
页: [1]
查看完整版本: [案例教程]【NB-IoT 物联网开发板ESP32 TinkerNode】智能家居