案例介绍
基于HaaS EDU K1开发,通过I2C采集温湿度的数据,并且通过IoT组件上云的JavaScript轻应用案例。
简介
本案例主要分为三个部分:
- 环境准备
- 温湿度数据采集
- 数据上云
环境准备
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"
}