【NB-IoT 物联网开发板ESP32 & TinkerNode】牛奶自动购买机
hello,大家好。通过之前的项目学习,我们了解了ESP32和TinkerNode物联网开发板的基础功能,这次项目我们将使用ESP32和TinkerNode基于阿里云物联网平台和Auto.js脚本软件来做类似亚马逊的Dash Button的关于盒马鲜生的自动购买牛奶的智能家居设备,解决我们在实际生活中常常遇到的喝完牛奶后忘记了购买的尴尬情况。教程中将先使用ESP32,最后将修改为使用TinkerNode来实现相关功能。
### 项目主要目的:
①使用ESP32开发板解决生活中的实际问题
②了解使用重量传感器的性能特点
③学习阿里云平台云监控报警相关功能的使用
###项目视频
https://www.bilibili.com/video/BV195411j7qR?zw
### 元件清单
[**FireBeetle 萤火虫 ESP32微控制器**](https://www.dfrobot.com.cn/goods-1394.html) X 1
[**ESP32扩展板**](https://www.dfrobot.com.cn/goods-1399.html) X 1
[**3.7V电池**](https://www.dfrobot.com.cn/goods-534.html) X 1
[**重量传感器套件**](https://www.dfrobot.com.cn/goods-3128.html) X 1
[**TinkerNode物联网开发板**](https://www.dfrobot.com.cn/goods-2580.html) X 1(可选)
## 一、硬件组装连接
组装过程参考视频中的组装部分,连线图如下图所示:

## 二、设备调试
如果你是第一次使用ESP32,请先参照ESP32的官方wiki进行环境配置 :[**ESP32官方wiki**](https://wiki.dfrobot.com.cn/_SKU_DFR0478_FireBeetle_Board_ESP32%E4%B8%BB%E6%9D%BF%E6%8E%A7%E5%88%B6%E5%99%A8V4_0)
如视频中所说,我们将分三个步骤完成最终设计:
Step1.牛奶重量低于预设值时触发报警→Step2.触发报警后向阿里云发送报警信息→Step3.阿里云收到报警信息后向手机发送短信触发自动购买
## 1. 牛奶重量低于预设值时触发报警
这一步我们专注于用ESP32调试重量传感器。
### 1.1 重量传感器介绍
重量传感器又叫电子秤,作为此次设计中的数据采集单元,能够将物体的重量信息转化为ESP32能够识别的电压信息。传感器的测量范围是0-1KG,所以要注意当检测物体重量高于1KG时,ESP32读取到的重量都是1KG,但是当物体的重量低于1KG后,ESP32就可以很精准的读取到物体的重量,也就是说**如果要将此设备用于称重其他物品,只需要保证所称物品在快用完时重量能够低于1KG即可**。
### 1.2 功能实现
由于ESP32的模拟量读取精度与(https://mc.dfrobot.com.cn/featured/arduino)不同的问题,我们对重量传感器的官方库做了简单的处理,使重量传感器用于ESP32时也能输出较准确的重量信息
将下载好的库解压后放在Arduino IDE 的librarys文件夹下,参考:[**如何加载库文件**](https://mc.dfrobot.com.cn/thread-1854-1-1.html)
打开附件中的DFRobot_HX711-master->example->Test_Weight_Judgment,点击上传到ESP32,进行重量功能的测试。
此段代码设定了报警的重量阈值,当重量低于这个值时板子上的RGB灯会亮红灯,否则就亮绿灯,修改这个参数就可以调节重量报警触发的重量值。
## 2. 报警后向阿里云发送报警信息
上一步我们只是将重量的报警信息通过板子上的RGB灯在本地显示出来,这一步我们就将报警信息发送到阿里云。因此,这一步的主要任务是进行阿里云平台的相关配置,连通阿里云与我们的ESP32。
### 2.1 在阿里云平台创建项目-产品-设备
**新建项目**
进入阿里云主界面,登陆后找到物联网IOT->物联网应用开发

和之前的教程相同,我们首先需要在阿里云平台中新建一个项目,


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

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

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

完成后点击保存,此时已经在项目下创建了一个名为“家庭日用品订购”的新产品。
**功能定义**
接下来,我们需要为产品添加功能,也叫作定义产品的“物模型”,物模型创建的过程就是通过协议描述产品的功能,定义产品有几组传感器数据,有什么控制功能,数据的类型是什么。
点击“家庭日用品订购”产品后的查看,进入产品的管理页面,如下图所示。

选择功能定义 -> 编辑草稿 -> 添加自定义功能,如下图所示。

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

**新增设备**
完成了产品的功能定义后,最后我们在该产品下建立一个设备,这样我们便可以将由ESP32和电子秤搭建的设备连接到阿里云平台了。
在项目管理页面左侧的功能栏点击设备,在弹出的设备页面中选择新增设备,如下图所示。

点击查看设备并记录设备的相关信息(之后需在代码中做相应修改)


到此,我们已经在阿里云平台上创建好了项目、产品和设备。
### 2.2 上传代码进行调试
**阿里云相关配置**
我们需要根据阿里云平台的配置信息,在项目代码中做对应的修改。
打开附件中的示例代码:DFRobot_HX711-master->example->Main_ESP32
在设备页面查看设备证书信息,填写在代码中对应位置。

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

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

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

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


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

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

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

**创建报警规则**
本次使用的报警服务中,短信是免费的,具备的功能较少。我们配合Arduino端的代码,使用了不一样的思路来完成一次报警尝试。现在,我们先来配置报警规则,如下图所示,点击创建报警规则:

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

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

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

## 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配置
**手机给权限:**
将通知读取权限以及无障碍服务的权限打开:

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

紧接着,我们再次的将一瓶新的牛奶和小于400g的旧牛奶杯交换放置在板子上进行触发,阿里云收到超过3条信息后便会报警,然后向手机发送一条报警短信。(**注意:虽然阿里云云端接收到的消息很及时,可是经过实测,触发这个报警的状态会有3~10分钟左右的延迟**)
### 3.3 接收报警短信,调试代码:
收到短信后,我们需要通过打开Auto.js的日志服务来查看收到的短信的特定信息,然后分别通过修改代码中的字符长度以及粘贴板的信息来实现自动购买功能。
**打开日志服务,查看字节数量**
根据下面图片,打开Auto.js中的日志服务,查看收到短信的字节数量(报警短信的字节数量是固定的,所以我们用了这个非常简单的方法来触发自动购买的脚本)。

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

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

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

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

本项目同样适用于TinkerNode,开始前先按照TinkerNode官方教程更改相关配置,然后烧录TinkerNode版本代码,见DFRobot_HX711-master->example->Main_TinkerNode
Auto.js软件下载链接
页:
[1]