说起计算机领域当今科技方向“云大物移智”,听起来非常地高大上。今天小哥就花5分钟带领各位看官感受一下其中的“物联网”。
1、手上一套智能楼宇套件
2、登录腾讯云物联网开发平台https://console.cloud.tencent.com/iotexplorer
3、新建一个项目“门窗告警Demo”,点击进入项目,新建产品“demo”,点击demo进入产品开发。
4、配置数据模板如下图所示:
5、点击下一步,进入设备开发,配置LoRaWAN的网关参数,如下图所示:
6、编写上行和下行数据解析协议的脚本并提交。
上行协议脚本
function RawToProtocol(fPort, bytes) {
const COMMAND_A1_UNBOUND = 0x02;
const COMMAND_A1_BOUND = 0x03;
const COMMAND_07_FLAG_MODE = 0x05;
const COMMAND_07_LEN_MODE = 1;
const COMMAND_07_FLAG_VER = 0x90;
const COMMAND_07_LEN_VER = 3;
const COMMAND_07_FLAG_DELAY = 0x9c;
const COMMAND_07_LEN_DELAY = 2;
const COMMAND_07_FLAG_ULPRD = 0x9d;
const COMMAND_0f_ALERT_KIND = 0x20;
const COMMAND_0f_ALERT_OPEN = 2;
const COMMAND_0f_ALERT_CLOSE = 4;
var data = {
"method": "report",
"clientToken" : new Date(),
"params" : {}
};
switch (bytes[0]) {
case 0xA1:
if (bytes[1] == COMMAND_A1_UNBOUND) {
data.params.bound = 0;
} else if (bytes[1] == COMMAND_A1_BOUND) {
data.params.bound = 1;
}
break;
case 0x07:
for (let i = 1; i < bytes.length; i++) {
if (bytes[i] == COMMAND_07_FLAG_MODE) {
i += COMMAND_07_LEN_MODE;
} else if (bytes[i] == COMMAND_07_FLAG_VER) {
i += COMMAND_07_LEN_VER;
} else if (bytes[i] == COMMAND_07_FLAG_DELAY) {
i += COMMAND_07_LEN_DELAY;
} else if (bytes[i] == COMMAND_07_FLAG_ULPRD) {
data.params.period = bytes[i+1] | (bytes[i+2] << 8);
}
}
break;
case 0x00:
if (bytes[5] & 0x80) {
data.params.isOpen = 0;
} else {
data.params.isOpen = 1;
}
break;
case 0x0f:
if (bytes[1] == COMMAND_0f_ALERT_KIND) {
if (bytes[2] == COMMAND_0f_ALERT_OPEN) {
data.params.isOpen = 1;
} else if (bytes[2] == COMMAND_0f_ALERT_CLOSE) {
data.params.isOpen = 0;
}
}
break;
}
return data;
}
下行协议脚本
function ProtocolToRaw(obj) {
var data = new Array();
var i = 0;
data[i++] = 8;// fport=8
data[i++] = 1;// confirmed mode
for (var property in obj.params) {
if ((property == "bound") && (obj.params[property] == 1)) {
data[i++] = 0xA1;
data[i++] = 0x03;
}
if (property == "period") {
data[i++] = 0x9D;
data[i++] = 0x00;
data[i++] = obj.params[property] & 0x00FF;
data[i++] = (obj.params[property] >> 8) & 0x00FF;
}
}
return data;
}
7、提交协议脚本之后,点击导航栏的设备调试,如下图所示
8、点击新建设备,如下图所示,其中DevEUI扫描智慧楼宇套件中的设备后面的二维码获得,AppKey统一为2b7e151628aed2a6abf7158809cf4f3c
。
9、点击设备进入调试页面,设置bound为1并发送。如下图所示:
10、根据 《门磁传感器RHF1S020DWS规格书》中的操作说明,按照章节 3.8 进入无线固件升级, 将磁铁贴近门磁传感器(CE标志面的对面),红色LED从慢闪逐渐常亮后挪开磁铁, 即可让设备会自动重置复位。触发真正的绑定操作。
11、从https://github.com/Tencent/TencentOS-tiny下载示例代码和说明文档。
12、恭喜你,准备工作完成了~
TencentOS tiny 提供了两种开发方式:普通开发方式(使用SDK调用腾讯云API)和云开发方式(在云函数中调用腾讯云API),我们采用普通的SDK开发方式。其设计如下图所示:
具体操作如下:
一、打开微信开发者工具,没有安装的看官,请询问度娘。
二、导入项目: TencentOS_tiny\tools\Mini_Program\iotexplorer_mp_demo
注:AppID本地开发可以暂用测试号,或者从小程序管理后台信息中获取。
三、打开app.js,按照注释说明获取其中的productId
,deviceName
,secretId
和secretKey
的值,这里是小程序和物理设备通信的关键。
四、然后就是业务逻辑相关的开发,先看下最终的效果
其中所有的实现均在pages/index
目录下,如下图所示
五、修改模板页面文件index.wxml
,其中设备信息相关无需修改,只需修改表单controlDeviceData
中的表单项的样式即可,代码如下:
<form bindsubmit="controlDeviceData">
<view style="display:flex; flex-direction:row; justify-content: space-between;">
<view style="font-weight: bold;">
<!-- 修改标题 -->
防盗告警 Demo
</view>
<view>
<button type="primary" size="mini" bindtap="queryDeviceData">查询</button>
<button style="margin-left:20rpx" type="primary" size="mini" form-type="submit">发送</button>
</view>
</view>
<view class="box">
<view class="cell">
<!-- 修改说明:绑定状态 -->
<view>绑定</view>
<view>
<!-- 修改变量名称为deviceData.bound.Value -->
<switch name="bound" checked="{{deviceData.bound.Value}}" />
</view>
</view>
<view class="cell">
<!-- 修改说明:开关状态 -->
<view>开关状态</view>
<view>
<!-- 修改样式和文本 -->
<span name="isOpen">{{deviceData.isOpen.Value==1? '开':'关'}}</span>
</view>
</view>
<view class="cell">
<!-- 修改说明:周期 -->
<view>周期</view>
<view>
<!-- 修改样式和变量 -->
<input name="period" type="number" confirm-type="done" style="width:60px; border:1px solid lightgray; border-radius:25px" value="{{deviceData.period.Value}}"/>
</view>
</view>
</view>
</form>
六、修改index.js
的queryDeviceData
方法,增加门窗打开时的手机震动提示
queryDeviceData()
{
let that = this
wx.showLoading()
// 实例化一个请求对象
let req = new iotmodel.DescribeDeviceDataRequest();
req.DeviceName = app.globalData.deviceName;
req.ProductId = app.globalData.productId;
// 通过client对象调用想要访问的接口,需要传入请求对象以及响应回调函数
this.data.client.DescribeDeviceData(req, function (err, response) {
if (err) {
console.log("err:", err);
wx.showToast({
title: "查询失败 " + err,
icon: 'none',
duration: 3000
})
return;
}
wx.showToast({
title: "查询成功",
icon: 'none',
duration: 1000
})
let deviceData = JSON.parse(response.Data)
that.setData({
deviceData: deviceData
})
console.log(that.data.deviceData);
// 门窗打开时进行震动提示
if(that.data.deviceData.isOpen) {
wx.vibrateLong({
complete: (res) => {console.log(res)},
})
}
});
},
七、修改index.js
的controlDeviceData
方法,正确读取周期设置
controlDeviceData(e) {
let that = this
wx.showLoading()
let data = e.detail.value
// 这里不需要了,直接注释掉
// if (data.period) {
// data.period = 1
// } else {
// data. = 0
// }
console.log('form data:', e.detail.value)
// 实例化一个请求对象
let req = new iotmodel.ControlDeviceDataRequest();
req.DeviceName = app.globalData.deviceName;
req.ProductId = app.globalData.productId;
req.Data = JSON.stringify(data);
// 通过client对象调用想要访问的接口,需要传入请求对象以及响应回调函数
this.data.client.ControlDeviceData(req, function (err, response) {
if (err) {
console.log(err);
wx.showToast({
title: "操作失败 " + err,
icon: 'none',
duration: 3000
})
return;
}
console.log(err)
wx.showToast({
title: "操作成功",
icon: 'none',
duration: 1000
})
});
},
八、点击开发者工具右上角上传按钮即可上传到微信小程序开发者平台。
九、配置域名。在小程序管理后台进行服务器域名配置:进入微信公众平台小程序后台 - 开发 - 开发设置 - 服务器域名 - 输入域名如下两个域名之一,也可两个都添加。
如果使用物联网开发平台 IoT Explorer,输入域名:
iotexplorer.tencentcloudapi.com
。 如果使用物联网通信平台 IoT Hub,输入域名:iotcloud.tencentcloudapi.com
。
十、然后提交审核,审核通过之后即可发布。
各位看官,怎么样,物联网开发起来是不是也没有想象中的那么高大上,那么困难呢。嘻嘻~当然这只是一个简单的demo,如果想要开发更丰富更强大的物联网应用,还是需要费一波功夫的,那就不是5分钟能够解决的问题啦。
本文没有进行过多的复杂的原理和物联网知识的介绍,不过,如果本文能让看官老爷们消除对物联网的gap,有那么一点点喜欢上物联网,想来那也是极好的~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。