基于HaaS EDU K1的温湿度采集上云案例

功能介绍

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

功能使用

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

  1. 温湿度数据采集

  2. 数据上云

温湿度采集

说明

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

进入物联网

2.创建产品

创建产品

3.创建产品配置

创建产品4.查看产品详情

查看产品详情

6.定义物模型

湿度

温度

7.创建设备

创建设备

8.获取登录信息

说明

获取productKey, deviceName, deviceSecret填入代码中

登录信息

代码编写

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