下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

coreHTTP 基础 S3 上传演示


 

单线程 VS 多线程

coreHTTP 有两种使用模式,一种是单线程式的,另一种是多线程式的 (多任务)。虽然此页面上的演示在线程中运行 HTTP 库,但它实际上是在演示如何在单线程环境(只有一个任务在演示中使用 HTTP API )中使用 coreHTTP。单线程应用程序必须重复调用 HTTP 库,而多线程应用程序则可以在 agent(或守护进程)任务的后台执行发送 HTTP 请求。
 

简介

此示例演示了向 AWS S3 HTTP 服务器发送 PUT 请求并上传小文件的过程。它还执行 GET 请求,以在文件上传后验证其大小。此示例使用网络传输接口,该接口使用 mbedTLS 在运行 coreHTTP 的 IoT 设备客户端和 AWS S3 HTTP 服务器之间建立相互身份验证的连接。

core HTTP S3 上传演示项目使用 FreeRTOS Windows 端口,因此您可以 因此您可以用 Windows 上免费的 Visual Studio 社区版来构建和评估该演示,而无需任何特殊 MCU 硬件。
 

源代码组织

演示项目名为 http_s3_upload_demo.sln,可在 FreeRTOS 主下载文件FreeRTOS-Plus/Demo/coreHTTP _Windows_Simulator/HTTP_S3_Upload 目录中找到(也可在 Github 上的 coreHTTP _Windows_Simulator 存储库中找到) 。
 

构建演示项目

此演示项目使用 Visual Studio 免费社区版。要构建演示,请执行如下操作:

  1. 从 Visual Studio IDE 中打开 “http_s3_upload_demo_demo.sln” Visual Studio 解决方案文件。
  2. 在 IDE 的 “Build” 菜单中选择 “Build Solution”。

注意:如果您使用的是 Microsoft Visual Studio 2017 或更早版本,则必须选择与您的版本兼容的 “Platform Toolset”:"Project -> RTOSDemos Properties -> Platform Toolset"。
 

配置演示项目

此演示使用 FreeRTOS-Plus-TCP TCP/IP 堆栈,因此请遵照 TCP/IP 入门项目的说明以确保您:

  1. 安装了必要的 组件(如 WinPCap)。
  2. 设置静态或 动态 IP 地址、网关地址和网络掩码(可选)。
  3. 设置了 MAC 地址(可选)。
  4. 在主机上选择了 以太网网络接口
  5. 最重要的是 , 请先测试您的网络连接,然后再尝试运行 HTTP 演示。

交付时, TCP/IP 堆栈被配置为使用动态 IP 地址。
 

配置 AWS S3 HTTP 服务器连接

此演示使用预签名 URL 连接 AWS S3 HTTP 服务器并授权访问要下载的对象。AWS S3 HTTP 服务器的 TLS 连接仅使用 服务器身份验证。在应用程序级别,使用预签名 URL 查询中的参数来验证对对象的访问。按照以下说明生成的预签名 URL 将在一小时后过期,因此,如果自生成 URL 后已经过去一小时或更长时间,需要再次生成 URL 才能运行演示应用程序。

请按照以下步骤配置与 AWS 的连接。

  1. 设置一个 Amazon Web Services (AWS) 帐户:
    • 如果您还没有账户,请创建并激活 AWS 账户(包含一个免费套餐)。
    • 使用 AWS 身份和访问管理 (IAM) 设置帐户和权限。IAM 允许您管理每个用户的权限。默认情况下,用户需要获得根用户的授权才具有权限。
      • 要将 IAM 用户添加到您的 AWS 帐户,请参阅 IAM 用户指南
      • 通过添加下方策略,为您的 AWS 帐户设置访问 FreeRTOS 和 AWS IoT 的权限:
        • AmazonS3FullAccess
  2. 按照 AWS 文档中提供的步骤在 S3 中创建存储桶
  3. 按照 AWS 文档中提供的步骤将文件更新到 S3 中
  4. 使用位于 FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/Presigned_url_generator/presigned_urls_gen.py 的脚本来生成预签名 URL。相关使用说明请参阅 FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md
 

功能

演示先使用 TLS 服务器身份验证连接到 AWS S3 HTTP 服务器。然后,它会创建一个 HTTP 请求来上传 democonfigDEMO_HTTP_upload_DATA 中指定的数据。上传文件后,它会通过请求文件的大小来检查文件是否已成功上传。演示的结构体可以在 Github 上的 S3UploadHTTPExample.c 中找到。
 

连接到 AWS S3 HTTP 服务器

函数 connectToServerWithBackoffRetries() 试图与 HTTP 服务器建立 TCP 连接。如果 连接失败,则会在超时后重试。超时值将呈指数增长, 直到达到尝试次数或最大超时值。connectToServerWithBackoffRetries() 会返回 失败状态 - 如果在配置的尝试次数后仍无法建立与服务器的 TCP 连接。connectToServerWithBackoffRetries() 的源代码可以在 Github 上的 http_demo_utils.c 中找到 。

函数 “prvConnectToServer()” 演示了如何仅使用服务器身份验证来建立与 AWS S3 HTTP 服务器的连接。它使用基于 mbedTLS 的传输接口,该接口在文件 “FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c” 中实现。 “prvConnectToServer()” 的定义可在 Github 上的 S3Upload HTTPExample.c 中找到。
 

上传数据

函数 “prvUploadS3ObjectFile” 演示了如何创建 PUT 请求并指定要上传的文件。在预签名 URL 中指定要上传的 AWS S3 存储桶以及上传时的文件名。为节省内存,使用同一缓冲区来请求标头和接收响应。使用 API 函数 “HTTPClient_Send()” 同步接收响应。预计 AWS S3 HTTP 服务器会返回一个 200 OK 的响应状态代码,若返回其他状态代码,则均视为错误。

prvUploadS3ObjectFile” 的源代码可在 Github 上的 S3UploadHTTPExample.c 中找到。
 

验证上传

函数 “prvVerifyS3ObjectFileSize” 通过调用 “prvGetS3ObjectFileSize” 来检索 S3 存储桶中的对象的大小。S3 HTTP 服务器当前不支持使用预签名 URL 的 HEAD 请求,因此请求第 0 个字节。文件的大小包含在响应的 Content-Range 标头字段中。预计服务器会返回一个 206 Partial Content 响应;如收到其他响应状态代码,则均视为错误。

prvGetS3ObjectFileSize” 的源代码可在 Github 上的 S3DownloadHTTPExample.c 中找到。

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.