下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

蜂窝接口演示(双向验证)

本页内容:

简介

FreeRTOS 提供了一套专为 IoT 应用程序设计的网络堆栈。应用程序可以访问 不同级别的通信协议(MQTT、HTTP、安全套接字等)。通用连接 技术(如以太网、Wi-Fi 和 BLE)已与 FreeRTOS 的网络堆栈集成,还预集成了多种微控制器和模块

本项目中的演示将展示如何使用蜂窝连接与 MQTT 代理 (例如 AWS IoT Core)建立经过双向验证的 MQTT 连接。相关演示均使用 来自外部项目的子模块蜂窝接口库 。该蜂窝接口库通过统一的 API 提供了一些常用的 蜂窝调制解调器的功能。

FreeRTOS 的 MQTT 和 HTTP 库使用抽象传输 接口以通用方式发送/接收数据。本项目中的演示 除蜂窝接口库公开的统一 API 外,还提供了传输接口的实现

硬件设置

本项目中的演示可以在 FreeRTOS Windows 模拟器中运行。您需要一台 Windows 计算机和一个受支持的蜂窝调制解调器 来运行演示。构建演示时需要 Visual Studio, 如免费社区版 Visual Studio

FreeRTOS Windows 模拟器使用 COM 端口与蜂窝模块进行通信。 请按照如下步骤设置蜂窝模块通信。

  1. 将蜂窝模块连接到计算机。大多数蜂窝开发套件都有 USB 连接器, 因此只需将其连接到计算机的 USB 端口,然后在 Windows 设备管理器中查找 COM 端口即可。 例如,如下图所示,连接调制解调器时,您会看到新的 COM69 出现。如果 蜂窝开发套件没有 USB,请使用 如下 USB 适配器。

    屏幕截图 1:Windows 设备管理器中的蜂窝模块 COM 端口

  2. 请使用 Putty 或 任何其他终端工具验证与蜂窝模块的连接。有关波特率、奇偶校验和流量控制等设置, 请参阅蜂窝模块手册。在终端工具中, 输入 "ATE1",调制解调器会返回 "OK"。您可能还会看到 "ATE1" 的回显, 具体取决于您的调制解调器设置。输入 "AT",调制解调器会返回 "OK"。

    屏幕截图 2:在 Putty 中使用 AT 命令测试 COM 端口

组件和接口

本项目使用其他 GitHub 项目中的五 (5) 个子模块, 如下图黄色方框所示。

图 1:组件和接口
  • 蜂窝演示应用程序coreMQTT 演示的功能大致相同,但添加了 将蜂窝设置为传输的逻辑。(最初的 coreMQTT 演示专为 FreeRTOS Windows 模拟器上的 Wi-Fi 而设计。)
  • MQTT 库 需要传输接口来发送和接收数据包, 该库是 coreMQTT 项目的子模块。
  • mbedTLS 库 需要 TLS 移植接口 才能在 FreeRTOS 上运行。
  • 蜂窝接口库使用通信接口 通过 UART 连接与蜂窝调制解调器通信。

开发者参考和 API 文档

请参阅托管 doxygen

源代码组织

Visual Studio 的演示项目文件名为 <xyz>_mqtt_mutual_auth_demo.sln, 其中,xyz 是蜂窝调制解调器的名称。这些文件位于 GitHub 上的 FreeRTOS_Cellular_Interface_Windows_Simulator 存储库,目录如下:

  1. MQTT_Mutual_Auth_Demo_with_BG96
  2. MQTT_Mutual_Auth_Demo_with_HL7802
  3. MQTT_Mutual_Auth_Demo_with_SARA_R4
./FreeRTOS-Plus
├── Demo
│   ├── FreeRTOS_Cellular_Interface_Windows_Simulator
│   │   ├── Common
│   │   │   ├── FreeRTOSConfig.h
│   │   │   ├── FreeRTOSIPConfig.h
│   │   │   ├── MutualAuthMQTTExample.c
│   │   │   ├── cellular_platform.c
│   │   │   ├── cellular_platform.h
│   │   │   ├── cellular_setup.c
│   │   │   ├── comm_if_windows.c
│   │   │   ├── core_mqtt_config.h
│   │   │   ├── main.c
│   │   │   └── mbedtls_config.h
│   │   ├── MQTT_Mutual_Auth_Demo_with_BG96 ( demo project for Quectel BG96 )
│   │   │   ├── WIN32.vcxproj
│   │   │   ├── WIN32.vcxproj.filters
│   │   │   ├── WIN32.vcxproj.user
│   │   │   ├── cellular_config.h
│   │   │   ├── demo_config.h
│   │   │   └── mqtt_mutual_auth_demo_with_bg96.sln
│   │   ├── MQTT_Mutual_Auth_Demo_with_HL7802 ( demo project for Sierra Wireless HL7802 )
│   │   └── MQTT_Mutual_Auth_Demo_with_SARA_R4 ( demo project for U-Blox Sara-R4 )
│   │
├── Source
│   ├── Application-Protocols
│   │   ├── coreMQTT ( submodule : coreMQTT )
│   ├── FreeRTOS-Cellular-Interface ( submodule : FreeRTOS-Cellular-Interface )
│   ├── FreeRTOS-Cellular-Modules
│   │   ├── bg96 ( submodule : Lab-FreeRTOS-Cellular-Interface-Reference-Quectel-BG96 )
│   │   ├── hl7802 ( submodule : Lab-FreeRTOS-Cellular-Interface-Reference-Sierra-Wireless-HL7802 )
│   │   └── sara-r4 ( submodule : Lab-FreeRTOS-Cellular-Interface-Reference-ublox-SARA-R4 )
│   ├── Utilities
│   │   ├── backoff_algorithm ( submodule : backoffAlgorithm )
│   │   ├── logging
│   │   ├── mbedtls_freertos
│   │   │   ├── mbedtls_bio_freertos_cellular.c
│   │   │      └── ( code for adapting mbedtls with cellular socket )
│   │   │   ├── mbedtls_bio_freertos_plus_tcp.c
│   │   │   ├── mbedtls_freertos_port.c
│   │   │   └── threading_alt.h
├── ThirdParty
│   ├── mbedtls ( submodule : mbedtls )

