使用全球蜂窝无线电模块将物联网设备快速安全地连接到云端

作者:Jens Wallmann

投稿人:DigiKey 欧洲编辑

如需将便携式或远程网络终端设备连接到物联网 (IoT),或使用机对机通信 (M2M) 远程控制机器,通过云端进行数据交换的移动无线电连接是一个不错的选择。然而,这一方案却给开发人员带来了一些难题,例如要确定哪些无线网络可以支持全球所需的数据吞吐率,以及无线调制解调器必须能够处理哪些协议。此外,还必须考虑系统可扩展性、数据安全性、成本、上市时间以及用户的购置和运营成本。

本文简要介绍了 LTE Cat 1 可为物联网和 M2M 应用开发人员提供哪些功能。随后介绍了 u-bloxLARA-R6 系列无线电模块,这些模块具有通用连接性和可靠的性能。最后,本文还展示了开发人员如何使用评估板 (EVB) 通过 AT 命令轻松配置和控制模块,以及如何通过库函数生成 AT 命令字符串。

LTE Cat 1 与 LTE Cat 1bis、LTE Cat M 和 LTE Cat NB 的比较

虽然 LTE 蜂窝无线电现已实现千兆位传输速率,但是像 LTE Cat 1、LTE Cat 1bis、LTE Cat M 和 LTE Cat NB 这样的低功耗、广域 (LPWA) 协议经过设计,在能耗、网络资源和成本方面都特别高效。这对于物联网设备至关重要。

LTE Cat 1 可在全双工模式下提供高达 20 MHz 的信道带宽,下载数据速率可达 10 Mbps,上传数据速率可达 5 Mbps。使用两根天线支持接收 (Rx) 分集,性能更佳(表 1)。而 LTE Cat 1bis 仅使用一根天线。

LTE Cat1/Cat 1bis LTE Cat M1 LTE Cat NB1
3GPP 版本 版本 8 版本 13 版本 13
下行链路峰值速率 10 Mpbs 1 Mbps 26 kbps
上行链路峰值速率 5 Mbps 1 Mbps 66 kbps(多音调)
16.9 kbps(单音调)
延时 50 ms 到 100 ms 10 ms 到 15 ms 1.6 s 到 10 s
天线数量 2 (LTE Cat 1)
1 (LTE Cat 1bis)
1 1
双工模式 全双工 全双工或半双工 半双工
设备接收带宽 1.4 MHz 到 20 MHz 1.4 180 kHz

表 1:LPWA 协议的性能比较。LTE CAT 1 使用两根天线支持接收分集;而 LTE Cat 1bis 仅使用一根天线。(图片来源:维基百科,Jens Wallmann)

LTE Cat 1 移动无线电的全球可用性

u-blox 的 LARA-R6 系列由坚固耐用的蜂窝无线电模块组成,专为无线电接入技术 (RAT) LTE Cat 1 频分双工 (FDD) 和时分双工 (TDD) 标准而设计。该系列支持 3G UMTS/HSPA 和 2G GSM/GPRS/EGPRS,作为后备解决方案。这些模块是实现全球/多地区覆盖的出色解决方案,采用 26 x 24 mm 的小型 LGA 封装。

LARA-R6 模块配备多功能接口、各种不同的特性以及多频段和多模功能,适用于需要中速数据传输、无缝连接、出色的覆盖能力和低延时的应用。这些应用包括资产跟踪、远程信息处理、远程监控、警报中心、视频监视、互联健康和收银机终端。

所有模块均支持接收分集,可在覆盖条件差或需要基于 LTE 的语音传输 (VoLTE) 时提供可靠的性能。程序员可以利用嵌入式物联网协议(LwM2M、MQTT)和安全特性(TLS/DTLS、安全更新/安全启动)来实施各种功能,包括设备管理、远程设备控制以及安全的空中固件下载 (FOTA) 更新。

LARA-R6 系列支持符合 3GPP 版本 10 标准的 LTE Cat 1,并通过三个地区版本实现全球覆盖:

  • LARA-R6001-00B(数据和语音)和 LARA-R6001D-00B(仅数据)模块支持 18 个 LTE FDD/TDD 频带以及 3G/2G 回退功能,可实现全球连接。
  • LARA-R6401-00B(数据和语音)和 LARA-R6401D-00B(仅数据)模块为北美地区提供理想的 LTE Cat 1 解决方案,支持 AT&T、FirstNet、Verizon 和 T-Mobile 的 LTE 频带。
  • LARA-R6801-00B(数据和语音)和 LARA-R6801D-01B(仅数据)模块专为以下地区的部署而设计:欧洲和中东 (EMEA)、亚太地区 (APAC)、日本 (JP) 和拉丁美洲 (LATAM)(图 1)。

