写点什么

使用 LoRaWAN 将您的设备连接到 AWS IoT

  • 2019-09-25
  • 本文字数:3755 字

    阅读完需:约 12 分钟

使用 LoRaWAN 将您的设备连接到 AWS IoT

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

对于许多 IoT 使用案例而言,传感器只需要以较低的频率和比特率传输数据。这些传感器可以远距离通信,其电池续航时间可以长达数年,这意味着它们不需要经常更换。一些常见的使用案例包括智能城市(例如停车或废物传感器)和农业(例如土壤监测传感器)。LoRaWAN 网络非常适合这些使用案例,是收集传感器数据的理想方法。


本文将介绍 LoRaWAN 设备和网络的特点,以及客户如何将这些设备与 AWS 集成。我们将简要介绍 LoRaWAN 技术,并介绍如何构建直接与 AWS IoT Core 集成的演示套件。要构建此演示,您需要做好以下准备:


  • 带有 Espressif 芯片组的 LoPy4 开发板。您可以使用 AWS IoT Shadow 服务设置此开发板上的 LED 颜色,以此作为更改状态的示例。此开发板使用 MicroPython。

  • 一个 LoPy4 LoRa 天线套件。

  • 一个 Pysense 传感器 Shield 扩展板,提供样本遥测数据。

  • The Things Network (TTN) – 基于 LoRaWAN 网络的全球社区。他们提供的文档详细说明了如何配置 AWS IoT 与自己平台之间的集成。您需要设置一个 The Things Network 账户。

LoRaWAN 快速概览

LoRaWAN 是一种低功耗广域网 (LPWAN) 技术。其他 LPWAN 技术包括 Narrowband IoT 和 Sigfox。LPWAN 技术支持远距离通信、低功耗要求和低比特率。


LoRaWAN 是一种建立在 LoRa Alliance 开发的 LoRa 技术基础之上的协议规范。它使用低于 1GHz 的非授权工业、科学和医疗 (ISM) 频段。终端设备通过单跳的方式与 LoRaWAN 网关通信,这些网关为 LoRaWAN 网络服务器提供 TCP/IP 上行链路,LoRaWAN 网络服务器负责在设备与 LoRaWAN“应用程序”之间路由消息。终端设备可以连接到多个网关以实现冗余,网络服务器则负责管理重复数据包等。具体如下图所示:



所有通信在 LoRaWAN 网络中加密两次,一次是在终端设备与网络服务器之间使用网络会话密钥加密,另一次是使用应用程序会话密钥加密终端设备与应用程序之间的数据。这些密钥可以针对每次会话生成,也可在制造时生成。

您如何将 LoRaWAN 数据导入 AWS,以便构建出色的解决方案呢?

终端设备具有一个 LoRa 接口,该接口藉由 RF 直接与网关通信。因此,LoRaWAN 网络(而非 AWS IoT)负责管理对网络和标识的安全访问;也正因如此,LoRaWAN 设备不会安装 AWS IoT 开发工具包。为了使设备数据从 LoRaWAN 网络传输到 AWS IoT,网络服务器已与 AWS IoT 服务集成。许多 LoRaWAN 提供商如今都在将 AWS IoT 集成到自己的产品中。


AWS IoT LoRaWAN 集成必须执行多种功能(如下图所示):



  • 在 AWS IoT Device Management 服务与 LoRaWAN 网络服务器之间同步设备信息和属性。如果一方更改了某项属性,则此更改应传播到另一方。

  • 支持双向通信,让您可以提取传感器数据,还可以发回控制数据。LoRaWAN 支持多种通信类别的双向通信。

  • 能够抽象 AWS IoT Shadow 服务,以便您可以随时通过 LoRaWAN 网络从 AWS IoT 获取和设置事物的状态,并将其传输到启用 LoRa 的设备。

  • 能够将 LoRaWAN 数据(通常包含数个字节,以尽可能减少开销)转换为 AWS IoT 服务所需要的 JSON 文档。

  • 可靠、可扩展,量身定制。也就是说,请务必测试并验证 LoRaWAN 网络是否适合您的使用案例。

  • 所有这些组件都可以在单个客户 AWS 账户中运行,但更常见的情况是,网络服务器(有时还有 AWS IoT 集成层)在 LoRaWAN 网络提供商的 AWS 账户中运行,AWS IoT 和最终用户应用程序组件在客户的 AWS 账户中运行。

使用 The Things Network 演示 LoRaWAN AWS 集成

为了演示这一集成的工作原理,我使用 LoPy4 设备和 The Things Network (TTN) 构建了一个小型演示项目。Pycom 提供了有关设置和管理 LoPy4 设备的各类文档。我使用带有 Atom 的 Pymakr 插件设置并运行此演示(您也可以使用 VS 代码)。


配置此演示的简要步骤如下:


1.按照 Pycom 文档中的硬件设置相关说明设置好 LoPy4、天线和 Pysense,然后更新固件并配置开发板的开发环境。


