摘要:本篇文章将前期几个专题综合起来,基于阿里云HaaS100的新固件设计制作一个智能灯。这个智能灯由云平台、手机APP端和设备端组成,基本上涵盖了一个物联网小项目所需的主要步骤。
目录
参考文章:
2.阿里云haas100开发板源代码适配python3.7版本的方法
3.阿里云HaaS100物联网开发板学习笔记(一)硬件资源介绍
4.阿里云HaaS100物联网开发板学习笔记(二)硬件控制初步--让小灯闪烁起来
5.阿里云HaaS100物联网开发板学习笔记(三)轻应用初步--用js让小灯闪烁起来
6.阿里云HaaS100物联网开发板学习笔记(四)轻应用初步--用javascript连接阿里云物联网平台
7.阿里云HaaS100物联网开发板学习笔记(五)推送js代码的步骤--基于更新过的固件
10.物联网控制APP入门专题(一)---做物联网APP的几个模式简介
11.物联网控制APP入门专题(二)---阿里云iot studio移动可视化功能基本操作
12.物联网控制APP入门专题(三)---使用第三方平台将网页打包成APP
13.物联网控制APP入门专题(四)---使用android studio制作一个控制页面的APP框架
15.物联网控制APP入门专题(五)---使用android studio直接编写物联网控制APP
硬件平台:HaaS100。
软件平台:win7 x64,amp-win,notepad++,vscode,IoT Studio
1.在阿里云物联网平台注册设备
详细步骤轻参考:如何在阿里云物联网平台新增一个设备
注意“产品”和“设备”的区别,新增产品时,会设置这一类产品的“属性”,在这类产品下新增“设备”,不管新增多少,都具有相同的“产品属性”。“设备”新增成功后,就有了设备“三元组”,在调试生活物联网的设备时,有时用到的是“四元组”。不管怎样,这几个字符串代表的是一个专门设备的“身份证”,有了“身份证”,才能证明这个世界上只有一个“我”,才能在江湖上合法行走对吧。
特别说明,阿里云生活物联网平台(飞燕平台)注册的新设备,在阿里云物联网平台上也可以查看并管理。
2.编写HaaS100轻应用并烧录
有了阿里云物联网平台的虚拟“物”---设备,就需要在现实世界里,做一个真正的设备,让它跟阿里云上的设备对应起来。
为了让真实设备和阿里云虚拟设备对应起来,有几个前提条件需要具备:一是可以联网,不管是wifi还是gprs;二是遵守相同的通信规则,阿里云采用的是mqtt(事实上IBM当年也没想到这个东东能成为今日物联网真正意义上的国际标准);三是遵守一定的加密规则,MQTT客户端是有一定的加密规则的,用来确保物联网设备(并不是一个简单的小灯,有可能是大型机械上的控制设备)的安全可靠性;四是拥有相同的“属性”,比如虚拟设备有“开关”属性,这个真实设备也必须有对应的“开关”响应程序;五是具有和虚拟设备相同的“身份证”----也就是三元组或者四元组数据。
实现以上这5点,可以通过很多种硬件来实现。本文以超级方便的HaaS100物联网开发板为基础,采用“轻应用”方式来开发。
轻应用是阿里云物联网团队开发的一种物联网开发技术,可以用JavaScript来开发。
轻应用源代码由两个文件组成,app.js和app.json。js文件是业务逻辑入口,可以理解为源代码;json文件是全局配置,可以理解为硬件资源配置,采用的是流行的json格式。
本文轻应用的js文件源代码如下:
/* iot - 阿里云IoT连接平台连接组件示例,产品功能定义:
* [功能类型] ------ [功能名称] ------ [标志符] ------ [数据类型]
* 属性 主灯开关 LightSwitch bool (0-关闭 1-开启)
* 服务 开关翻转 ToggleLightSwitch -
* 事件 故障上报 Error 参数标志符:ErrorCode
* */
var iot = require('iot');
var network = require('network');
var gpio = require('gpio');
var net = network.openNetWorkClient();
var productKey = 'a19x7NT4nEn';
var deviceName = 'haas-ltv1';
var deviceSecret = 'e22735c2d28da99c1c9b85**********';
var lightSwitch = 0;
var led1 = gpio.open({
id: 'LED3',
success: function() {
console.log('gpio: open led success')
},
fail: function() {
console.log('gpio: open led failed')
}
});
var device;
function createDevice() {
device = iot.device({
productKey: productKey,
deviceName: deviceName,
deviceSecret: deviceSecret,
region: 'cn-shanghai',
success: function () {
console.log('connect success');
onConnect();
},
fail: function () {
console.log('connect failed');
}
});
device.on('connect', function () {
console.log('(re)connected');
});
/* 网络断开事件 */
device.on('disconnect', function () {
console.log('disconnect ');
});
/* 关闭连接事件 */
device.on('close', function () {
console.log('iot client just closed');
});
/* 发生错误事件 */
device.on('error', function (err) {
console.log('error ' + err);
});
/* 云端设置属性事件 */
device.on('props', function (payload) {
console.log('cloud req data is ', payload);
console.log('LightSwitch ', payload.LightSwitch ? 'ON' : 'OFF');
/**/
if (payload.LightSwitch == 1) {
led1.writeValue(1);
device.postProps({
payload: {
LightSwitch: 1
}
})
}
if (payload.LightSwitch == 0) {
led1.writeValue(0);
device.postProps({
payload: {
LightSwitch: 0
}
})
}
});
/* 云端下发服务事件 */
device.on('service', function (id, payload) {
console.log('received cloud serviceid is ' + id);
console.log('received cloud req_data is ' + payload);
});
}
function onConnect() {
setInterval(function () {
/** post properties */
/*device.postProps({
payload: {
LightSwitch: 0
},
success: function () {
console.log('postProps success');
},
fail: function () {
console.log('postProps failed');
}
});*/
/** post events */
/*device.postEvent({
id: 'Error',
params: {
ErrorCode: 'error'
},
success: function () {
console.log('postEvent success');
},
fail: function () {
console.log('postEvent failed');
}
});*/
}, 3000);
}
var status = net.getStatus();
if (status == 'disconnect') {
net.on('connect', function () {
console.log('========wifi connected========');
createDevice();
});
} else {
createDevice();
}
net.connect({
ssid: 'xiao****',
password: 'li*****'
});
特别提醒,请采用合适的编辑软件进行编辑,并确保文件编码格式为UTF-8。选错了可能运行不成功的。。。
本文轻应用的json文件代码如下:
{
"version": "1.0.0",
"io": {"LED3": {
"type": "GPIO",
"port": 36,
"dir": "output",
"pull": "pulldown"
}},
"debugLevel": "ERROR"
}
源代码编辑之后,使用amp工具进行推送。
具体步骤请参考:阿里云HaaS100物联网开发板学习笔记(五)推送js代码的步骤--基于更新过的固件
下载好amp-win工具之后,可以通过vscode调用teminal来操作,比win7下的命令行操作更便捷。
3.使用IoT Studio设计控制移动端页面
一个没有手机端应用的物联网设备是不完整的。阿里云物联网平台提供了移动可视化操作功能,也就是IoT studio的“移动可视化”。
几个月前,这个功能还支持在线生成app安装包,后来这个功能改版了,当前的版本支持生成的是“页面版”的app,发布成功之后,可以通过第三方或者是自己用android studio编写一个app框架,让这个框架打开就是设计的页面就行了。
具体步骤可以参考
物联网控制APP入门专题(二)---阿里云iot studio移动可视化功能基本操作
下图为一个设计过程的截图,iot studio移动可视化开发以一种近乎零代码的方式提供了移动APP的设计。目前该功能处于公测状态,有些功能有限制。
这个页面如果发布的话,需要域名公网IP才能够正常访问。在iot studio中添加域名(要求已经备案成功,这个过程比较慢,可能需要20天左右),点击发布即可。
这种开发方式有个好处,只需要在iot studio里面对页面进行修改,点击发布,再访问这个页面就成了最新的页面。
4.使用android studio设计安卓APP
阿里云物联网iot studio移动可视化开发的呈现形式只是一个可以通过域名访问的页面,比如下图中,页面上有一个开关控件,点击这个控件,就能控制HaaS100设备,打开或者关闭开发板上的指定LED灯。通过手机浏览器访问这个页面,就可以实现对现实设备的控制,不过这种方式不太适合真正项目开发。
要想真正实现以APP方式控制物联网设备,可以将这个页面通过第三方平台打包成APK安装包,如果会android studio的话,也可以自己编写框架。
这种框架式的APP理论上安装之后就不用升级了---只需要更新页面,发布后,下次打开就自动呈现最新的页面。APP说到底就是一个固定地址的浏览器。
具体步骤可以参考下面两篇文章。
物联网控制APP入门专题(三)---使用第三方平台将网页打包成APP
物联网控制APP入门专题(四)---使用android studio制作一个控制页面的APP框架
5.测试
测试的目的是通过手机APP控制HaaS100开发板上LED3的亮起和熄灭。对应的属性是“LightSwitch”。
经过测试,可以通过手机APP打开和关闭LED3。
6.结论
阿里云HaaS100物联网开发板是一个很不错的板子,适合初学者,也适合专业开发者。板子做工也很好,有些wifi项目可以直接固定到目标外壳中使用,电源很稳定,能够长期工作。本文通过一个简单的案例,讲解了如何一步步做出可以通过手机APP控制的物联网智能灯。看似简单,其实还需要大家认真克服开发过程中每个可能遇到的困难才行。一旦掌握,将成为开发利器。
下面是一些基本操作的详细步骤介绍,适合入门,有基础的可以直接略过。
1.初学者入门阿里云Haas100开发板基本步骤
2.阿里云haas100开发板源代码适配python3.7版本的方法
3.阿里云HaaS100物联网开发板学习笔记(一)硬件资源介绍
4.阿里云HaaS100物联网开发板学习笔记(二)硬件控制初步--让小灯闪烁起来
5.阿里云HaaS100物联网开发板学习笔记(三)轻应用初步--用js让小灯闪烁起来
6.阿里云HaaS100物联网开发板学习笔记(四)轻应用初步--用javascript连接阿里云物联网平台
7.阿里云HaaS100物联网开发板学习笔记(五)推送js代码的步骤--基于更新过的固件
8.什么是阿里云amp工具?
9.如何在阿里云物联网平台新增一个设备
10.物联网控制APP入门专题(一)---做物联网APP的几个模式简介
11.物联网控制APP入门专题(二)---阿里云iot studio移动可视化功能基本操作
12.物联网控制APP入门专题(三)---使用第三方平台将网页打包成APP
13.物联网控制APP入门专题(四)---使用android studio制作一个控制页面的APP框架
15.物联网控制APP入门专题(五)---使用android studio直接编写物联网控制APP
欢迎抛转