智能家居:微信小程序与阿里云IOT设备交互实战
智能家居:微信小程序与阿里云
设备交互实战
一、准备工作
一、准备工作
1.1 硬件设备
硬件设备
本场 Chat 中开发实战课程我们需要采购如下硬件设备: Ruff 套件 和 激光PM2.5传感器。
1.2 开发软件:
开发软件:
我们需要准备如下软件环境和开发工具:
Node.js v8.7.0
Ruff SDK v1.11.12
Sublime Text 3 编辑器
微信开发者工具 v1.02
1.3 云资源云资源
我们本次 IoT 物联网开发实战涉及以下云资源的使用:
物联网平台 IoT :提供设备接入,数据流转,指令下行能力;
函数计算 FC :Serverless 计算平台;
二、技术架构
二、技术架构
本次开发实战基于 Ruff 开发板,使用温湿度传感器 (DHT11) 和激光PM2.5传感器 (SDS011) 采集家居环境数据;LED 灯可以
调整灯光颜色;LCD 显示屏展示当前温湿度值。 Ruff 开发板作为主控,通过JavaScript 版本 SDK 接入阿里云 IoT 物联网平
台,更新实时状态到设备影子。通过函数计算提供数据查询和控制指令 API ,用户可以在微信小程序端实时查看家居环境数
据,控制 LED 灯的开关,调整灯光颜色。
完整技术架构如下:
三、三、Ruff 硬件开发
硬件开发
3.1 Ruff 简介简介
Ruff 是一个支持 JavaScript 开发应用的物联网操作系统,为软件开发者提供开放、高效、敏捷的物联网应用开发平台,让 IoT
应用开发更简单。
整个 Ruff 开发体系包括 Ruff OS、Ruff SDK、Ruff 软件仓库、Ruff Kit 开发套件。 只要您有软件开发经验,就可以用 Ruff 开
发硬件应用。
Ruff OS 运行在硬件板卡上,为 Ruff 应用提供运行环境。
Ruff SDK 安装在开发机电脑上,包含开发相关的所有工具。
Ruff 软件仓库是云端的在线软件包管理平台,提供软件包下载和分享服务。
Ruff Kit 开发套件由 Ruff 开发板 (ruff-mbd-v1) 和多个外设模块组成,帮助快速上手。
3.2 Ruff 开发的基本步骤
开发的基本步骤
3.2.1 下载安装
下载安装 Ruff SDK
根据你的操作系统,下载并安装 Ruff SDK 。
在安装完成后,在命令行中执行 rap –version,如果正确输出当前的 SDK 版本,则说明 Ruff SDK 安装成功。
$ rap --version
1.11.4
3.2.2 创建项目
创建项目
使用命令行打开项目文件夹,再逐行执行下列命令,rap 工具会初始化项目并下载开发板的配置信息及依赖。
# 新建项目文件夹
$ mkdir ruff-iot-device
# 进入项目文件夹
$ cd ruff-iot-device/
# 初始化 Ruff 项目,根据提示填写应用名称,版本,作者等
$ rap init
? app name: ruff-iot-device
? version: 0.1.0
? description:
? author:
Installing main board module...
Downloading package "ruff-mbd-v1"...
Extracting package "ruff-mbd-v1" (4.2.10)...
Downloading package "led-gpio"...
Extracting package "led-gpio" (3.0.5)...
Downloading package "button-gpio"...
Extracting package "button-gpio" (2.0.9)...
Downloading package "pca9685"...
Extracting package "pca9685" (2.0.5)...
Downloading package "ltc2309"...
Extracting package "ltc2309" (3.0.1)...
Downloading package "mcp23017"...
Extracting package "mcp23017" (2.0.5)...
Downloading package "ruff-v1-sys-usb"...
Extracting package "ruff-v1-sys-usb" (0.3.1)...
Created files:
- package.json
- .rapignore
- README.md
- src/index.js
- test/test.js
- app.json
Done, happy crafting!
3.2.3 传感器硬件选择和驱动
传感器硬件选择和驱动
传感器信息列表:
在项目中添加传感器设备和驱动模块
$ rap device add dht
? model: dht11
Searching supported drivers from Rap registry...
? select a driver for device "dht11"(DHT11): dht11@0.3.6
Installing driver...
Downloading package "dht11"...
Extracting package "dht11" (0.3.6)...
- dht11@0.3.6 (https://rap.ruff.io/raps/dht11)
Adding device "dht11" to configuration...
Adding input "dht11/gpio" (gpio) to configuration...
Configuration updated.
3.2.4 应用开发
应用开发
安装阿里云IoT物联网平台设备端 SDK
$ rap install aliyun-iot-device-mqtt --save
依赖 lib 安装完成后,整个工程目录如下:
应用程序 设备端完整应用程序代码可以在附录中获取,这里我们只介绍几个关键代码片段。 空气质量数据:
//空气质量数据
$('#air').on('aqi', function(error, pm25, pm10) {
if (error) {
console.log(error);
return;
}
reported.pm25 = pm25;
reported.pm10 = pm10;
});
$('#light').setRGB(rgb, function(error, rgb) {
if (!error) {
reported.lightStatus = 'on';
reported.lightRGB = desired.lightRGB;
updateShadowData();
}
});
温湿度数据:
//温度
$('#dht').getTemperature(function(error, temperature) {
console.log(error)
if (!error) {
reported.temperature = temperature;
}
});
//湿度
$('#dht').getRelativeHumidity(function(error, humidity) {
console.log(error)
if (!error) {
reported.humidity = humidity;
}
});
LED 灯颜色调整:
//LED灯
$('#light').setRGB(rgb, function(error, rgb) {
if (!error) {
reported.lightStatus = 'on';
reported.lightRGB = lightRGB;
}
});
设备影子同步:
//设备影子更新topic
var updateShadowTopic = "/shadow/update/" + options.productKey + "/" + options.deviceName;
function updateShadowData() {
//LCD显示屏 信息更新
$('#lcd').clear();
$('#lcd').setCursor(0, 0);
$('#lcd').print("T:" + reported.temperature + " C,H:" + reported.humidity + "%");
$('#lcd').setCursor(0, 1);
$('#lcd').print("LED:" + reported.lightStatus + ",C:" + reported.lightRGB);
//设备影子 reported数据结构
var data = {
method: "update",
state: {
reported: reported
},
version: Date.now()
}
console.log('updateShadow', JSON.stringify(data));
//设备影子 更新
client.publish(updateShadowTopic, JSON.stringify(data));
}
设备影子更新后,我们就可以在云端看到数据:
3.2.5 连接硬件设备
连接硬件设备
Ruff 主板接口如下图:
我们可以通过 rap 命令查看硬件接线方式,并按图所示使用杜邦线连接设备串口接入对应主板串口。
$ rap layout --visual
3.2.6 程序部署
程序部署
配置开发板的网络访问能力
将 Ruff 开发板上的 micro USB 接口与 USB 电源线连接,Ruff 开发板随即启动。
开发板成功启动后,会搭建一个名为 Ruff_xxx 的无线热点。电脑连接该热点。
在浏览器中访问 192.168.78.1。
填写本地无线网络的 SSID 和 PASSWORD 并确认。如下图所示:
等待主板重启后,会自动接入本地网络。
部署应用到主板 电脑接入开发板的 Ruff_xxx 无线热点,在命令行中执行如下命令:
$ rap deploy -s
如果一切顺利,在应用启动成功后稍等片刻,就可以看到红色板载 LED 已经点亮了。
我们在设备控制台应用控制界面看到应用已经启动。
在设备控制台应用日志界面看到应用当前的日志信息。应用程序使用 console.log 方法输出的信息,也可以在这里查看
四、四、IoT 物联网平台云端开发
物联网平台云端开发
在 IoT 物联网平台,我们创建一个产品家居环境,并在功能定义部分添加如下属性:
物模型定义完成后,控制台产品详情如下:
然后,我们基于家居环境产品创建一个具体设备,获取设备身份三元组。
五、在函数计算平台开发业务接口
五、在函数计算平台开发业务接口
为了和微信小程序通信,我们需要创建 2 个API:获取设备数据(getDeviceShadow)和发送控制指令(sendCommand)
5.1 设备影子
设备影子
物联网平台提供设备影子功能,用于缓存设备状态。设备在线时,可以直接获取云端指令;设备离线时,上线后可以主动拉取
云端指令。 设备影子是一个 JSON 文档,用于存储设备上报状态、应用程序期望状态信息。 每个设备有且只有一个设备影
子,设备可以通过MQTT获取和设置设备影子来同步状态,该同步可以是影子同步给设备,也可以是设备同步给影子。
5.2 获取设备状态数据
获取设备状态数据 getDeviceShadow
根据 IoT物联网平台服务端 API 文档 getDeviceShadow API ,我们可以通过查询设备的影子信息,获取设备最新状态。该接
口定义如下:
在此我们不需要创建服务端应用,而是在函数计算平台创建一个函数 getDeviceShadow ,配置HTTP触发器,具体如下: