JavaScript照样能打!JS版的温湿度上云来啦-阿里云开发者社区

开发者社区> 一起来IoT> 正文

JavaScript照样能打!JS版的温湿度上云来啦

简介: 基于HaaS EDU K1开发,通过I2C采集温湿度的数据,并且通过IoT组件上云的JavaScript轻应用案例。
+关注继续查看

案例介绍

基于HaaS EDU K1开发,通过I2C采集温湿度的数据,并且通过IoT组件上云的JavaScript轻应用案例。

简介

本案例主要分为三个部分:

  1. 环境准备
  2. 温湿度数据采集
  3. 数据上云

环境准备

1.烧写支持轻应用的HaaS Edu K1开发板

2.下载VScode软件,并且安装HaaS Studio插件

固件烧写

案例是基于JavaScript轻应用,需要能运行javascript代码的硬件环境,需要保证HaaS Edu K1烧写了支持JavaScript轻应用固件,操作步骤如下。

创建项目

image

等待下载

image

创建成功,跳转到新项目。

image

编译烧写

以HaaS EDU K1为例

image

编译

编译成功

image

烧写

选择串口

image
烧写中

image
烧写成功

image

温湿度采集

说明:案例开发基于HaaS Edu K1单板自带温湿度模块Si7006,具体参考硬件资源

代码编写

// app.js

import * as i2c from 'i2c';


// 初始化对应的I2C

let sensor = i2c.open({

  id: 'sensor',

  success: function () {

    // 初始化成功

    console.log('open i2c success')

  },

  fail: function () {

    // 初始化失败

    console.log('open i2c failed')

  }

});


setInterval(function () {

  // 切换成温度模式

  sensor.write([0xF3]);

  sleepMs(30)

  // 代码功能:原始数据格式为[142,124]转成0x8e7c,再解析成数值36476

  var tempData = Number('0x' + sensor.read(2).map((i) => ((i < 10 ?  '0': '') + i.toString(16))).toString().replace(/,/g, ''));

  // 温度公式,可参考Si7006的datasheet

  var temp = ((175.72 * tempData) / 65536 - 46.85).toFixed(2);

  console.log('temp data is ' + temp);


  sleepMs(30);


  // 切换成湿度模式

  sensor.write([0xF5]);

  sleepMs(30);

  // 代码功能:原始数据格式为[142,124]转成0x8e7c,再解析成数值36476

  var humiData = Number('0x' + sensor.read(2).map((i) => ((i < 10 ?  '0': '') + i.toString(16))).toString().replace(/,/g, ''));

  // 湿度公式,可参考Si7006的datasheet

  var humi = ((125 * humiData) / 65536 - 6).toFixed(2);

  console.log('humi data is ' + humi);

}, 1000);


// app.json

{

    "version": "1.0.0",

    "io": {

        "sensor": {

            "type": "I2C",

            "port": 1,

            "addrWidth": 7,

            "freq": 400000,

            "mode": "master",

            "devAddr": 64

        }

    },

    "debugLevel": "DEBUG"

}


数据上云

上云分两部分展开,一部分是云端配置,一部分是代码编写。

说明:使用netmgr组件连接网络,再通过iot将采集到的数据上传云端。

云端配置

1.进入物联网平台

image

2.创建产品

image

3.创建产品配置

image

4.查看产品详情

image

5.定义物模型

(1)创建湿度模型

image

(2)创建温度模型

image

6.创建设备

image

7.获取登录信息

说明:获取productKey, deviceName, deviceSecret填入代码中

image

代码编写


// app.js

import * as i2c from 'i2c';

import * as netmgr from 'netmgr';

import * as iot from 'iot';


let sensor = i2c.open({

  id: 'sensor',

  success: function () {

    console.log('open i2c success')

  },

  fail: function () {

    console.log('open i2c failed')

  }

});


function uploadData(iotdev) {

  // 获取云端下发的消息

  iotdev.onService(function(service) {

    console.log('received cloud service id ' + service.service_id);

    console.log('received cloud service param  ' + service.params);

    console.log('received cloud service param len  ' + service.params_len);

  });

  // 云端收到上报下发的消息

  iotdev.onProps(function(properity) {

    console.log('received cloud properity param ' + properity.params);

    console.log('received cloud properity param len ' + properity.params_len);

  });

  // 每一秒钟上报温湿度数据

  setInterval(function () {

    sensor.write([0xF3]);

    sleepMs(30)

    // 代码功能:原始数据格式为[142,124]转成0x8e7c,再解析成数值36476

    var tempData = Number('0x' + sensor.read(2).map((i) => ((i < 16 ?  '0': '') + i.toString(16))).toString().replace(/,/g, ''));

    console.log('tempData:', tempData);

    var temp = ((175.72 * tempData) / 65536 - 46.85);

    console.log('temp data is ' + temp);


    sleepMs(30);


    sensor.write([0xF5]);

    sleepMs(30);

    // 代码功能:原始数据格式为[142,124]转成0x8e7c,再解析成数值36476

    var humiData = Number('0x' + sensor.read(2).map((i) => ((i < 16 ?  '0': '') + i.toString(16))).toString().replace(/,/g, ''));

    var humi = ((125 * humiData) / 65536 - 6);;

    console.log('humi data is ' + humi);


    // 上报数据到云端

    iotdev.postProps(

        JSON.stringify({

            Humidity: humi,

            Temperature: temp,

        })

    );

  }, 1000);

}


