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

案例介绍

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

简介

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

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

环境准备

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

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

固件烧写

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

创建项目

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

等待下载

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

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

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

编译烧写

以HaaS EDU K1为例

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

编译

编译成功

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

烧写

选择串口

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

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

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

温湿度采集

说明:案例开发基于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.进入物联网平台

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

2.创建产品

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

3.创建产品配置

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

4.查看产品详情

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

5.定义物模型

(1)创建湿度模型

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

(2)创建温度模型

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

6.创建设备

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

7.获取登录信息

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

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

代码编写


// 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"

}

上一篇:HaaS UI在智能门禁产品上落地


下一篇:Shopex V4.8.4 V4.8.5 后台拿Shell 0Days