当前位置:   article > 正文

HaaS510开板式DTU真机连云:上报监测数据至阿里云物联网平台_dtu 主动上报

dtu 主动上报

背景

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

实际连云的接线图如下:

2023-09-02-1-Hardwear.jpg

搭建环境

硬件连接

根据 HAAS510文档,下载了 amp-win ,结合 SSCOM V5.13.1串口调试助手 进行了测试:按下复位键,apm shakehand begin。

2023-09-02-2-Reset.jpg

软件工具

VSCode 的插件市场搜索 haas-studio 安装,点击左下角的激活 Aos 插件。

2023-09-02-3-HaaSStudio.jpg

2023-09-02-4-Aos.jpg

VSCode 的已安装插件列表中修改了 haas-studio 的版本,从 v2.3.1 降到了 v2.2.0 ,支持创建 JavaScript 的项目。

2023-09-02-5-Project.jpg

HaaS510的HelloWorld

创建的 JavaScript 项目中自带了 HelloWorld 示例程序,点击部署运行,选择本地更新——>选择串口(我这里是COM4:Main UART)——>波特率:115200。

2023-09-02-6-HelloWorld1.jpg
或者使用以下命令进行烧录:

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
  • 1

根据提示复位 DTU 板(板子上的reset按钮),可以通过串口工具在 Debug UART ,我这里是 COM3 ,查看调试输出。

2023-09-02-6-HelloWorld2.jpg

HaaS510真机连云上报数据

硬件连线

分别连接了 Main UART (用于烧录部署应用)和 Debug UART (用于调试与查看日志)。

注意:

  1. 如果烧录程序后,发现云平台的设备依然不在线,可能是没装SIM卡没安装天线或者SIM卡存在机卡分离等原因。
  2. 用的是实际生产环境下的物联网SIM卡,因此要到物联网卡管理平台进行激活,避免机卡分离的问题。

物联网平台配置

添加产品——>添加设备——>编辑物模型。

  • 设备三元组
{
  "ProductKey": "ibneFAfjvhy",
  "DeviceName": "ElectricalFireMonitoringSystem",
  "DeviceSecret": "9dc9c43e02ad25448de2d0913b49f802"
}
  • 1
  • 2
  • 3
  • 4
  • 5

实际编码之前,先用 MQTTX 工具测试下设备的连接性。

2023-09-02-8-MQTTX.jpg

  • 物模型

根据实际的电气火灾监控系统监测指标,模拟了剩余电流、电压、电流以及功率等参数。

2023-09-02-7-ThingModel.jpg

编码实现

以下代码修改自创建的模板项目中的实例: 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();
    });
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85

注意: JSON 字符串中的值类型与物模型中定义的值类型要一致;一开始将在字符串中将传感器的值写成了字符串类型,导致云平台无法解析为 Double ,报错。

2023-09-02-9-Log3.jpg

部署到DTU

将上述代码通过 Main UART 发布至 HAAS510

2023-09-02-7-APP.jpg

Debug UART 串口可以看到属性上报的记录。

2023-09-02-8-COM.jpg

效果验证

阿里云物联网平台上可以看到设备已在线。

2023-09-02-8-Online.jpg

以下是在日志服务、在线调试以及物模型数据在设备上报属性时的记录与展示。

  • 日志服务

2023-09-02-9-Log1.jpg

  • 在线调试

2023-09-02-9-Log2.jpg

  • 物模型数据

2023-09-02-9-Log4.jpg

小总结

这篇文章主要介绍了 HaaS510 开板式 DTU (数据传输单元)的真机连云过程,以及如何将监测数据上报至阿里云物联网平台。文章提供了硬件和软件环境的准备步骤,包括硬件设备和软件工具的连接和配置。然后,文章演示了如何使用 HaaS510HelloWorld 示例程序和 JavaScript 编码实现真机连云上报数据的功能。最后,文章验证了连云效果,并提供了参考资料供进一步学习和开发。

Reference

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/494059
推荐阅读
相关标签
  

闽ICP备14008679号