LARA-R6 模块的地区版本地图图 1:LARA-R6 模块有三个地区版本,可覆盖全球。(图片来源:DigiKey,由作者修改)

LARA-R6 特殊功能一览

LARA-R6 模块集成了带有外部接口的蜂窝基带处理器、带有放大器和滤波器的射频收发器、存储器和电源管理单元(图 2)。

u-blox 的 LARA-R6 模块内部结构图(点击放大)图 2:LARA-R6 模块的内部结构。(图片来源:u-blox)

射频收发器的工作频带为 700 MHz、800 MHz、850 MHz、900 MHz、1.7 GHz、1.8 GHz、1.9 GHz、2.1 GHz 和 2.6 GHz。蜂窝基带处理器的所有数据传输协议均可使用外部 UART 和 USB 接口通过 AT 命令进行控制和配置。

协议

  • 双堆栈 IPv4 和 IPv6
  • 嵌入式 TCP/IP、UDP/IP、FTP 和 HTTP
  • 嵌入式 MQTT 和 MQTT-SN
  • 嵌入式 LwM2M
  • eSIM 和独立承载协议 (BIP)

LARA-R6 模块需要 3.1 到 4.5 V 的供电电压,待机电流消耗约为 1.1 mA。在 2G 运行中,单个 TDMA 时隙的峰值传输功率可超过 33 dBm(> 2.0 瓦,分贝数基准为 1 mW),而所有其他 RAT 的峰值传输功率均超过 24 dBm(> 0.25 瓦)。

小于 -100 dBm 的出色天线灵敏度,对应于小于 0.1 pW 的信号功率,可在移动网络边缘实现稳定的无线电连接。

评估和编程

开始 LARA-R6 模块评估和编程的最快方法是使用 R6 EVB (EVK-R6) 和相应地区的插入式 LARA-R6 适配器板 (ADP-R6)。例如,适用于全球应用的 EVK-R6001-00B 包括插入式适配器板 ADP-R6001-00B(语音 + 数据)和 GNSS 适配器板(图 3)。

u-blox 安装了 LARA-R6 适配器板的 LARA-R6 EVB (EVK-R6) 图片(点击放大)图 3:安装了 LARA-R6 适配器板(下方)和 GNSS 板(左上)的 LARA-R6 EVB (EVK-R6)。(图片来源:u-blox)

适用于北美地区的 EVK-R6401-00B 版本包括 ADP-R6401-00B 适配器,而适用于 EMEA/APAC/JP/LATAM 地区的 EVK-R6801-00B 则包括 ADP-R6801-00B 适配器。前文提到的适用于语音和数据传输的三个适配器板也可单独提供,还有仅适用于数据传输的版本,包括 ADP-R6401D-00B(北美)和 ADP-R6001D-00B(全球)。

R6 适配器板通过两根天线和两个 MiniUSB 连接器扩展 LARA-R6 模块。R6 EVB 则增加了一个 GNSS 模块、一个 SIM 卡插槽、额外的插入式连接器、跳线、开关和模块外设的电源(图 4)。

u-blox 插入了 GNSS 和 LARA-R6 适配器的 R6 EVB 功能框图(点击放大)图 4:插入了 GNSS 和 LARA-R6 适配器的 R6 EVB 功能框图。(图片来源:u-blox)

每个套件包含一个 u-blox 的 EVB(安装了 LTE Cat 1 LARA-R6 适配器板和 GNSS 模块)、一根 USB 电缆、两根 LTE 移动无线电天线、一根 GPS/GLONASS 天线和一个电源单元。

调试 EVK

u-blox 推出的 EVK-R6 套件易于使用、功能强大,可简化多模 LTE Cat 1/3G/2G 蜂窝模块的评估工作。安装了 LARA-R6 USB 驱动程序的 Windows PC 可通过 USB 连接器控制 LARA-R6 调制解调器,并通过系统设置简化连接设置。首先,开发人员需要:

  1. 插入 SIM 卡并连接蜂窝天线和 GNSS 天线。
  2. 仔细配置 EVK 的跳线和开关。
  3. 施加供电电压并打开 EVB 上的主开关 SW400。
    1. 如需通过“主 UART”接口作为低数据速率调制解调器运行,可将 PC 连接到 EVK 上的 MiniUSB 插孔 J501 或 RS232 插孔 J500。
    2. 如需通过“两个 UART”作为低数据速率调制解调器运行,可将 PC 连接到 ADP 上的蜂窝 USB 插孔 J201 接口。
    3. 如需通过“本机蜂窝 USB”作为高数据速率调制解调器运行,可将 PC 连接到 ADP 上的 MiniUSB 插孔 J105。
  4. 按下 EVB 上的蜂窝模块开机按钮 SW302。
  5. 运行终端应用软件(例如 m-center),进入 COM 端口设置菜单,选择与 4a、4b 或 4c 相对应的 AT 端口,然后设置以下值:数据速率:115,200 bps;数据位:8;奇偶校验:N;停止位:1。

