背景
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


















