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轻应用固件,操作步骤如下。

创建项目

扫描二维码关注公众号,回复: 13163877 查看本文章

 等待下载

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

编译烧写

以HaaS EDU K1为例

编译

编译成功

烧写

选择串口


烧写中

 
烧写成功 

温湿度采集

说明:案例开发基于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.查看产品详情

5.定义物模型

(1)创建湿度模型

(2)创建温度模型

6.创建设备

7.获取登录信息

说明:获取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连接

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

}

猜你喜欢

转载自blog.csdn.net/HaaSTech/article/details/119909644