2.在 TTN 控制台中配置 LoRaWAN 应用程序和设备。


3.在 TTN 控制台中创建 JavaScript 代码,将字节解码为 JSON 形式,再将 JSON 重新编码为字节形式,以及表示温度数据和影子变化的 JSON 形式。



所用的解码器和编码器函数如下所示:


function Decoder(bytes, port) {  // Decode an uplink message from a buffer  // (array) of bytes to an object of fields.  var decoded = {};  var colors = ["off", "red", "green", "blue"];  var color = colors[bytes[2]];  var temperature = (bytes[0] * 256 + bytes [1])/100;
return { temperature: temperature, state: { color: color } }}
function Encoder(object, port) { var colors = ["off", "red", "green", "blue"]; var bytes = []; if (object.state && object.state.color) { bytes.push(colors.indexOf(object.state.color)); } return bytes;}
复制代码


4.在 AWS 账户中安装并测试 TTN AWS IoT 集成。这是以 CloudFormation 脚本的形式提供的,该脚本会安装执行集成的 Elastic Beanstalk (EB) 应用程序。此 EB 应用程序默认在 t2.micro EC2 实例上运行,使用 TTN 生成的应用程序访问密钥,通过 TTN 网络服务器和应用程序完成自身的身份验证。默认情况下,每隔 10 分钟(此间隔时间可配置)会将 TTN 应用程序详细信息与 AWS IoT Device Management 服务同步。


5.在 LoPy 设备上安装、配置并测试 Micropython 代码。您必须在 The Things Network 的范围内。根据您的地理位置配置正确的 LoRaWAN 区域(在澳大利亚,支持的频段话包括 AU915 和 AS923)以及 LoRaWAN 应用程序的相应凭证。


import binasciiimport pycomimport socketimport timefrom network import LoRafrom pysense import Pysensefrom MPL3115A2 import MPL3115A2

# Colorsoff = 0x000000red = 0xff0000green = 0x00ff00blue = 0x0000ffcolors = [off, red, green, blue]
# Turn off heartbeat LEDpycom.heartbeat(False)
# Initialize LoRaWAN radiolora = LoRa(mode=LoRa.LORAWAN, region=LoRa.AU915, adr=False, tx_retries=0, device_class=LoRa.CLASS_A)
# Set network keysapp_eui = binascii.unhexlify('xxxxxxxxxxxxxxxx')app_key = binascii.unhexlify('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
# remove some channels (in Australia)for i in range(16, 65): lora.remove_channel(i)for i in range(66, 72): lora.remove_channel(i)
# Join the networklora.join(activation=LoRa.OTAA, auth=(app_eui, app_key), timeout=0)pycom.rgbled(red)
# init the librariespy = Pysense()temp = MPL3115A2()
# Loop until joinedwhile not lora.has_joined(): print('Not joined yet...') pycom.rgbled(off) time.sleep(0.1) pycom.rgbled(red) time.sleep(2)
print('Joined')pycom.rgbled(blue)
s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)s.setsockopt(socket.SOL_LORA, socket.SO_DR, 5)s.setblocking(False)colorindex = 3
while True: # Read data from the libraries and place into string data = temp.temperature() print("Sending %.5s" % data) data = int (data * 100); # send the data over LPWAN network s.send(bytes([int(data / 256), data % 256, colorindex ])) s.settimeout(3.0) # configure a timeout value of 3 seconds try: rx_pkt = s.recv(64) # get the packet received (if any) print(rx_pkt) colorindex = int.from_bytes(rx_pkt, "big") except socket.timeout: print('No packet received')
pycom.rgbled(green) time.sleep(0.1) pycom.rgbled(colors[colorindex]) time.sleep(29.9)
复制代码


6.代码运行无限循环,将来自 Pysense 的温度读数和 LED 颜色转换为字节形式,并将这些字节发送到 TTN 应用程序,然后 TTN 应用程序将数据转发给 AWS IoT。每次发送数据包时,系统都会检查是否存在基于影子状态更改的返回数据包(LoRaWAN 有三个类用于支持定向通信),如果有,则接收该数据包并将 LED 颜色更改为所需的新状态。


测试 TTN AWS IoT 集成


可以通过多种方法测试集成。


1.确认 LoPy 设备同时出现在 AWS IoT 和 TTN 控制台中。




2.确认您的 LoPy4 设备将被激活,并将在 TTN 控制台中发送上行链路消息。



3.确认上行链路消息正在从字节转换为 JSON 形式,并且能够通过 MQTT Test 客户端发送到 AWS IoT Core 服务


4.创建 AWS IoT 操作并将数据发送到 DynamoDB。


5.在控制台中更新 AWS IoT 设备影子状态,观察 TTN 控制台中的下行链路消息,请注意,如果一切顺利,设备上的 LED 颜色会发生变化!



6.如果需要进行故障排除,还可以通过 TTN 控制台模拟上行链路和下行链路消息。

小结

