背景
HaaS: Hardware as a Service。
HAAS510
是一种开板式 DTU
,旨在为用户已开发好的设备快速增加 4G
连云能力的 4G CAT1
数传模块。它通过将模组与用户设备集成到一个外壳内,既保持设备的一体性,又降低重新开发 PCB
的时间消耗和模组开发的难度。 HAAS510
产品采用了 JavaScript
脚本的方式,将模组的本地串口通信和通过 4G
连接云端平台的能力开放给用户。同时,它还为用户提供了编写本地业务逻辑的能力,使得用户可以根据不同的应用场景,在设备侧完成数据清洗甚至一些简单的控制功能,从而给用户带来更大的创新自由度。
依托阿里云物联网平台,结合 HAAS510
的连云能力、实际生产环境中的电气火灾监控系统以及4G物联网卡,实现对电气火灾的远程监测。
物料准备
-
硬件设备
- HaaS510
- USB转双TTL串口
- FPC天线
- SIM卡
-
软件环境
- amp-win
- SSCOM V5.13.1串口调试助手
- VSCode
- MQTTX
HAAS510
上有两个 UART
,并且为方便接线,对杜邦线做了分组: Main UART
(用于烧录部署应用)和 Debug UART
(用于调试与查看日志),由于我先接了 Debug UART
,所有 COM
口的情况如下:
- Debug UART:COM3
- Main UART:COM4
实际连云的接线图如下:
搭建环境
硬件连接
根据 HAAS510
的文档,下载了 amp-win
,结合 SSCOM V5.13.1串口调试助手
进行了测试:按下复位键,apm shakehand begin。
软件工具
在 VSCode
的插件市场搜索 haas-studio
安装,点击左下角的激活 Aos
插件。
在 VSCode
的已安装插件列表中修改了 haas-studio
的版本,从 v2.3.1
降到了 v2.2.0
,支持创建 JavaScript
的项目。
HaaS510的HelloWorld
创建的 JavaScript
项目中自带了 HelloWorld
示例程序,点击部署运行,选择本地更新——>选择串口(我这里是COM4:Main UART)——>波特率:115200。
或者使用以下命令进行烧录:
c:\Users\nxq01\.vscode\extensions\haas.haas-studio-2.2.0/amp/amp-win/dist/amp.exe serialput d:\JavaScript\Node.js\haas-test\test_demo\solutions\test_demo COM4 -b 115200
根据提示复位 DTU
板(板子上的reset按钮),可以通过串口工具在 Debug UART
,我这里是 COM3
,查看调试输出。
HaaS510真机连云上报数据
硬件连线
分别连接了 Main UART
(用于烧录部署应用)和 Debug UART
(用于调试与查看日志)。
注意:
- 如果烧录程序后,发现云平台的设备依然不在线,可能是没装SIM卡、没安装天线或者SIM卡存在机卡分离等原因。
- 用的是实际生产环境下的物联网SIM卡,因此要到物联网卡管理平台进行激活,避免机卡分离的问题。
物联网平台配置
添加产品——>添加设备——>编辑物模型。
- 设备三元组
{
"ProductKey": "ibneFAfjvhy",
"DeviceName": "ElectricalFireMonitoringSystem",
"DeviceSecret": "9dc9c43e02ad25448de2d0913b49f802"
}
实际编码之前,先用 MQTTX
工具测试下设备的连接性。
- 物模型
根据实际的电气火灾监控系统监测指标,模拟了剩余电流、电压、电流以及功率等参数。
编码实现
以下代码修改自创建的模板项目中的实例: iot-device
。
let iot = require('iot');
let network = require('network');
let net = network.openNetWorkClient();
/* 设备三元组信息 */
let productKey = 'ibneFAfjvhy';
let deviceName = 'ElectricalFireMonitoringSystem';
let deviceSecret = '9dc9c43e02ad25448de2d0913b49f802';
let device;
let topic = '/sys/' + productKey + '/' + deviceName + '/thing/event/property/post';
/* 模拟属性数据:JSON字符串*/
let json = '{"RC":0.5,"LineCurrent":8.0,"LineVotage":210.0,"LinePower":20.0}';
function createDevice() {
device = iot.device({
productKey: productKey,
deviceName: deviceName,
deviceSecret: deviceSecret
});
device.on('connect', function() {
console.log('(re)connected');
device.subscribe({
topic: topic,
qos: 0
});
setInterval(function() {
/* post props */
device.postProps(json);
}, 5000);
/* 云端设置属性事件 */
device.onProps(function(res) {
console.log('cloud req msg_id is ' + res.msg_id);
console.log('cloud req params_len is ' + res.params_len);
console.log('cloud req params is ' + res.params);
});
/* 云端下发服务事件 */
device.onService(function(res) {
console.log('received cloud msg_id is ' + res.msg_id);
console.log('received cloud service_id is ' + res.service_id);
console.log('received cloud params_len is ' + res.params_len);
console.log('received cloud params is ' + res.params);
});
});
/* 网络断开事件 */
device.on('disconnect', function() {
console.log('disconnect ');
});
/* mqtt消息 */
device.on('message', function(res) {
console.log('mqtt message')
console.log('mqtt topic is ' + res.topic);
console.log('mqtt payload is ' + res.payload);
})
/* 关闭连接事件 */
device.on('end', function() {
console.log('iot client just closed');
});
/* 发生错误事件 */
device.on('error', function(err) {
console.log('error ' + err);
});
}
let status = net.getStatus();
console.log('net status is: ' + status);
if (status == 'connect') {
createDevice();
} else {
net.on('connect', function() {
createDevice();
});
}
注意: JSON
字符串中的值类型与物模型中定义的值类型要一致;一开始将在字符串中将传感器的值写成了字符串类型,导致云平台无法解析为 Double
,报错。
部署到DTU
将上述代码通过 Main UART
发布至 HAAS510
。
从 Debug UART
串口可以看到属性上报的记录。
效果验证
阿里云物联网平台上可以看到设备已在线。
以下是在日志服务、在线调试以及物模型数据在设备上报属性时的记录与展示。
- 日志服务
- 在线调试
- 物模型数据
小总结
这篇文章主要介绍了 HaaS510
开板式 DTU
(数据传输单元)的真机连云过程,以及如何将监测数据上报至阿里云物联网平台。文章提供了硬件和软件环境的准备步骤,包括硬件设备和软件工具的连接和配置。然后,文章演示了如何使用 HaaS510
的 HelloWorld
示例程序和 JavaScript
编码实现真机连云上报数据的功能。最后,文章验证了连云效果,并提供了参考资料供进一步学习和开发。
Reference
- AIOT应用框架开发手册HaaS510