45010浏览
查看: 45010|回复: 7

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

[复制链接]

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

视频教程

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



元件清单

FireBeetle 萤火虫 ESP32微控制器 X 1
ESP32扩展板 X 1
TinkerNode物联网开发板 X 1(可选)

如果你是第一次使用ESP32,请先参照ESP32的官方wiki进行环境配置 :ESP32官方wiki

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

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

注册新用户

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

开通物联网平台

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

阿里云平台管理体系

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

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

新建项目

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

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

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

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

新建产品

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

img

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

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

功能定义

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

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

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

创建完成后,效果如下图所示。点击发布上线。

新增设备

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

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

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

2. 代码调试

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

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

在样例中,我们需要进行修改的有以下四个部分:
① 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";复制代码

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

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

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

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

将该设备的设备证书信息分别复制粘贴到代码中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信息,如下图所示:

将发布和订阅的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分别连接成功,如下图所示:

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

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

在线调试

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

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

同时可以看到TinkerNode板载LED,随着LightStatus状态标识符的改变而变化。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

img

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

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

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

本项目同样适用于TinkerNode,请先参照TinkerNode的官方wiki进行环境配置:TinkerNode官方wiki,然后烧录TinkerNode版本代码。

SmartLight.zip

1.64 KB, 下载次数: 4532

esp32

Bedroom_Light.zip

1.79 KB, 下载次数: 4495

tinkernode

aliteamer  中级技师

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

老师您好!想问下您程序上传后串口监视器一直输出这个信息Recevice [/ext/error/a1jMWCbieSf/asGW8xB9ovLIN0zJh4Jw] {"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 [/ext/error/a1jMWCbieSf/asGW8xB9ovLIN ...

改一下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方可正常使用,希望能补充在教程内。
感谢修正
FriJanuary-202301061399..png
回复

使用道具 举报

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/
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail