摘要:本文介绍使用HaaS510从串口接收数据,从数据中提取所需的属性值,并发送到物联网平台的方法。从串口接收到的数据格式是JSON格式。
实验目的:通过上位机向haas510发送JSON字符串,由HaaS510解析提取出指定的属性值,并发送到云平台。
硬件:haas510 (2.0版本),USB串口
软件:win7 x64,vscode
目录
1.关键知识点介绍
2.编写源代码
3.观察运行效果
1.关键知识点介绍
本实验将电脑作为上位机,上位机通过USB串口与HaaS510连接。假如您使用其他微处理器,只要能够发送JSON格式的字符串,效果是相同的。实验的关键知识点有2个。
第一个知识点,怎么样将串口接收到的数据转换为字符串。我们知道,串口通信时,是8位8位地接收数据,相当于一个个的8位数据的数组,这个数组最初并不是字符串,我们可以将其理解为一系列的十六进制数据。所以我们需要将这些数据还原为字符串,然后再解析。
详见文档
阿里云开发板HaaS510响应UART串口指令https://blog.csdn.net/youngwah292/article/details/120377994?spm=1001.2014.3001.5501https://blog.csdn.net/youngwah292/article/details/120377994?spm=1001.2014.3001.5501
第二个知识点,怎么样将字符串解析出关键属性值。这个知识点也通过文档进行了详细解释。
阿里云开发板HaaS510解析JSON数据
2.编写源代码
本文直接提供源代码
var iot = require('iot');
var network = require('network');
var uart = require('uart');
var net = network.openNetWorkClient();
/* 设备三元组信息获取请参考common目录下的iot组件说明 */
var productKey = 'gcCCCCCCu2';
var deviceName = 'ceCCCCCCC01';
var deviceSecret = 'eeSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSb3a9';
// 构建物联网连接实例
var device;
var lightSwitch = 0;
//测试解析一个json字符串,这里并没有解析串口的字符串,而是解析的一个固定数组的字符串。
var json = '{"uid":"123456","beizhu":"5557589","shijian":"20210919"}';
var obj = JSON.parse(json);
// user uart
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('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');
}
});
})
setInterval(function () {
lightSwitch = 1 - lightSwitch;
// user uart send data
serial.write(msgbuf);
//下面显示解析过的内容
console.log(obj);
console.log(obj.uid);
console.log(obj.beizhu);
console.log(obj.shijian);
/* 错误示范 iot.postProps({
payload: {LightSwitch:'0'}
})*/
/*正确示范,要想发送属性,就得使用stringify才行*/
device.postProps(
JSON.stringify({
LightSwitch: lightSwitch
})
);
}, 5000);
// user uart data receive
serial.on('data', function(data) {
console.log('uart receive data is ' + ArrayToString(data));
json = ArrayToString(data);
//然后将字符串进行解析
obj = JSON.parse(json);
//下面发送几个关键属性值json = '{"uid":"123456","beizhu":"5557589","shijian":"20210919"}'
device.postProps(
JSON.stringify({
uid:obj.uid,beizhu:obj.beizhu,shijian:obj.shijian
})
);
});
其中关键的代码是串口接收到数据之后,对数据进行解析的操作。
json = ArrayToString(data);
//然后将字符串进行解析
obj = JSON.parse(json);
//下面发送几个关键属性值json = '{"uid":"123456","beizhu":"5557589","shijian":"20210919"}'
device.postProps(
JSON.stringify({
uid:obj.uid,beizhu:obj.beizhu,shijian:obj.shijian
})
);
3.观察运行效果
首先连接硬件
本实验提供的源代码运行之后,会有多个实验效果,如下图所示。不再一一截屏演示,有兴趣的读者可以查看我写的其他HaaS510文章。
本实验关注的重点是第5个实验效果,也就是通过上位机发送一个JSON字符串,看HaaS510能否实时解析并将值上报到云端。
通过电脑向HaaS510的用户串口发送数据
{"uid":"888888","beizhu":"666666","shijian":"20210920"}
可以观察到这个数据被解析,通过调试串口也有相应的显示。
数据都上传到云端了。备注、时间、uid、主灯开关都相应地做出了改变。
至此,实验成功。
工作到此处,您就可以使用HaaS510设计一台物联网设备了。使用一个MCU编写功能代码。将需要上传到云端的数据以JSON格式发送给HaaS510,就可以实现属性值的上报功能。怎么样,简单吧!
如果您还是没有将所有的内容全部掌握,那么建议您参考作者其他文章。
予人玫瑰,手有余香。