如需了解更多详情,请参阅 EVK-R6_UserGuide_UBX-21035387。m-center 工具可帮助评估、配置和测试 u-blox 蜂窝产品,其中包括一个 AT 命令终端。

使用 Windows PC 进行简单的互联网连接

将 Windows PC 连接到 EVK 后,用户即可通过两种方式建立无线互联网连接:

1:低速分组数据连接:该方式通过 LARA-R6 模块的 UART 接口,使用 Windows PC 的 TCP/IP 协议栈。按照方法 4a 连接 PC 和 EVK。开发人员必须使用 Windows 控制面板选择“电话和调制解调器”>“调制解调器”>“添加”。下一步是勾选“不要检测我的调制解调器”复选框,选择“标准 33.6 kbps 调制解调器”,并分配一个 COM 端口。如有必要,开发人员可以添加“属性”>“高级”>“额外的初始化命令”。

2:高速分组数据连接:该方式通过 LARA-R6 模块的本机蜂窝 USB 接口,使用 Windows PC 的 TCP/IP 协议栈访问互联网。按照方法 4c 连接 PC 和 EVK。开发人员必须通过 Windows 控制面板选择“网络和共享中心”>“设置新的连接或网络”,然后点击“连接到 Internet”。下一步是选择“拨号”和其中一个 AT USB 端口。最后一步是输入拨号参数(拨号号码、提供商名称、用户 ID 和密码)。

向移动运营商注册 SIM 卡

SIM 卡和 MNO 参数配置完成后,蜂窝模块会在开机后自动在蜂窝网络上进行注册。如果出现问题,可使用表 2 所示的 AT 命令手动检查注册情况。

由 DTE(用户)发送的命令 DCE 响应(模块) 说明
AT+CREG? +CREG: 0,1 OK 验证网络注册情况。
AT+COPS=0 OK 仅当自动注册失败时才会在网络上注册模块(AT+CREG?返回 0.0)。
AT+COPS? +COPS: 0,0,"I TIM",7 OK 读取运营商名称和无线电接入技术 (RAT)。

表 2:AT 注册命令。(表格来源:u-blox,由作者修改)

通过 AT 命令与远程 HTTP 服务器通信

GitHub 存储库“Firechip_u-blox_LARA-R6_Arduino_Library”包含一个广泛的 LARA-R6 模块 AT 命令库,使用 C++ 编写,适用于 Arduino 控制器。16 个应用示例(包括 ping 测试、注册、分组交换、SMS、GNSS 和物联网云)可为自定义代码结构提供建议。

AT 命令还可以在主动连接期间向远程 HTTP 服务器发送请求,接收服务器响应,并将该响应透明地存储在本地文件系统中。受支持的方法有 HEAD、GET、DELETE、PUT、POST file 和 POST data。

Lara_R6_Example9 使用 HTTP POST 或 GET 向远程 HTTP 服务器 ThingSpeak.com 发送随机温度。ThingSpeak 是 MathWorks 提供的物联网分析平台服务,可帮助在云端聚合、可视化和分析实时数据流。表 3 显示了 HTTP 命令“POST data”的语法。

类型 语法 响应 示例
设置 AT+UHTTPC=<profile_id>,5,
<path>,<filename>,<data>,
<HTTP_content_type>
[,<user_defined_content_type>]
OK AT+UHTTPC=0,5,"/path/file.html", "responseFilename","data",0 OK

表 3:“POST data”是 HTTP 命令 5,格式如上所示。(表格来源:u-blox,由作者修改)

该示例可在 Arduino 主机控制器上编程,通过 AT 命令控制 EVK 板上的 LARA-R6 模块。此外,还需要配置 SIM 卡。

程序员必须创建 ThingSpeak 用户帐户,并通过菜单项“Channels(通道)”>“My Channels(我的通道)”>“New Channel(新通道)”为随机温度测量值设置字段 1。在变量 myWriteAPIKey 中,相应的“写入 API 密钥”被输入到主程序“LARA-R6_Example9_ThingSpeak.ino”。

C++ 主程序生成了一个随机温度值,形成特定于云端的数据字符串,并每隔 20 秒调用一次库函数 sendHTTPPOSTdata(清单 1)。

