本指南详细介绍了如何配置和测试 FreeRTOS 示例以连接到 AWS IoT
转发: Setting up a FreeRTOS Example on STM32 Nucleo Board using W5300 TOE for AWS IoT Connection
项目介绍
如何使用 freeRTOS 示例测试与 AWS IoT 的连接
第一步:准备软件
使用 freeRTOS 示例测试连接到 AWS IoT 需要以下串行终端程序,请从以下链接下载并安装。
第二步:准备硬件
将 W5300 TOE Shield 与 STM32 Nucleo429ZI 板相结合。
将以太网电缆连接到 W5300 TOE Shield 以太网端口。
使用 5 针微型 USB 电缆将 STM32 Nucleo-144 板连接到台式机或笔记本电脑。
第 3 步:设置 AWS IoT
为了通过 freeRTOS 连接到 AWS IoT,必须将开发环境配置为使用 AWS IoT。
此示例是通过配置 AWS IoT Core 进行测试的。 请参阅下面文档的“创建 AWS IoT 资源”部分并进行相应配置。
有关 AWS IoT 的更多信息,请参阅以下文档。
步骤 4:通过 freeRTOS 示例设置连接 AWS IoT
要测试通过 freeRTOS 连接 AWS IoT 示例,应在代码中完成少量设置。
- 在 'main.c' 中设置网络配置,例如 IP,这是通过 'W5300-TOE-FREERTOS-C/Core/Src/' 目录中的 freeRTOS 连接 AWS IoT 示例。
设置 IP、其他网络设置以适合您的网络环境以及是否使用 DHCP。
/* Network */ static wiz_NetInfo g_net_info = { .mac = {0x00, 0x08, 0xDC, 0x12, 0x34, 0x56}, // MAC address .ip = {192, 168, 11, 2}, // IP address .sn = {255, 255, 255, 0}, // Subnet Mask .gw = {192, 168, 11, 1}, // Gateway .dns = {8, 8, 8, 8}, // DNS server .dhcp = NETINFO_DHCP // DHCP enable/disable };
- 设置 AWS IoT 配置。
MQTT_DOMAIN 应设置为 AWS IoT 数据终端节点,并且不需要设置 MQTT_USERNAME 和 MQTT_PASSWORD。 设置 MQTT_CLIENT_ID 与 AWS IoT Core 设置期间创建的内容相同。
/* AWS IoT */ #define MQTT_DOMAIN "account-specific-prefix-ats.iot.ap-northeast-2.amazonaws.com" #define MQTT_PUB_TOPIC "$aws/things/my_rp2040_thing/shadow/update" #define MQTT_SUB_TOPIC "$aws/things/my_rp2040_thing/shadow/update/accepted" #define MQTT_USERNAME NULL #define MQTT_PASSWORD NULL #define MQTT_CLIENT_ID "my_rp2040_thing"
- 设置设备证书和密钥。
您必须输入在步骤 2 中下载的根证书、客户端证书和私钥。
根证书使用 RSA 2048 位密钥、Amazon Root CA 1,并且不使用公钥。
设备证书和密钥可以在 W5300-TOE-FREERTOS-C\Core\Inc' 目录中的“mqtt_certificate.h”中设置。
uint8_t mqtt_root_ca[] = "-----BEGIN CERTIFICATE-----\r\n" "...\r\n" "-----END CERTIFICATE-----\r\n"; uint8_t mqtt_client_cert[] = "-----BEGIN CERTIFICATE-----\r\n" "...\r\n" "-----END CERTIFICATE-----\r\n"; uint8_t mqtt_private_key[] = "-----BEGIN RSA PRIVATE KEY-----\r\n" "...\r\n" "-----END RSA PRIVATE KEY-----\r\n";
- 以下是有关如何在 freeRTOS 中添加任务的分步指南。
-编写任务函数
首先,编写任务将运行的函数。 该函数通常由无限循环组成,您可以在其中定义任务将执行的操作。
void aws_example_task(void *argument){ while(1) { // Your task implementation here... } }
-定义任务句柄和属性
在创建任务之前,您必须定义任务句柄和任务属性。
osThreadId_t awsExampleTaskHandle; const osThreadAttr_t aws_example_attributes = { .name = "awsExampleTask", .stack_size = 128 * 4, .priority = (osPriority_t) osPriorityNormal, };
- 创建任务
使用 osThreadNew 函数创建任务。 该函数将任务函数、传递给任务函数的参数以及任务属性作为参数。
awsExampleTaskHandle = osThreadNew(aws_example_task, NULL, &aws_example_attributes);
第 5 步:构建
完成 AWS 示例配置后,在您正在使用的 IDE 中进行构建。
构建完成后,将生成固件下载到 STM32 Nucleo-144 板。
第6步:上传并运行
- 使用 Tera Term 连接到 STM32 Nucleo-144 板的串行 COM 端口。
重置你的主板。
如果通过 freeRTOS 连接 AWS IoT 示例在 Nucleo-144 板上正常运行,您可以看到 W5300 的网络信息,连接到 AWS IoT 并发布消息。
- 如果您通过 AWS IoT Core 中的测试功能将消息发布到步骤 4 中配置的订阅主题,您可以看到 Nucleo-144 板收到有关订阅主题的消息。
文件