阿里云HaaS100物联网开发板学习笔记(六)做个智能灯---一个完整的开发例子

摘要:本篇文章将前期几个专题综合起来,基于阿里云HaaS100的新固件设计制作一个智能灯。这个智能灯由云平台、手机APP端和设备端组成,基本上涵盖了一个物联网小项目所需的主要步骤。

目录

1.在阿里云物联网平台注册设备

2.编写HaaS100轻应用并烧录

3.使用IoT Studio设计控制移动端页面

4.使用android studio设计安卓APP

5.测试

6.结论

 

参考文章:

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


硬件平台: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

欢迎抛转

猜你喜欢

转载自blog.csdn.net/youngwah292/article/details/112194632