DFSH_Faith 发表于 2020-9-30 14:30:00

【NB-IoT 物联网开发板 TinkerNode】牛奶自动购买机

hello,大家好。通过之前的项目学习,我们了解了TinkerNode NB-IoT物联网开发板的基础功能,这次项目我们将使用TinkerNode基于阿里云物联网平台和Auto.js脚本软件来做类似亚马逊的Dash Button的关于盒马鲜生的自动购买牛奶的智能家居设备,解决我们在实际生活中常常遇到的喝完牛奶后忘记了购买的尴尬情况。
### 项目主要目的:
①使用Tinkernode物联网开发板解决生活中的实际问题
②使用Tinkernode NB信号穿透性强的特点,解决一些封闭环境信号差的问题
③学习阿里云平台云监控报警相关功能的使用
### 项目视频
http://www.bilibili.com/video/BV195411j7qR
### 元件清单
[**TinkerNode NB-IoT 物联网开发板**](https://www.dfrobot.com.cn/goods-2580.html)X 1
[**3.7V电池**](https://www.dfrobot.com.cn/goods-534.html)X 1
[**重量传感器模块**](https://www.dfrobot.com.cn/goods-832.html)X 1
## 一、硬件组装连接
组装过程参考视频中的组装部分,连线图如下图所示:
   

      
## 二、设备调试

如果你是第一次使用Tinkernode,请先参照Tinkernode的官方wiki进行环境配置 :[**TinkerNode官方wiki**](https://wiki.dfrobot.com.cn/_SKU_DFR0530_TinkerNode_NB-IoT_%E7%89%A9%E8%81%94%E7%BD%91%E5%BC%80%E5%8F%91%E6%9D%BF_V1_0)

如视频中所说,我们将分三个步骤完成最终设计:

Step1.牛奶重量低于预设值时触发报警→Step2.触发报警后向阿里云发送报警信息→Step3.阿里云收到报警信息后向手机发送短信触发自动购买

## 1. 牛奶重量低于预设值时触发报警

这一步我们专注于用Tinkernode调试重量传感器。

### 1.1 重量传感器介绍

重量传感器又叫电子秤,作为此次设计中的数据采集单元,能够将物体的重量信息转化为Tinkernode能够识别的电压信息。传感器的测量范围是0-1KG,所以要注意当检测物体重量高于1KG时,Tinkernode读取到的重量都是1KG,但是当物体的重量低于1KG后,Tinkernode就可以很精准的读取到物体的重量,也就是说**如果要将此设备用于称重其他物品,只需要保证所称物品在快用完时重量能够低于1KG即可**。

### 1.2 功能实现

由于Tinkernode的模拟量读取精度与Arduino不同的问题,我们对重量传感器的官方库做了简单的处理,使重量传感器用于Tinkernode时也能输出较准确的重量信息

将下载好的库解压后放在Arduino IDE 的librarys文件夹下,参考:[**如何加载库文件**](https://mc.dfrobot.com.cn/thread-1854-1-1.html)

打开附件中的NB_Prj5文件夹->Test1_Weight_Judgment,点击上传到TinkerNode,进行重量功能的测试。

if(MyScale.readWeight() > 700 && state == 0 && MyScale.readWeight() < 2000){
      state = 0;
      RGB_LED.showGreen();
}
if(MyScale.readWeight() < 400 && state == 1 && MyScale.readWeight() > 20){
      state = 1;
      RGB_LED.showRed();
}
此段代码设定了报警的重量阈值,当重量低于这个值时板子上的RGB灯会亮红灯,否则就亮绿灯,修改这个参数就可以调节重量报警触发的重量值。

## 2.报警后向阿里云发送报警信息

上一步我们只是将重量的报警信息通过板子上的RGB灯在本地显示出来,这一步我们就将报警信息发送到阿里云。因此,这一步的主要任务是进行阿里云平台的相关配置,连通阿里云与我们的Tinkernode。

### 2.1 在阿里云平台创建项目-产品-设备

**新建项目**

和之前的教程相同,我们首先需要在阿里云平台中新建一个项目,然后为项目创建产品和设备,配置产品自定义功能(物模型)。在物联网平台的页面左侧,选择IoT Studio -> 项目管理,点击新建项目,新建一个空白项目,项目名称为“**自动订购系统**”,如下图所示:

![新建项目](data/attachment/album/202009/30/034224qgzo9wgeaakdt9x2.png)

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

![新建产品](data/attachment/album/202009/30/034259a5m5tu5v2ugvmt52.png)

产品的名称填写“家庭日用品订购”,所属品类选择“自定义品类”,其他选项默认,如下图所示。

![自定义品类](data/attachment/album/202009/30/034308flyekeyo8yz5t8yf.png)

完成后点击保存,此时已经在项目下创建了一个名为“家庭日用品订购”的新产品。

**功能定义**

接下来,我们需要为产品添加功能,也叫作定义产品的“物模型”,物模型创建的过程就是通过协议描述产品的功能,定义产品有几组传感器数据,有什么控制功能,数据的类型是什么。


点击“家庭日用品订购”产品后的查看,进入产品的管理页面,如下图所示。

![点击查看产品](data/attachment/album/202009/30/034353yxgdraamdylrribf.png)


选择功能定义 -> 自定义功能 -> 添加自定义功能 ,如下图所示。
   
![添加自定义功能](data/attachment/album/202009/30/034406w19eszqenjjt9t44.png)



本次项目中,由于只需要查看TinkerNode上报的报警状态信息。所以我们仅需要创建一个数据类型为bool类型的自定义功能(物模型)。

![配置自定义功能](data/attachment/album/202009/30/034426wdng2gj2afbd7bea.png)

**新增设备**

完成了产品的功能定义后,最后我们在该产品下建立一个设备,这样我们便可以将由TinkerNode和电子秤搭建的设备连接到阿里云平台了。

在项目管理页面左侧的功能栏点击设备,在弹出的设备页面中选择新增设备,如下图所示。

![新增设备](data/attachment/album/202009/30/034445lk6t6blrhif7pct4.png)


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

### 2.2 上传代码进行调试

**阿里云相关配置**
我们需要根据阿里云平台的配置信息,在项目代码中做对应的修改。
在设备页面查看设备证书信息,填写在代码中对应位置。


![设备信息](data/attachment/album/202009/30/051339r3roairp11a1py0a.jpg)

在产品页面查看产品的功能标识符,填写在代码中对应位置。

![产品功能标识符](data/attachment/album/202009/30/034718ywn64oyvnbga96v9.jpg)


在设备管理页面,查看物模型Topic信息,填写在代码中对应位置。物模型Topic是阿里云平台自动生成的,服务端和设备端通过Topic来实现消息通信。

![功能标识符](data/attachment/album/202009/30/051401vrhb83xexjejobre.jpg)


全部配置完成后,将代码上传至TinkerNode主控板。待代码上传完成后,我们将一瓶新的牛奶和旧的牛奶交换放置在板子上进行触发,便可以在设备调试端查看到上传的信息了:

![设备上传信息](data/attachment/album/202009/30/034841lrkbk3gs5i8l1sub.png)   


### 2.3 在阿里云平台创建报警配置
**打开云监控**
由于本次项目,我们将会使用到阿里云的报警服务,所以我们需要在阿里云平台搜索云监控进行报警配置,如下图所示

![搜索云监控](data/attachment/album/202009/30/034854kyeyl4gpoytlxzkn.png)

点击进入后,如下图所示,有1000条的免费报警短信。

![免费报警短信](data/attachment/album/202009/30/034905l0qvq9u5muqvmjpu.png)

**创建报警联系人**
首先创建一个报警联系人,方便我们使用手机接收到阿里云的报警短信,配置如下图所示。

![配置报警联系人](data/attachment/album/202009/30/035056uwxhw00399so4o9t.png)

联系人配置完成后,在手机弹出的短信中,点击链接进行激活,激活成功后,手机号码会显现出来。

![联系人手机](data/attachment/album/202009/30/035113vf62tmrbwpmrt42r.png)

**创建报警规则**
本次使用的报警服务中,短信是免费的,具备的功能较少。我们配合Arduino端的代码,使用了不一样的思路来完成一次报警尝试。现在,我们先来配置报警规则,如下图所示,点击创建报警规则:
![配置报警规则](data/attachment/album/202009/30/035150aysn1yms6slgxkjk.png)

**配置报警规则**
进入到报警规则配置后,如图所示。

![报警规则详情页面](data/attachment/album/202009/30/035216ptchcqrv60t555tw.png)

①配置关联资源:
产品->物联网产品
实例->选择为我们刚才创建的产品
②设置报警规则:
规则名称->自己设置
**规则描述->这里我们使用了一种方式:当设备发送到平台的MQTT消息量在规定时间和规定周期内超过了我们设定的值,便触发报警。**
③通知方式:
我们需要先点击快速创建一个联系人组,新建一个联系组如下图所示:

![新建联系人组](data/attachment/album/202009/30/035259oxl6d6dkd2dytrrd.png)

点击确认,创建成功后。便可以查看到当前的报警状态以及报警历史,如图所示:

![报警状态](data/attachment/album/202009/30/035331weuxz09d30skdgd0.png)

## 3. 阿里云收到报警信息后向手机发送短信触发自动购买
接下来,我们将会使用到Auto.js这个手机APP程序来对手机端进行配置和调试。
### 3.1 Auto.js介绍
` Auto.js` 是个基于 `JavaScript` 语言运行在Android平台上的脚本框架。Auto.js主要工作原理是基于辅助服务`AccessibilityService`。
它能够实现当前手机上的数据监控、图片监控、控件操作和自动化工作流。
参考文档为:
项目地址:https://github.com/hyb1996/Auto.js
在线文档:https://hyb1996.github.io/AutoJs-Docs
### 3.2 Auto.js配置
**手机给权限:**
将通知读取权限以及无障碍服务的权限打开:

![给通知权限](data/attachment/album/202009/30/052251emklb91km4mlofj8.png)


**添加.js代码文件:**
点击文件->创建文件名称->复制已提供好附件中的代码->点击运行。

![点击文件复制代码](data/attachment/album/202009/30/052200aztxzqqre788bqj8.png)

紧接着,我们再次的将一瓶新的牛奶和小于400g的旧牛奶杯交换放置在板子上进行触发,阿里云收到超过3条信息后便会报警,然后向手机发送一条报警短信。(**注意:虽然阿里云云端接收到的消息很及时,可是经过实测,触发这个报警的状态会有3~10分钟左右的延迟**)

### 3.3 接收报警短信,调试代码:

收到短信后,我们需要通过打开Auto.js的日志服务来查看收到的短信的特定信息,然后分别通过修改代码中的字符长度以及粘贴板的信息来实现自动购买功能。

**打开日志服务,查看字节数量**


根据下面图片,打开Auto.js中的日志服务,查看收到短信的字节数量(报警短信的字节数量是固定的,所以我们用了这个非常简单的方法来触发自动购买的脚本)。

![日志服务](data/attachment/album/202009/30/040946x64efk94zur94rkk.png)![字节数量](data/attachment/album/202009/30/040820w9mfs9arbkk7rqf9.png)


根据收到的字节数量,修改代码中的值。


![修改字符长度](data/attachment/album/202009/30/041328ytfkt74zy2asqutt.png)


**打开盒马,复制盒马物品的盒口令**


进入你需要购买的商品的详情页面,复制对应的盒口令,如下图所示(**请在盒马APP上填好收货地址和取件人信息**):


![复制淘口令](data/attachment/album/202009/30/051811o3rrycemaucqmyc3.png)


根据复制到的盒口令,粘贴到图下的位置修改代码中的值(**不要将""去掉了**)。


![修改盒马口令](data/attachment/album/202009/30/041423d8wm59aw9n8fwlw9.png)


### 3.3 实际效果:
修改成功后,点击运行。最后一次测试触发牛奶报警装置,等待一段时间后。手机收到了报警短信,执行相应脚本,点击购买,便完成了自动购买功能。

![实际效果](data/attachment/album/202009/30/052818b0i2j0mjnmav898n.gif)

rzyzzxw 发表于 2020-9-30 17:42:03

系列高水平技术贴{:6_213:}

wangyirun 发表于 2020-10-2 17:10:47

这个无法在IOS系统上运行吗?

佛系唐法官 发表于 2020-10-10 14:47:28

{:6_213:}{:6_213:}

DFSH_Faith 发表于 2020-10-10 17:30:40

wangyirun 发表于 2020-10-2 09:10
这个无法在IOS系统上运行吗?

是的。

hnyzcj 发表于 2020-10-10 20:12:59

lihaidianz

发表于 2020-10-11 13:01:08

生活案例,厉害!

发表于 2020-10-11 13:27:43

阿里云是个啥软件啊?怎么大家都在用呀?

svw 发表于 2020-10-16 22:23:11

请问版主,你的程序最后都成功和aliyun跑通了吗? 请问库用的哪个版本? 我和你一样的程序以及硬件,过120秒就被踢? 说要发送mqtt的心跳信号,否则就被阿里云判定离线。
另外,我看你上传的阿里云截图里面,有“数据上报错误”

teu 发表于 2020-10-17 22:53:54

深圳有nb-iot信号吗?

DFSH_Faith 发表于 2020-10-19 09:42:11

svw 发表于 2020-10-16 14:23
请问版主,你的程序最后都成功和aliyun跑通了吗? 请问库用的哪个版本? 我和你一样的程序以及硬件,过120秒 ...

数据上报错误这里对于这个项目来说没什么关系。
数据上报错误的问题,需要根据上报的内容中的ID号修改代码中的Client_id, 就不会出现上报错误的情况了。
我没出现过发送什么MQTT心跳信号的事{:5_137:}

DFSH_Faith 发表于 2020-10-20 10:54:30

teu 发表于 2020-10-17 14:53
深圳有nb-iot信号吗?

深圳的话测试下来推荐使用移动的NB-IoT卡。使用前仍建议您先找当地供应商确认,或者使用NB-IoT信号检测设备提前进行测试。

Etelnar 发表于 2020-10-23 01:36:22

感谢楼主的分享

DFSH_Faith 发表于 2020-10-26 09:42:40

Etelnar 发表于 2020-10-22 17:36
感谢楼主的分享

{:5_116:}
页: [1]
查看完整版本: 【NB-IoT 物联网开发板 TinkerNode】牛奶自动购买机