复制
...
1  String myWriteAPIKey = "PFIOEXW1VF21T7O6"; // Change this to your API key
2  String serverName = "api.thingspeak.com"; // Domain Name for HTTP POST/GET
3  [...]

4  void loop() 5  { 6    // Create a random temperature between 20 and 30  7    float temperature = ((float)random(2000,3000)) / 100.0; 8 9 10   // Send data using HTTP POST 11   String httpRequestData = "api_key=" + myWriteAPIKey + "&field1=" +
                                
String(temperature); 12 13   Serial.print(F("POSTing a temperature of ")); 14   Serial.print(String(temperature)); 15   Serial.println(F(" to ThingSpeak")); 16        17   // Send HTTP POST request to /update. The reponse will be written to
        post_response.txt in the LARA's file system
18   myLARA.sendHTTPPOSTdata(0, "/update", "post_response.txt", httpRequestData,
                             LARA_R6_HTTP_CONTENT_APPLICATION_X_WWW);
19 20 21   // Send data using HTTP GET 22      ==> see original code on Github 23 24   for (int i = 0; i < 20000; i++) // Wait for 20 seconds    25   { 26     myLARA.poll(); // Keep processing data from the LARA so we can catch
                            the HTTP command result
27     delay(1); 28   } 29  } ...

清单 1:该主程序生成了一个随机温度值,并每隔 20 秒调用一次库函数 sendHTTPPOSTdata。(代码来源:Github 上的 Firechip)

生成调用库函数的 AT 命令字符串

库头“Firechip_u-blox_LARA-R6_Arduino_Library.h”将函数调用 sendHTTPPOSTdata 转发到库过程“Firechip_u-blox_LARA-R6_Arduino_Library.cpp”,在该过程中生成和发送了完整格式的 AT 命令字符串(清单 2)。

复制
...
1  LARA_R6_error_t LARA_R6::sendHTTPPOSTdata(int profile, String path, 
                              String responseFilename, String data, 
                              LARA_R6_http_content_types_t httpContentType)
2  { 3    LARA_R6_error_t err; 4    char *command; 5 6    if (profile >= LARA_R6_NUM_HTTP_PROFILES) 7     return LARA_R6_ERROR_ERROR; 8 9    command = lara_r6_calloc_char(strlen(LARA_R6_HTTP_COMMAND) + 24 +
                                  path.
length() + responseFilename.length()
                                  + data.
length()); 10   if (command == nullptr) 11     return LARA_R6_ERROR_OUT_OF_MEMORY; 12   sprintf(command, "%s=%d,%d,\"%s\",\"%s\",\"%s\",%d",
             LARA_R6_HTTP_COMMAND, profile, LARA_R6_HTTP_COMMAND_POST_DATA,
             path.
c_str(), responseFilename.c_str(), data.c_str(),
             httpContentType);
13 14   err = sendCommandWithResponse(command, LARA_R6_RESPONSE_OK_OR_ERROR,
                                 
nullptr, LARA_R6_STANDARD_RESPONSE_TIMEOUT); 15 16   free(command); 17   return err; 18 } ...

清单 2:该 C++ 库过程生成并发送了完整格式的 AT 命令字符串(第 12 行)。(代码来源:Github 上的 Firechip)

库过程 LARA_R6::sendHTTPPOSTdata(清单 2)使用函数调用 myLARA.sendHTTPPOSTdata()(清单 1)中传递的参数和库头中额外声明的变量,根据表 3 生成了完整的 HTTP 命令字符串。最后,LARA-R6 调制解调器将生成的 AT 命令字符串发送到 ThingSpeak RemoteHTTP 服务器:

AT+UHTTPC=0,5,"/update","post_response.txt","api_key=PFIOEXW1VF21T7O6&field1=21.54",0

总结

对于低功耗物联网和 M2M 应用的全球联网,LARA-R6 系列的 LTE Cat 1 多模无线电模块既高效又经济。如图所示,开发人员可以使用 EVK 访问所有接口,并通过 AT 命令轻松配置和控制模块的协议和功能。该产品提供简单的选项,可用作 PC 调制解调器、向云端发送数据以及通过库函数生成 AT 命令字符串。

免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。

关于此作者

Jens Wallmann

Jens Wallmann 是一名自由编辑,为电子出版物撰稿(印刷版和网络版)。作为一名电气工程师(通信工程)和训练有素的工业电子工程师,他在电子产品开发领域拥有超过 25 年的经验,主要从事测量技术、汽车电子、加工工业和射频领域的工作。

关于此出版商

DigiKey 欧洲编辑