返回 登录
0

使用 AWS 云平台构建物联网应用

阅读18308

摘要:本文介绍了如何使用亚马逊的AWS IoT来开发物联网应用。

当我们没有足够的能力或者时间去开发一些物联网云平台的时候,使用一些现有的成熟的云平台是一个很好的选择。通常来说,这些平台可以为我们带来更快的开发速度和更简单的解决方案,并且可以让我们集中于实现上的业务逻辑。我们只需连接上我们的设备、上传我们的数据,就可以在地球的另一端观察这些数据的变化。

在这些物联网平台中,做得比较不错的有:

  • IBM的Bluemix Internet of Things
  • Microsoft的Azure IoT Suite
  • Amazon的AWS IoT

由于亚马逊的云服务比较领先,所以这里我们以亚马逊的AWS IoT作为示例。

AWS IoT 是亚马逊推出的一款托管的云平台,它可以使互联设备轻松安全地与云应用程序及其他设备交互。它可以支持数十亿台设备和数万亿条消息,并且我们可以对这些消息进行处理,同时将其安全可靠地路由至 AWS 终端节点和其他设备。我们还可以结合AWS的其他服务,如AWS Lambda、Amazon Kinesis、Amazon S3、Amazon Machine Learning 和 Amazon DynamoDB,来构建 IoT 应用程序,以方便我们收集、处理和分析互联设备生成的数据。

亚马逊的物联网解决方案和我们之前写的服务端代码一样,如图1所示。我们将在服务端接收设备传过来的数据并存储到服务器上,然后,通过手机等就可以直接访问这个API,并可以对设备进行控制—这里采用的是MQTT协议。


图1 AWS IoT

现在让我们登录AWS后台,可以看到如图2所示的内容。在本书写作的时候,AWS IoT处于测试版。但是相信在读者看到这本书的时候,已经可以使用了。


图2 AWS IoT控制台

现在,让我们创建一个Thing。这个步骤很简单,如图3所示,我们只需填写Name就可以创建。在AWS IoT中,Thing代表了设备的一个影子,即Device Shadow。而Rule则可以对数据进行过滤——我们可以创建一些规则,如当温度大于某个值时我们才将其发布到AWS IoT上。


图3 AWS IoT 创建Thing

这时,我们创建了一个名为Led的设备,如图4所示。上面会显示这个设备的REST API地址,及其MQTT Topic——我们只需订阅这个主题就可以使用这个设备了。然后单击下面的“Connect a device”按钮就会进入如图5所示的密钥配置页,确认并下载相应的文件就可以使用了。


图4 创建了一个名为Led的设备



图5 密钥配置页

现在,我们可以编写代码来测试我们的设备是否能正常使用了。这里我们需要使用到AWS IoT的SDK,这个SDK实际上只是对mqtt进行一些封装,安装这个SDK的过程很简单:

npm install aws-iot-device-sdk

我们需要配置相应的keyPath、certPath和caPath。这里的caPath需要到网上下载(网址:https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign- Class%203- Public-Primary-Certification-Authority-G5.pem,这个网址包含在代码里)。需要注意的是,这里的clientId实际上也是我们要控制的Thing的名字:

var awsIot = require('aws-iot-device-sdk');

var thingName = 'Led';
var thingShadows = awsIot.thingShadow({
    keyPath: 'certs/fa635d3140-private.pem.key',
    certPath: 'certs/fa635d3140-certificate.pem.crt',
    caPath: 'certs/root-CA.crt',
    clientId: thingName,
    region: 'us-west-2'
});

thingShadows.on('connect', function () {
    console.log("Connected...");
    thingShadows.register(thingName);

    setTimeout(function () {
        console.log("Updating Led Status...");
        var led = thingShadows.update(thingName, {
            "state": {
                "reported": {
                    "led": true
                }
            }
        });
        console.log("Update:" + led);
    }, 2500);


    thingShadows.on('status',
        function (thingName, stat, clientToken, stateObject) {
            console.log('received ' + stat + ' on ' + thingName + ': ' +
                JSON.stringify(stateObject));
        });
});

接着运行这个脚本会接收到下面的结果,同时我们可以观察到网页上的Shadow值也发生了相应的变化。

Connected...
Updating Led Status...
Update:Led-0
received accepted on Led: {"state":{"reported":{"led":true}},"metadata": {"reported":{"led":{"timestamp":1449151056}}},"timestamp":1449151056}

下面的Python代码讲述了更多的细节——使用SSL/TLS来连接MQTT服务器:

mqttc.tls_set("./certs/root-CA.crt",
              certfile="./certs/fa635d3140-certificate.pem.crt",
              keyfile="./certs/fa635d3140-private.pem.key",
              tls_version=ssl.PROTOCOL_TLSv1_2,
              ciphers=None)

mqttc.connect("a1dul237m8y7r3.iot.us-west-2.amazonaws.com", port=8883)  # AWS IoT service hostname and portno

现在接上传感器,我们就可以上传数据了。

相关阅读

本文经授权节选自图书《自己动手设计物联网》第六章,作者黄峰达。
本书内容包括设计一个基于文本文件的物联网系统、实现以互联网为基础的物联网系统,即以HTTP协议与Web编程为基础的物联网系统、最后打造一个能结合多个物联网协议的物联网系统。读者将学会如何打造物联网的相关应用——手机App、温度趋势、网页端控制等,以及如何打造智能、安全的物联网系统的相关内容。

评论