配置应用程序设置

配置蜂窝网络

蜂窝配置中的参数 cellular_config.h(位于 "MQTT_Mutual_Auth_Demo_with_<cellular_module>/cellular_config.h")必须 根据您的网络环境进行修改。

配置 描述
CELLULAR_COMM_INTERFACE_PORT 蜂窝通信接口利用计算机上的 COM 端口 与 Windows 模拟器上的蜂窝模块通信。 连接到蜂窝模块的 COM 端口。
CELLULAR_APN 网络注册的默认 APN 根据您的网络运营商指定此值。
CELLULAR_PDN_CONTEXT_ID 蜂窝网络的 PDN 上下文 ID。 默认值为 CELLULAR_PDN_CONTEXT_ID_MIN。
CELLULAR_PDN_CONNECT_TIMEOUT 网络注册的 PDN 连接超时。 默认值为 100000 毫秒。

配置 MQTT 代理

有关连接到 MQTT 代理的配置,详见演示配置 demo_config.h(位于 "MQTT_Mutual_Auth_Demo_with_<cellular_module>/demo_config.h")。具体请参阅文档 MQTT 双向验证演示

配置 COM 端口设置

有关 COM 端口设置,请参阅蜂窝模块文档。如有必要,请更新 comm_if_windows.c 中的设置。

配置其他子模块

"FreeRTOSConfig.h"、"mbedtls_config.h" 和 "core_mqtt_config.h"(位于 "MQTT_Mutual_Auth_Demo_with_<cellular_module> 中)包含 相应子模块的配置。

演示执行步骤流程

演示应用程序执行三类操作。搜索 下图中的函数名称,即可在源代码中找到执行这些操作的确切位置。

  1. 注册蜂窝网络。(请参阅 cellular_setup.c。)
  2. 使用 MQTT 代理建立与 AWS IoT 的安全连接。(请参阅 using_mbedtls.c。)
  3. 执行 MQTT 操作。(请参阅 MutualAuthMQTTExample.c。)

下图说明了演示应用程序与其他组件之间的交互。

演示流程

演示流程
点击图像放大

构建并运行 MQTT 双向验证演示

  1. 在 Visual Studio 中,打开与您的蜂窝调制解调器匹配的 mqtt_mutual_auth_demo.sln 项目 。
  2. 设置 Amazon Web Services 账号,并在 AWS IoT Core 上注册 AWS IoT 设备。 请参阅 在 coreMQTT 双向验证演示中使用 AWS IoT 消息代理, 了解详细信息。
  3. 配置设备名称、AWS IoT 设备端点,并在 demo_config.h(位于 "MQTT_Mutual_Auth_Demo_with_<cellular_module>/demo_config.h")中设置凭据。
  4. 编译并运行。

控制台中成功执行 bg96_mqtt_mutual_auth_demo.sln 项目的输出结果如下所示。


[INFO] [CELLULAR] [commTaskThread:287] Cellular commTaskThread started
>>> Cellular SIM okay <<<
>>> Cellular GetServiceStatus failed 0, ps registration status 0 <<<
>>> Cellular module registered <<<
>>> Cellular module registered, IP address 10.160.13.238 <<<
[INFO] [MQTTDemo] [prvConnectToServerWithBackoffRetries:583] Creating a TLS connection to xxxxx-ats.iot.us-west-2.amazonaws.com:8883.

[INFO] [MQTTDemo] [MQTTDemoTask:465] Creating an MQTT connection to xxxxx-ats.iot.us-west-2.amazonaws.com.

[INFO] [MQTTDemo] [prvCreateMQTTConnectionWithBroker:683] An MQTT connection is established with XXXXXXXXXX-ats.iot.us-west-2.amazonaws.com.
[INFO] [MQTTDemo] [prvMQTTSubscribeWithBackoffRetries:741] Attempt to subscribe to the MQTT topic testClient13:24:47/example/topic.

[INFO] [MQTTDemo] [prvMQTTSubscribeWithBackoffRetries:748] SUBSCRIBE sent for topic testClient13:24:47/example/topic to broker.


[INFO] [MQTTDemo] [prvMQTTProcessResponse:872] Subscribed to the topic testClient13:24:47/example/topic with maximum QoS 1.

[INFO] [MQTTDemo] [MQTTDemoTask:479] Publish to the MQTT topic testClient13:24:47/example/topic.

[INFO] [MQTTDemo] [MQTTDemoTask:485] Attempt to receive publish message from broker.

[INFO] [MQTTDemo] [prvMQTTProcessResponse:853] PUBACK received for packet Id 2.

[INFO] [MQTTDemo] [MQTTDemoTask:490] Keeping Connection Idle...


[INFO] [MQTTDemo] [MQTTDemoTask:479] Publish to the MQTT topic testClient13:24:47/example/topic.

[INFO] [MQTTDemo] [MQTTDemoTask:485] Attempt to receive publish message from broker.

[INFO] [MQTTDemo] [prvMQTTProcessIncomingPublish:908] Incoming QoS : 1

[INFO] [MQTTDemo] [prvMQTTProcessIncomingPublish:919]
Incoming Publish Topic Name: testClient13:24:47/example/topic matches subscribed topic.
Incoming Publish Message : Hello World!
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.