欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-30 08:38:26
...

摘要:本文介绍了如何使用亚马逊的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协议。

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

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

使用 AWS 云平台构建物联网应用
图2 AWS IoT控制台

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

使用 AWS 云平台构建物联网应用
图3 AWS IoT 创建Thing

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

使用 AWS 云平台构建物联网应用
图4 创建了一个名为Led的设备


使用 AWS 云平台构建物联网应用
图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、温度趋势、网页端控制等,以及如何打造智能、安全的物联网系统的相关内容。

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

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