摘要:HaaS510开发板可以使用移动网络通信,从而拜托wifi信号依赖。它还支持JavaScript语言,用极简的语句实现非常可靠的上云操作。本文与大家分享上云之后,如何将设备的属性报送到物联网平台。
实验目的:通过haas510间隔5秒钟上报一次智能灯的开关属性LightSwitch,每次翻转。
硬件:haas510 (2.0版本),USB串口
软件:win7 x64,vscode
目录
1.开发环境准备
2.物联网云平台设备注册
3.连接硬件
4.编写代码
5.运行效果
6.延伸阅读:JSON.stringify
1.开发环境准备
如果您已经配置好了基于vscode的haas-studio开发环境,请跳过此步。
如果没有,请参考文章
阿里云开发板vscode开发环境搭建/youngwah292/article/details/120356887?spm=1001..3001.5501
2.物联网云平台设备注册
如果已注册完成,请跳过此步。
如果没有,请参考文章
阿里云开发板HaaS510连接物联网平台--HaaS征文/youngwah292/article/details/120358210?spm=1001..3001.5501
3.连接硬件
按照下图方式进行连接
4.编写代码
代码如下所示。请注意,作者将错误的代码也展示出来了,便于大家对比学习。Interval的中文意思是“间隔; (时间上的)间隙; 间歇”。这里我们设置间隔5秒钟。
每隔5秒的操作是通过调试串口发送一个信息,这个信息就相当于指示灯,告诉开发者,程序正常运行中。
每隔5秒钟,510开发板还会向物联网平台报送一次属性。属性的名字是LightSwitch,值是0或者1。语句lightSwitch=1-lightSwitch的意思就是每次报送之前都会翻转。
var iot = require('iot');var network = require('network');var net = network.openNetWorkClient();/* 设备三元组信息获取请参考common目录下的iot组件说明 */var productKey = 'gcXXXXXjX';var deviceName = 'light001';var deviceSecret = 'b25XXXXXXXXXXXXXXXXXXXXXXXXXXX6db';// 构建物联网连接实例var device;var lightSwitch = 0;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;console.log('Hello World, time: ' + new Date());/* 错误示范 iot.postProps({payload: {LightSwitch:'0'}})*//*正确示范,要想发送属性,就得使用stringify才行*/device.postProps(JSON.stringify({LightSwitch: lightSwitch}));}, 5000);
注意,我们用到了一个方法。如果不用这个方法,比如我们直接用payload:{LightSwitch:'0'}将会带来语法错误。如下图所示,这个截图来自于连接到DEBUG UART的串口助理程序。
修改这个错误的方法也很简单,就是调用JSON.stringify。这个方法起到什么作用?
它的作用是方法用于将 JavaScript 值转换为 JSON 字符串。
使用这个方法,就可以非常简便地实现属性上报。
5.运行效果
登录物联网平台,观察指定设备(本文是light001)的物模型数据,可以看到属性成功上报。
打开串口助理,观察DEBUG UART的输出,可以看到间隔5秒钟显示hello world字符串。假如有错误,间隔5秒钟,除了helloworld,还有其他错误信息。
也可以让物模型实时刷新,这样就可以观察“主灯开关”属性,间隔5秒钟就变化一次。实验成功。
haas-studio提供了一个比较完整的温度测试程序iot-sensor(LM75温度检测程序)。这个例程提供的是IIC接口驱动代码。显得比较复杂。对于新手来说,代码越简单越便于学习。所以本文就做了一个简单的定时发送翻转属性的例子。程序简单,只突出关键问题。
上报属性是一个基本功能,也是物联网知识中的关键内容。做出物联网设备之后,能够将设备状态报云平台感知,是一项物联网设备开发的难点,编程时,经常会犯错。
尤其是参考阿里云的文档之后,出现错误不知如何解决的同学,掌握本文所述的技能是一个非常必要的工作。
6.延伸阅读:JSON.stringify
本部分参考6.延伸阅读:JSON.stringify
JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。
它的语法是
JSON.stringify(value, replacer, space)
要转换的 JavaScript 值通常为对象或数组。例如我们使用的bool型数据0或者1.
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。
space是文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。
下面用一个例子来演示JSON.stringify() 的详细用法和运行效果。
var str = {"name":"菜鸟教程", "site":""}str_pretty1 = JSON.stringify(str)document.write( "只有一个参数情况:" );document.write( "<br>" );document.write("<pre>" + str_pretty1 + "</pre>" );document.write( "<br>" );str_pretty2 = JSON.stringify(str, null, 4) //使用四个空格缩进document.write( "使用参数情况:" );document.write( "<br>" );document.write("<pre>" + str_pretty2 + "</pre>" ); // pre 用于格式化输出
运行效果如下图所示。