function iotDeviceCreate() {

  const productkey = 'xxxxxx';     //请输入您的pk

  const devicename = 'xxxxxx';    //请输入您的dn

  const devicesecret = 'xxxxxx';   //请输入您的ds

  // 初始化IoT连接

  iotdev = iot.device({

      productKey: productkey,

      deviceName: devicename,

      deviceSecret: devicesecret

  });

  // IoT连接成功

  iotdev.on('connect', function () {

      console.log('success connect to aliyun iot server');

      // 上报数据

      uploadData(iotdev);

  });


  // IoT重新连接

  iotdev.on('reconnect', function () {

      console.log('success reconnect to aliyun iot server');

  });

  // IoT断开连接

  iotdev.on('disconnect', function () {

      console.log('aliyun iot server disconnected');

  });

}


// 初始化网络,基于wifi的连接

var network = netmgr.openNetMgrClient({

  name: '/dev/wifi0'

});


// 连接网络

network.connect({

  ssid: 'xxxxx',             //请替换为自己的热点ssid

  password: 'xxxxx'      //请替换为自己热点的密码

});


// 连接失败的监听

network.on('error', function () {

  console.log('error ...');

});


// 连接成功的监听

network.on('connect', function () {

  console.log('net connect success');

  // 连接成功后建立IoT连接

  iotDeviceCreate();

});


// app.json

{

    "version": "1.0.0",

    "io": {

        "sensor": {

            "type": "I2C",

            "port": 1,

            "addrWidth": 7,

            "freq": 400000,

            "mode": "master",

            "devAddr": 64

        }

    },

    "debugLevel": "DEBUG"

}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
拼不过 GO?阿里如何重塑云上的 Java
Java 诞生于20年前,拥有大量优秀的企业级框架,践行 OOP 理念,更多体现的是严谨以及在长时间运行条件下的稳定性和高性能。反观如今,在要求快速迭代交付的云场景下,语言的简单性似乎成了首要的要求,而传统的 Java 语言显得有一些过于重量了。今天,阿里 JVM 团队技术专家郁磊(花名:梁希)分享 JVM 团队是如何面对和处理集团巨大的业务规模和复杂的业务场景的。
963 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4401 0
日志上云利器 - Aliyun LOG Java Producer
日志无处不在,它作为记录世间万物变化的载体,在运维、研发、运营、安全、BI、审计等领域有着广泛的应用场景。阿里云日志服务是日志类数据的一站式服务平台,其核心组件 LogHub 凭借着高吞吐、低延迟、可自动伸缩等特性,逐渐成为大数据处理领域特别是实时数据处理场景下的基础设施。
6298 0
JAVA实现RTMP推流上传阿里云OSS的签名URL
由于目前官方帮助文档提供的示例是Python的,本文介绍如何使用JAVA实现生成LiveChannel的签名URL,包括推流地址和播放地址。
1257 0
阿里云OSS追加上传(java)
需求:不断接收数据,将数据写入文件存放到OSS 方案: 1、接收到文件后写到本地,定期或实时覆盖上传到OSS 2、OSS追加上传 只贴2代码: 标红处注意,如不声明则写入OSS中文会乱码。
2684 0
拼不过 GO?阿里如何重塑云上的 Java
Java 诞生于20年前,拥有大量优秀的企业级框架,践行 OOP 理念,更多体现的是严谨以及在长时间运行条件下的稳定性和高性能。反观如今,在要求快速迭代交付的云场景下,语言的简单性似乎成了首要的要求,而传统的 Java 语言显得有一些过于重量了。今天,阿里 JVM 团队技术专家郁磊(花名:梁希)分享 JVM 团队是如何面对和处理集团巨大的业务规模和复杂的业务场景的。
12446 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9407 0
Java日志上云三剑客:Log4J/LogBack/Producer Lib
日志服务提供30多种数据采集方式,针对服务器、移动端、嵌入式设备及各种开发语言都提供完整的接入方案。对 Java 开发者而言,没有什么比熟悉的日志框架 Log4j、Log4j2、Logback Appender 更好使的了。
23242 0
+关注
18
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载