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

创建项目

等待下载

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

编译烧写

以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连接

 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"

}

相关文章
|
1月前
|
JavaScript 前端开发 Go
动态加载与异步加载 JavaScript 详解:加载远程js,加载成功后执行回调函数
动态加载与异步加载 JavaScript 详解:加载远程js,加载成功后执行回调函数
209 1
|
1月前
|
前端开发 JavaScript 区块链
连接区块链节点的 JavaScript 库 web3.js
连接区块链节点的 JavaScript 库 web3.js
|
7天前
|
机器学习/深度学习 JavaScript 前端开发
【JS】深度学习JavaScript
【JS】深度学习JavaScript
7 2
|
12天前
|
移动开发 JavaScript 前端开发
Phaser和Three.js是两个非常流行的JavaScript游戏框架,它们各自拥有独特的核心功能和使用场景
【6月更文挑战第16天】Phaser是开源的2D游戏引擎,适合HTML5游戏,提供物理引擎、图像渲染和资源管理,适用于2D游戏,如消消乐。Three.js是基于WebGL的3D库,用于创建复杂的3D场景和应用,涵盖从游戏到可视化领域的多种用途。两者分别在2D和3D开发中展现强大功能,选择取决于项目需求。
22 8
|
14天前
|
缓存 JavaScript 前端开发
js/javascript获取时间戳的5种方法
js/javascript获取时间戳的5种方法
|
17天前
|
JavaScript 前端开发 开发者
JavaScript基础-JS输出与变量声明
【6月更文挑战第11天】本文介绍了JavaScript基础的输出和变量声明,包括`console.log`的使用及常见错误,如忘记调用和输出复杂数据结构。此外,文章讲解了`var`、`let`和`const`的差异,强调了`const`的引用不变性以及在何时选择使用`let`和`const`。通过理解这些基础知识和避免常见问题,初学者能更好地进行代码调试和编写。
|
25天前
|
前端开发 JavaScript API
Vue.js:渐进式JavaScript框架-前端开发
Vue.js:渐进式JavaScript框架-前端开发
24 3
|
1月前
|
移动开发 JavaScript 前端开发
Phaser和Three.js是两个非常流行的JavaScript游戏框架
【5月更文挑战第14天】Phaser是开源的2D游戏引擎,适合HTML5游戏开发,内置物理引擎和强大的图形渲染功能,适用于消消乐等2D游戏。Three.js是基于WebGL的3D库,用于创建3D场景和应用,支持各种3D对象和交互功能,广泛应用于游戏、可视化等领域。选择框架取决于项目需求,2D选Phaser,3D选Three.js。
22 4
|
1月前
|
JavaScript 前端开发
JavaScript-jQuery的使用 + JS的案例
JavaScript-jQuery的使用 + JS的案例
26 0
|
1月前
|
JSON JavaScript 前端开发
使用JavaScript和XLSX.js将数据导出为Excel文件
使用JavaScript和XLSX.js将数据导出为Excel文件
69 0

热门文章

最新文章