提到物联网(IoT),云服务发挥着重要的作用,开发者可以利用它在边缘设备和远程数字服务之间分配计算任务。这种架构为众多解决方案开辟了新的可能性,借助高效协议,设备和云服务可以在现有高速通信信道上协同工作。当然,我们还需要可靠的物理层到应用层的双向通信[1]。
本文将简要回顾一般的传输和应用层协议以帮助促进物联网交流,然后探讨如何使用基于Qualcomm®技术的物联网设备与Microsoft Azure和AWS IoT进行通信。
物联网连接协议
无论边缘到云端的物联网通信多么复杂,最终都归结为设备和远程服务之间通过互联网进行双向的数据通信。
从传输层开始,设备到云端的通信往往是通过TCP(传输控制协议)或UDP(用户数据报协议)信道进行的。TCP是可靠的、面向连接的流协议,发送的每个数据包都需要确认被接收。但是高可靠性也带来高开销,有时,对于IoT应用程序而言,一个TCP标头就要比有效负载本身还要大。而UDP是不可靠的无连接协议,可以牺牲部分数据包换取速度。TCP用于数据必须得到传输的场合,而UDP用于可接受部分数据丢失的情形(比如,传输视频)。
在应用层,HTTP(超文本传输协议)已经成为Web通信最标准化的协议之一。这个协议是在客户端-服务器时代开发的请求-响应模型,客户端(如浏览器)打开TCP连接,向服务器(如Web服务器)发送请求,再由服务器返回响应。基于TCP的HTTP通信往往使用TLS进行保护,而基于UDP的通信则使用DTLS。物联网设备可以利用这种设置,使用RESTful/SOAPWeb服务与Web服务器进行通信。比如,设备可以使用HTTPGET/POST方法,通过TCP/IP连接与服务器通信,并传递以XML、JSON或其他格式的有效负载。每一个步骤(TCP/IP、HTTP、XML/JSON)都要增加有效负载的开销,而有效负载才是最终应用程序寻找的唯一相关信息。因此,另一种应用层协议MQTT(消息队列遥测传输)应运而生,成为物联网的主流协议。MQTT是一种轻量级协议,代码量小,适用于嵌入式物联网设备等受限场景。尤其适合发布-订阅模式,这种模式通过中央MQTT“代理”促进设备间的一对多通信,这种模式正是我们通常需要的物联网通信类型!
了解了这些底层协议之后,下面我们再来探讨边缘到云端通信的工作原理。这里我们使用基于Qualcomm® MDM9206 LTE调制解调器的设备和基于Qualcomm® 骁龙™移动平台的设备来实现边缘到云端的通信。
将配备Qualcomm MDM9206 LTE调制解调器的物联网设备连接到Azure
Qualcomm MDM9206可以运行Linux和ThreadX操作系统,是一种相当专业的设备,通常与其他处理器一起用作调制解调器。
为促进通信,QTI提供了Qualcomm® LTE for IoT SDK,支持多种协议,包括TLS、DTLS、MQTT和HTTP。此外,LTE for IoT SDK还提供中介层(shim-layer),使用azure-iot-sdk-c包,连接Azure IoT中心
中介层包括Azure输入/输出(I/O)和平台中介层库,是用户空间Qualcomm® ThreadX平台上Azure应用程序开发包的一部分。Azure应用程序使用Microsoft Azure SDK定义的API与Azure IoT SDK C模块进行交互,而Azure IoT SDK C模块使用适配器层与Qualcomm ThreadX IoT堆栈进行交互。下图显示了ThreadX IoT设备上的Azure应用程序架构:
此中介层还包含很多脚本,可自动设置构建环境,为设备构建应用程序。
目前可通过QualcommCreatePoint页面获取SDK,先在该页面创建帐户,帐户获得批准后,在网站下载部分搜索Qualcomm MDM920x Thread X Cellular IoT SDK,然后下载软件包。请注意,在使用SDK之前,还需要下载azure-iot-sdk-c包。
有关其他信息,请查看关于物联网要求的博客文章,以及微软的演示视频。
将配备Qualcomm MDM9206 LTE调制解调器的物联网设备连接到AWS IoT
此SDK还可用于使用MQTT消息与AWS IoT进行通信。相关操作可查看物联网商品推车演示以及GitHub上的merchant-cart-aws-iot项目。
将设备连接到AWS IoT的关键步骤如下:
• 创建EC2实例并启用正确的端口;
• 将应用程序添加到EC2实例;
• 从AWS IoT获取应用程序的证书和私钥;
• 构建设备端应用程序并将其与证书和私钥以及任何其他支持文件一并传输到设备;
• 使用设备设置传感器映射,跟踪产品库存水平;
• 启动浏览器并导航到AWS IoT应用程序;和
• 在设备端运行应用程序。
如果您有兴趣了解更多信息,请查看项目的示例应用模块,了解如何通过MQTT将库存水平发布到EC2。您也可以查看aws_iot_mqtt*.c文件,了解MQTT通信的工作原理,该文件位于:https://github.com/globaledgesoft/merchant-cart-aws-iot/tree/master/sub_pub/src。
将在骁龙平台运行的基于Linux的IoT设备连接到AWS IoT
骁龙平台运行功能更加齐全的Linux系统,为物联网解决方案提供了广泛的功能。另外,开发者还可以集成更高级别的SDK和使用各种编程语言编写的库。
我们可以使用其中一种AWS IoT SDK(比如AWS IoT Device SDK for Python),利用MQTT在骁龙设备和AWS IoT之间进行通信。相应的实施可参考我们的项目:AWS IoT四个步骤,这个项目就使用了AWS IoT SDK for Python,连接DragonBoard™ 410c(艾睿电子推出的硬件开发套件)使用。
连接到AWS IoT涉及的关键步骤如下:
• 在AWS中创建项目;
• 创造一个“设备”
• 将“设备”连接到设备端
• 选择一种编程语言
• 生成证书和策略并将其添加到项目
• 在客户端/设备上安装AWS IoT所需的SDK;
• 使用以下实现创建设备端应用程序:
• 将AWS模块添加到客户端代码中。
• 在传递私钥和证书的代码中实例化客户端。
• 开始连接。
• 订阅主题并指定回调以接收信息。
• 根据应用需要发布消息。
结论
使用标准OSI模型协议工作的设备到云端的通信为云服务打下了基础。可通过专用设备,利用合适的的设级SDK,如Qualcomm LTE for IoT SDK,实现物联网设备到云端的连接,比如Qualcomm MDM9206 LTE调制解调器。相应操作系统,如骁龙平台和Linux,可为设备提供更广泛的功能,因此,可以包含云服务提供商提供的高级解决方案(如SDK)。
一般来说,这种设备到云的架构为物联网设备和/或云端处理提供了丰富的选项。现在您已经了解了如何让物联网设备与云通信,那么您对下一个物联网解决方案有何打算呢?
参考
1. 要回顾七个通信层信息,请查看:https://en.wikipedia.org/wiki/OSI_model。
更多Qualcomm开发内容请详见:Qualcomm开发社区 。
