[教程更新]【NB-IoT 物联网开发板 TinkerNode】WiFi物联网窗帘
本帖最后由 DFSyBM3-i4u 于 2021-12-7 16:54 编辑hello,大家好。通过入门教程的学习,相信大家已经对阿里云的使用方法以及TinkerNode物联网开发板有了初步的认识。这次项目我们将用TinkerNode物联网开发板,制作一个家用的WiFi物联网窗帘,来帮助大家熟悉TinkerNode的使用,了解更多TinkerNode的功能。
**项目背景**
拉窗帘一直是我们生活中,必不可少而且十分频繁的一个动作。比如我,在公司坐在一个朝西的窗边,在有太阳的日子里每天下午都能享受到午后阳光的温暖。可惜坐在我对面的同事们就没有那么幸福了,每天下午都会受到刺眼阳光的照射,每天我都会在他们的声讨下,频繁的进行拉窗帘的操作。为了减少我起身拉窗帘的次数(我就是懒),我开发了这个WiFi物联网窗帘控制器,可以让我用遥控器远程控制窗帘的升降,并且在阿里云平台上开发了可视化控制界面,让我对面的同事们可以通过控制界面,远程的控制窗帘的升降。很好,我再也不用转身拉窗帘了。
**项目照片**
在教程开始前,先让大家看一下最终的成品图片。
WiFi窗帘控制器
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwMzd8ZGZhNDdmNjF8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
安装位置和使用效果图
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwMzh8NmI5NjVjOWZ8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
**项目的主要目的:**
①熟悉阿里云IoT平台的使用方法
②熟悉TinkerNode的基本功能
**项目视频**
为了方便大家进行学习,我们为大家提供了视频版本的项目教程。
https://www.bilibili.com/video/BV1Bt4y127JJ
**元器件清单**
(https://www.dfrobot.com.cn/goods-2580.html) x1
(https://www.dfrobot.com.cn/goods-2605.html) x1
[数字继电器模块 (Arduino和树莓派兼容)](https://www.dfrobot.com.cn/goods-1370.html) x1
(https://www.dfrobot.com.cn/goods-742.html) x1
[混合式步进电机-42BYGH40-1.8-22A](https://www.dfrobot.com.cn/goods-623.html) x1
DRV8825步进电机驱动 x1
步进电机驱动扩展板 x1
(https://www.dfrobot.com.cn/goods-794.html) x1
(https://www.dfrobot.com.cn/goods-434.html) x1
(https://www.dfrobot.com.cn/goods-1706.html) x1
[太阳能板5V 2A](https://www.dfrobot.com.cn/goods-1792.html) x1
**项目逻辑**
在开始制作前,我用流程图梳理了一下设备控制流程。如下图所示,大家可以参考一下,方便大家了解项目和代码的制作逻辑。在项目中,我创建了一个用于储存步进电机步数的变量,以下降的最低点为0点,以确定窗帘的实时位置。另外,我还使用了红外传感器监测窗帘的下边沿,以确定窗帘下降的最低点位置,并在每次下降到最低点时,都进行0点校准,保证窗帘不会因为电机丢步和结构打滑导致控制失准的情况。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwNjV8OTc2NDk2MzJ8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
**1.项目相关功能介绍**
首先,我们先来了解一下本次项目中使用到TinkerNode的功能。
**I/O口**
TinkerNode带有5个数字口D0~D4和2个模拟口A0~A1,以及SCL,SDA,MISO,MOSI,SCK,TXD,RXD接口均可作为通用IO进行调用。需要注意的是,除了D0~D4外的IO口在作为通用IO调用时,只能使用物理管脚号进行调用。与(https://mc.dfrobot.com.cn/featured/arduino)不同的是,这些IO口均具有PWM功能。
**模拟输入**
TinkerNode带有两个模拟口A0 & A1,ADC位数为12位,分辨率为1/4096。另外,两个模拟口A0 & A1作为通用IO调用时,仅能作为输入,不能作为输出。
**2.阿里云平台配置**
首先,打开阿里云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 Studio** -> **项目管理**,点击**新建项目**,新建一个空白项目,项目名称为“物联网窗帘”,如下图所示。
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/3ad1fef7202134f25e074b6f01b9826e.png)
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/65ee2b03c6d305efce9ce320f398dfff.png)
创建完成后,我们会进入“**物联网窗帘**”项目的管理页面,如下图所示。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwMzR8MmMxMWFmYmR8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
**新建产品**
在项目管理页面左侧的功能栏点击产品,在弹出的产品页面中选择创建产品,如下图所示。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwMjR8ZTc5Y2ZhOWN8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
产品的名称填写“**WiFi物联网窗帘**”,所属品类选择“**自定义品类**”,其他选项默认,如下图所示。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwMzB8NjhkOWNjYmN8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
完成后点击保存,此时已经在项目下创建了一个名为“**WiFi物联网窗帘**”的新产品。
**功能定义**
接下来,我们需要为产品添加功能,也叫作定义产品的“物模型”,物模型创建的过程就是通过协议描述产品的功能,定义产品有几组传感器数据,有什么控制功能,数据的类型是什么。
点击“**WiFi物联网窗帘**”产品后的**查看**,进入该产品的管理页面,如下图所示。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwMzl8NzZmZjQ1NWN8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
选择**功能定义** -> **自定义功能** -> **添加自定义**功能 ,如下图所示。
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/c03bca3bbd971ce12be849d484768b65.png)
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/010d600af83216832a23d48866c71f99.png)
在“**WiFi物联网窗帘**”产品中,我们需要控制窗帘的上升、下降、暂停和复位,共四种控制方式。所以我们将数据类型定义为int32(整数型),标识符设定为“**Curtain_Control**”取值范围设定为0~3,步长为1,对应了四种控制方式。这样我们就可以通过阿里云平台,向控制设备发送指令。功能定义配置如下图所示:
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwMzF8YTRkY2IxMjJ8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
!(https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/117d1c3a8e7969cbe3f224df63575e5d.png)
**新增设备**
完成了产品的功能定义之后,接下来我们为产品建立一个设备,这样我们就可以将由TinkerNode搭建的窗帘控制设备连接到阿里云平台,从而实现云端控制了。
在项目管理页面左侧的功能栏点击设备,在弹出的设备页面中选择添加设备,如下图所示。
!(https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/0626d1a6e7c9ee3ef55ba70b86b08be0.png)
弹出的窗口中,产品选择“WiFi物联网窗帘”,DeviceName命名为“winDev”,创建完成后如下图所示。
!(https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/723eb68ecd3f480c2ea050b4db58e9df.png)
**3.硬件相关配置**
**结构安装**
项目中使用的外壳结构均为激光切割件,大家可以在附件中自行下载,进行切割。
项目中还使用了一个(https://mc.dfrobot.com.cn/featured/3dprint)的联轴器,可以
**硬件连接**
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwMzZ8YTBiOWU0MzR8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
按照上图进行硬件连接。如果该图看不清楚,可以到帖子最下方下载附件查看。Ps:项目中所使用到的DRV8825步进电机驱动及扩展板,为X宝产品,大家可以自行购买,可参考下图。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUxODB8ZGYzNGYzMDR8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUxODF8MDFkMWVkMTd8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
**代码调试**
下载附件中的库文件,安装至Aruidno IDE中。点击查看[如何安装库文件?](https://mc.dfrobot.com.cn/thread-1854-1-1.html)
下载附件NB_WiFiCurtain.ino,打开项目代码,修改代码中对应的参数。
①WiFi名称和密码的设置
将设备所需要连接的WiFi名称和密码,填写在代码中WiFi_SSID和WiFi_PASSWORD变量值的双引号内,即下列代码所示:
```
//设置WIFI 名称和密码
const char* WIFI_SSID = "YOUR_WIFI_SSID";
const char* WIFI_PASSWORD= "YOUR_WIFI_PASSWORD";
```
②阿里云相关配置
我们需要根据阿里云平台的配置信息,在项目代码中做对应的修改。
在设备页面查看设备证书信息,填写在代码中对应位置。
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/4770452a395200c32ac3f878dd74038a.png)
```
//配置证书信息
String ProductKey = "Your_Product_Key";
String ClientId = "12345";
String DeviceName = "Your_Device_Name";
String DeviceSecret = "Your_Device_Secret";复制代码
```
在产品页面查看产品的功能标识符,填写在代码中对应位置。
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/718c93ca2a8beebdbae8fc87e620feec.png)
```
//配置产品标识符
String Identifier = "Your_Identifier";复制代码
```
在设备管理页面,查看物模型Tpoic信息,填写在代码中对应位置。**请注意将物模型Topic中的${deviceName}改成实际devicename的值。**物模型Topic是阿里云平台自动生成的,服务端和设备端通过Topic来实现消息通信。
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/9524fb5deaacce770423a5c67148c6a7.png)
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/2ef1a0baf96068c12016f4c2682ff145.png)
```
//需要发布和订阅的Topic
const char * subTopic = "Your_sub_Topic";//****set
const char * pubTopic = "Your_pub_Topic";//******post复制代码
//示例代码
//const char * subTopic = "/sys/a1x64q0RBy5/winDev/thing/event/property/post";//****set
//const char * pubTopic = "/sys/a1x64q0RBy5/winDev/thing/service/property/set";//****post
```
③上升步数配置
通过代码中设定上升步数,可以调整窗帘上升的最高点,大家可以自行调试确定合适的最高点参数,该行代码的位置如下图所示。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwNjd8ZWYwNTYwODl8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
```
#define LOCATION_UPPER_STOP 41300 //定义上升步数复制代码
```
④红外传感器检测距离调整
项目所使用的红外传感器可以通过旋转传感器上的螺丝,调整传感器的检测距离,如下图所示。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUwNjh8YmU4YTYwNDB8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
全部配置完成后,将代码上传至TinkerNode主控板。待代码上传完成后,就可以通过遥控器或者阿里云平台对窗帘控制器进行控制了。
**云平台调试**
待代码上传完成后,进入物联网窗帘设备页面,可以看到设备已经是在线状态,点击**查看**,进入该设备的管理页面,如下图所示。
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/9d589890fb5207b8a2e6af9543490e49.png)
进入设备页面后,点击**在线调试**,选择**属性调试**,**调试功能**选择我们设置的自定义功能“**窗帘控制(Cutrain_Control)**”,**方法**选择“**设置**”,如下图所示。
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/0fb363c4f4b7b4ced6ad5cd5fd873ae3.png)
接下来我们就可以在属性调试栏中,对设备进行远程控制了。修改该属性调试栏中的参数,即可对设备进行控制,从而代替遥控器的功能。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUxNjh8ZGVlOGEyNjR8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
代码中对应的操作参数可以参考下表,点击发送指令即可实现对应的控制功能。
| 控制操作 | 云平台自定义功能参数 |
| -------- | -------------------- |
| 暂停 | 0 |
| 上升 | 1 |
| 下降 | 2 |
| 复位 | 3 |
**4.可视化页面制作**
使用了一段时间之后,我发现每天在我凌乱的桌子上找遥控器是一件十分痛苦的事情,所以我决定为这个项目增加一个可视化控制页面。
点击主页,新建一个Web应用。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUxODJ8M2ZjMTUyODV8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
名称填写“**窗帘控制界面**”,点击**确认**,进入可视化开发界面。
在右侧菜单栏选择**组件**,拖出四个按钮组件到画布上。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUxODN8MGFjNWI5Yzl8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
在左侧的配置栏,将四个按钮的名字修改为暂停、上升、下降和复位,如下图所示。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUxODl8MDEzN2Y4YjB8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
点击其中一个按钮,在左侧的配置栏选择**交互**,点击**新增交互**,如下图所示。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUxODR8ZTAyMjIyMWR8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
**事件**选择“**点击**”,**动作**选择“**设置设备属性**”,如下图所示。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUxODV8YTQ3MjdmZDV8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
点击**配置设备**,选择对应的产品、设备以及属性(自定义功能),根据按钮的控制功能,填写对应的自定义功能参数,例如下图,我们配置的是“暂停”按钮,设置值的位置就填写“0”。
![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/34ae6da16ef1356fab970a39544e00bb.png)
四个按钮全部配置完成后,点击右上角的**发布**就可以使用可视化页面,控制窗帘了。
Ps:如果想要其他人使用你的可视化控制页面,需要将项目的域名绑定到一个外部域名。具体的方法可以在阿里云平台上查看。
!(https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=OTUxOTN8OTBkNDZjYjF8MTYzODg1NjA3NXw4NDE0MDN8MzA0MTMx&noupdate=yes)
**项目拓展**
大家做完项目之后,可以尝试在项目的基础上做一些小拓展,比如可以尝试将代码中的“窗帘位置变量”上传到云平台,并且尝试在可视化页面中体现出来,这样就可以在云平台上实时的查看窗帘的高度了。
页:
[1]