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"

}

相关文章
|
3月前
|
资源调度 JavaScript Linux
【Azure 应用服务】本地Node.js部署上云(Azure App Service for Linux)遇到的三个问题解决之道
【Azure 应用服务】本地Node.js部署上云(Azure App Service for Linux)遇到的三个问题解决之道
|
1月前
|
人工智能 JavaScript 前端开发
使用Node.js模拟执行JavaScript
使用Node.js模拟执行JavaScript
|
1月前
|
消息中间件 JavaScript 前端开发
用于全栈数据流的 JavaScript、Node.js 和 Apache Kafka
用于全栈数据流的 JavaScript、Node.js 和 Apache Kafka
44 1
|
1月前
|
JavaScript 前端开发
电话号码正则表达式 代码 javascript+html,JS正则表达式判断11位手机号码
电话号码正则表达式 代码 javascript+html,JS正则表达式判断11位手机号码
101 1
|
1月前
|
Web App开发 JavaScript 前端开发
Node.js:JavaScript世界的全能工具
Node.js:JavaScript世界的全能工具
|
1月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
17 0
|
1月前
|
移动开发 JavaScript 前端开发
【JavaScript】JS执行机制--同步与异步
【JavaScript】JS执行机制--同步与异步
21 0
|
1月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
|
3月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
50 1
|
3月前
|
Java 数据库连接 数据库
从零到精通:揭秘 Hibernate 构建持久层服务的全过程,你离数据持久化大师还有多远?
【8月更文挑战第31天】本文详细介绍了如何从零开始使用 Hibernate 构建一个持久层服务。首先,通过在 Maven 项目中添加必要的依赖,确保项目具备使用 Hibernate 的条件。接着,配置 `hibernate.cfg.xml` 文件以连接 MySQL 数据库,并设置了基本属性。然后定义了一个简单的 `User` 实体类及其映射关系。此外,还创建了一个 `HibernateUtil` 工具类来管理 `SessionFactory`。
40 0