当前位置:网站首页>阿里云开发板HaaS510将串口获取数据发送到物联网平台
阿里云开发板HaaS510将串口获取数据发送到物联网平台
2022-06-12 13:45:00 【TMS320VC5257H】
摘要:阿里云HaaS510开发板以4G网络形式联网,可以摆脱wifi依赖,从而可以广泛应用于各类物联网设备开发。作为一款专门用来与阿里云物联网平台通信的模块,它有一个基本而强大的功能就是将串口获取的数据或指令通过4G网络发送到物联网平台,通过JavaScript以极短的代码来实现。

实验目的:通过haas510接收上位机发来的串口指令,将它作为物联网设备的属性值发送。
硬件:haas510 (2.0版本),USB串口
软件:win7 x64,vscode
目录
1.常用的物联网平台JavaScript方法
常用方法有“上报属性”“上报事件”,另外还有“关闭实例”“注册回调函数”等。

本实验用到的是postProps方法。该方法作用就是上报设备属性。参数只有1个,就是属性的json格式字符串。这个是有固定格式的,格式有误也不能正常上报。一般是属性名--冒号---属性值,但是要经过处理才行,具体的处理方法请继续阅读本文。

2.上报设备属性的json字符串处理方法
假如我们的设备属性是text类型,标识符是beizhu。

那么一个标准的属性字符串就是 {"beizhu":"xxxxxxxx"}
使用JavaScript编写程序上报这个属性时,您不能提前预料到串口收到的数据是什么,所以不能直接使用一条完整的字符串发送给物联网平台。
正确的做法是获取串口数据后,和半条字符串连接成一条。具体代码是
JSON.stringify({beizhu:ArrayToString(data)})data就是串口接收到的数据,通过stringify反复就把花括号在内的字符串统一转换为一条完整的json字符串了。
json是什么?
JSON = JavaScript Object Notation,有的翻译为JS 对象简谱
从字面意思就可以看出来它是JavaScript的亲儿子,JavaScript支持它是默认的。
这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。
本实验就用的是stringify方法,因为是原生,所以代码量很少。
3.编写上报属性源代码
本文直接将经过调试的源代码贡献出来,大家复制粘贴即可。
var iot = require('iot');
var network = require('network');
var uart = require('uart');
var net = network.openNetWorkClient();
/* 设备三元组信息获取请参考common目录下的iot组件说明 */
var productKey = 'gcXXXXXvu2';
var deviceName = 'cewSSSSS001';
var deviceSecret = 'ee213aSSSSSSSSSadcdedb3a9';
// 构建物联网连接实例
var device;
var lightSwitch = 0;
// 打开用户串口,在HaaS中,用户串口号是UART2
var serial = uart.open({
id: 'UART2'
});
var msgbuf = [97, 98, 99, 100];
function ArrayToString(fileData) {
var dataString = "";
for (var i = 0; i < fileData.length; i++) {
dataString += String.fromCharCode(fileData[i]);
}
return dataString;
}
//net.on用来使用三元组数据连接物联网平台,核心是实现了一个MQTT客户端
net.on('connect', function () {
device = iot.device({
productKey: productKey,
deviceName: deviceName,
deviceSecret: deviceSecret,
region: 'cn-shanghai',
success: function () {
console.log('iot: [success] connect');
},
fail: function () {
console.log('iot: [failed] connect');
}
});
})
//定时程序,这个程序实现的是5秒钟定时,每次都翻转主灯开关的状态,向用户串口发送一个数组数据
//再将主灯开关状态发送到物联网平台
setInterval(function () {
lightSwitch = 1 - lightSwitch;
// user uart send data
serial.write(msgbuf);
/* 错误示范 iot.postProps({
payload: {LightSwitch:'0'}
})*/
/*正确示范,要想发送属性,就得使用stringify才行*/
device.postProps(
JSON.stringify({
LightSwitch: lightSwitch
})
);
}, 5000);
// serial.on用于响应串口数据接收事件,用户串口接收啥,就通过调试串口发送啥到物联网平台的备注属性。
//注意,两个串口不是同一个。
serial.on('data', function(data) {
console.log('uart receive data is ' + ArrayToString(data));
device.postProps(
JSON.stringify({
beizhu: ArrayToString(data)
})
);
});4.观察实验效果
硬件连接如下图所示

实验效果有以下几个方面呈现。
首先设备会在线,这个是net.on实现的
其次用户串口会定时5秒发送4个字符(其实是数组)到上位机,这个是setInterval实现的。

然后是当上位机通过串口发送一个字符串的时候,HaaS510会将这个字符串发送到物联网平台,作为beizhu属性的值。

至此,实验成功。
存在的一点不足是:当设计的物联网设备只有1个属性的时候,可以这样直接将串口数据发送到物联网平台。但是实际研发工作中,每一台设备的属性不可能仅仅有一个属性,它往往有很多个属性。如果简单粗暴的将串口数据一股脑上报为一个字符串,那么显然并不是一个成熟的设备应该具备的。
因此,我们还需要对串口发来的数据进行解析,将每个属性的值提取出来,再对应发送到云平台。
这是下一步我们需要做的。
边栏推荐
- Return value of WaitForSingleObject
- Innovation training (XII) project summary
- JSP jump problem, unable to display database data, and unable to jump
- 开发中使用的语言技巧
- Web3.0, the era of "stimulating creativity"
- 数据类型转换和条件控制语句
- Pytorch framework
- 事件的传递和响应以及使用实例
- "Non" reliability of TCP
- M1 pod install pod lint failure solution
猜你喜欢

Script引入CDN链接提示net::ERR_FILE_NOT_FOUND问题

Pytorch framework

Understanding recursion

Multi source BFS problem template (with questions)

Title: Yanghui triangle
![[WUSTCTF2020]颜值成绩查询-1](/img/dc/47626011333a0e853be87e492d8528.png)
[WUSTCTF2020]颜值成绩查询-1

简历 NFT 平台 TrustRecruit 加入章鱼网络成为候选应用链
![[Title brushing] Super washing machine](/img/f9/0c69afafa8b32afc5df5e91d6af172.png)
[Title brushing] Super washing machine

Qualcomm platform development series (Protocol) QMI brief introduction and usage
Ffmpeg Learning Guide
随机推荐
Introduction to color coding format
618 entered the second half of the period, apple occupied the high-end market, and the domestic mobile phones finally undercut the price competition
Deploy opengauss database based on Huawei cloud Kunpeng elastic ECS [Gauss is not a mathematician this time]
Qt5 plug-in production
Successfully rated Tencent t3-2, 10000 word parsing
Implementing singleton mode of database under QT multithreading
Multi source BFS problem template (with questions)
Cdeforces 1638 C. inversion graph - simple thinking
Octopus network progress monthly report | may 1-May 31, 2022
[wustctf2020] selfie score query -1
lua 常用内置函数
Time processing in C language (conversion between string and timestamp)
Web3.0,「激发创造」的时代
[wustctf2020] selfie score query -1
D1 哪吒开发板 了解基本的启动加载流程
Informatics Olympiad all in one 1000: introductory test questions
There was an error installing mysql. Follow the link below to CMD
【SemiDrive源码分析】【X9芯片启动流程】26 - R5 SafetyOS 之 LK_INIT_LEVEL_TARGET 阶段代码流程分析(TP Drvier、Audio Server初始化)
2062: [example 1.3] movie tickets
imagemagick:a gentle introduction to magick++