LoRaWAN 技术为客户提供了一种构建 IoT 网络的绝佳方式,这些网络能够为较大的地理区域提供低比特率、低能耗以及较长的设备使用寿命支持。现在,通过 AWS IoT 集成,客户可以运用云技术的强大功能处理其 IoT 数据,充分利用这两项服务! 如果您想了解有关 AWS 和我们的 IoT 网络合作伙伴的更多信息,请单击以下链接:


  • AWS IoT 合作伙伴解决方案 – 连接技术

  • 通过 The Things Network 实现 LoRaWAN 与 IoT 大众化


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/connect-your-devices-to-aws-iot-using-lorawan/


公众号推荐:

AIGC 技术正以惊人的速度重塑着创新的边界,InfoQ 首期《大模型领航者AIGC实践案例集锦》电子书,深度对话 30 位国内顶尖大模型专家,洞悉大模型技术前沿与未来趋势,精选 10 余个行业一线实践案例,全面展示大模型在多个垂直行业的应用成果,同时,揭秘全球热门大模型效果,为创业者、开发者提供决策支持和选型参考。关注「AI前线」,回复「领航者」免费获取电子书。

2019-09-25 15:44788
用户头像

发布了 1832 篇内容, 共 99.4 次阅读, 收获喜欢 76 次。

关注

评论

发布
暂无评论
发现更多内容

Greenplum内核源码分析-分布式事务(三)

王凤刚(ginobiliwang)

源码分析 分布式事务 greenplum

HTTPDNS 快速入门

37手游iOS技术运营团队

DNS httpdns

iOS 编译器__Attribute__的入门指南

37手游iOS技术运营团队

xcode LLVM Clang编译 Clang Attribute

SpringMVC框架基础知识(01)

海拥(haiyong.site)

28天写作 12月日更

Greenplum内核源码分析-分布式事务(二)

王凤刚(ginobiliwang)

源码分析 分布式事务 greenplum

云堡垒机和普通堡垒机的三大区别分析-行云管家

行云管家

云计算 网络安全 数据安全 堡垒机 云堡垒机

2022年购买服务器运维管理软件选择哪家好?

行云管家

IT运维 服务器运维

全国首个!OceanBase 助力江西省养老保险全国统筹信息系统上线

OceanBase 数据库

OceanBase 开源 OceanBase 社区版 核心系统

Veritas:2022年数据安全及合规领域行业预测

WorkPlus

Greenplum内核源码分析-分布式事务(一)

王凤刚(ginobiliwang)

源码分析 分布式事务 greenplum

一个cpp协程库的前世今生(二)协程切换的原理

SkyFire

c++ 协程 cocpp

Xcode 配置多套 App 图标的方法 --- AppStore 图标 A/B Test 实践

37手游iOS技术运营团队

ios xcode appstore 产品页优化 自定产品页

重塑企业创新方式 Serverless让云“开箱即用”

WorkPlus

OpenMLDB 12月会议纪要

第四范式开发者社区

人工智能 机器学习 第四范式 OpenMLDB

MongoDB按需物化视图介绍

MongoDB中文社区

mongodb

旺链科技团建图鉴 | 认真工作,肆意生活~

旺链科技

区块链 企业文化 团建

DTC 2021 | 一体化架构的原生分布式数据库正在成为核心系统首选

OceanBase 数据库

数据库 OceanBase 开源 OceanBase 社区版

2021MongoDB技术实践与应用案例征集活动获奖通知

MongoDB中文社区

☕【难点攻克技术系列】「海量数据计算系列」如何使用BitMap在海量数据中对相应的进行去重、查找和排序

洛神灬殇

BitMap bitmaps bitset 12月日更

【签约计划第二季】百位签约创作者名单公布

InfoQ写作社区官方

签约计划第二季 热门活动

《国产分布式数据库选型及满意度调查报告》出炉,OceanBase获得双料第一

OceanBase 数据库

分布式数据库 OceanBase 开源 OceanBase 社区版

大数据开发之Hive如何提高查询效率

@零度

大数据 hive

OceanBase 通过工信部电子标准院首批开源项目成熟度评估

OceanBase 数据库

数据库 工信部 OceanBase 开源

链计算、新基建:区块链助力数字经济新生态

CECBC

谁编写了区块链的规则?

CECBC

回顾2021,展望2022 | TDengine一年“成绩”汇总

TDengine

数据库 tdengine 2021年终总结

盘点 2021|一个新的开始

IT蜗壳-Tango

28天写作 12月日更 盘点2021 盘点 2021

区块链赋能生猪养殖,让“猪”事有迹可循

CECBC

MongoDB基本介绍与安装(1)

Tom弹架构

Java mongodb

COSCL开源评选名单公布!OceanBase 社区版荣获2021优秀开源项目奖

OceanBase 数据库

OceanBase 开源 OceanBase 社区版

取代Maven?maven-mvnd持续霸榜 GitHub Trending,性能提升300%

沉默王二

maven

使用 LoRaWAN 将您的设备连接到 AWS IoT_文化 & 方法_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章