M5Stack Core2 for AWSでHTTPクライアントを作成します。「PlatformIOでM5Stack Core2 for AWSの開発環境の構築」で環境構築したPlatformIOを用いて、プログラムはESP-IDFで作成します。

HTTPクライアントの作成

指定したURLにアクセスするHTTPクライアントを作成します。

次のコマンドを使用してメニューを表示し、M5Stack Core2 for AWSの表示フォントサイズの設定とWi-Fiの設定を行います。

> pio run --environment core2foraws --target menuconfig
  • M5Stack Core2 for AWSの表示フォントサイズ:Component config ?> LVGL configuration >Font usage >Select theme default normal font
  • Wi-Fi:AWS IoT EduKit Configuration ?> WiFi SSID / WiFi Password

HTTPクライアント「HTTP-Test」は、M5Stack Core2 for AWSで「m5stack/Core2-for-AWS-IoT-EduKit」のproject「Blinky-Hello-World」をベースにして、「espressif/esp-idf」の「esp-idf/examples/protocols/esp_http_client」を組み合わせて作成します。

取得した「esp_http_client」はフォルダ「main」の配下に配置して次のように設定します。

makeファイル「CMakeLists.txt」を次のように変更して、作成したフォルダ「esp_http_client」をコンパイルの対象にします。

CMakeLists.txt

set(COMPONENT_SRCDIRS "." "./esp_http_client" "./esp_http_client/lib")
set(COMPONENT_ADD_INCLUDEDIRS "." "./includes" "./esp_http_client/include" "./esp_http_client/lib/include")
set(COMPONENT_REQUIRES "nvs_flash" "esp-aws-iot" "esp-cryptoauthlib" "core2forAWS")
register_component()

target_add_binary_data(${COMPONENT_TARGET} "certs/aws-root-ca.pem" TEXT)
  • 65-71行目までは、「Blinky-Hello-World」と同じコードです。
  • 76-79行目でURLとイベント処理の設定を行います。

main.c

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <limits.h>
#include <string.h>

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "freertos/event_groups.h"
#include "esp_log.h"

#include "core2forAWS.h"

#include "wifi.h"
#include "ui.h"

////////////////////////////
#include "esp_http_client.h"

////////////////////////////

/* The time prefix used by the logger. */
static const char *TAG = "MAIN";

esp_err_t _http_event_handle(esp_http_client_event_t *evt)
{
    switch (evt->event_id)
    {
    case HTTP_EVENT_ERROR:
        ESP_LOGI(TAG, "HTTP_EVENT_ERROR");
        break;
    case HTTP_EVENT_ON_CONNECTED:
        ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED");
        break;
    case HTTP_EVENT_HEADER_SENT:
        ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT");
        break;
    case HTTP_EVENT_ON_HEADER:
        ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER");
        printf("%.*s", evt->data_len, (char *)evt->data);
        break;
    case HTTP_EVENT_ON_DATA:
        ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
        if (!esp_http_client_is_chunked_response(evt->client))
        {
            printf("%.*s", evt->data_len, (char *)evt->data);
        }

        break;
    case HTTP_EVENT_ON_FINISH:
        ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH");
        break;
    case HTTP_EVENT_DISCONNECTED:
        ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");
        break;
    }
    return ESP_OK;
}

void app_main()
{
    ESP_LOGI(TAG, "app_main00");
    Core2ForAWS_Init();
    Core2ForAWS_Display_SetBrightness(80);

    ESP_LOGI(TAG, "app_main03");
    ui_init();
    ESP_LOGI(TAG, "app_main04");
    initialise_wifi();
    vTaskDelay(pdMS_TO_TICKS(5000));

    ESP_LOGI(TAG, "app_main05");

    esp_http_client_config_t config = {
        .url = "http://httpbin.org/redirect/2",
        .event_handler = _http_event_handle,
    };
    esp_http_client_handle_t client = esp_http_client_init(&config);
    ESP_LOGI(TAG, "app_main10");

    esp_err_t err = esp_http_client_perform(client);

    if (err == ESP_OK)
    {
        ESP_LOGI(TAG, "Status = %d, content_length = %d",
                 esp_http_client_get_status_code(client),
                 esp_http_client_get_content_length(client));
    }
    ESP_LOGI(TAG, "app_main20");

    esp_http_client_cleanup(client);
}

HTTPクライアントの実行

VS Code上のPlatformIOでHTTPクライアント「HTTP-Test」を実行します。シリアルモニタに次のメッセージが表示されます。エラーメッセージ 404(Not Found)が発生しています。

        ...
I (4072) wifi:AP's beacon interval = 102400 us, DTIM period = 1
?[0;32mI (5132) WIFI: Device IP address: 192.168.10.108?[0m
?[0;32mI (5132) esp_netif_handlers: sta ip: 192.168.10.108, mask: 255.255.255.0, gw: 192.168.10.1?[0m     
?[0;32mI (8322) MAIN: app_main05?[0m
?[0;32mI (8322) MAIN: app_main10?[0m
?[0;32mI (8582) MAIN: HTTP_EVENT_ON_CONNECTED?[0m
?[0;32mI (8582) MAIN: HTTP_EVENT_HEADER_SENT?[0m
?[0;32mI (8782) MAIN: HTTP_EVENT_ON_HEADER?[0m
?[0;32mI (8782) MAIN: HTTP_EVENT_ON_HEADER?[0m
?[0;32mI (8792) MAIN: HTTP_EVENT_ON_HEADER?[0m
?[0;32mI (8792) MAIN: HTTP_EVENT_ON_HEADER?[0m
?[0;32mI (8792) MAIN: HTTP_EVENT_ON_HEADER?[0m
?[0;32mI (8792) MAIN: HTTP_EVENT_ON_FINISH?[0m
?[0;32mI (8802) MAIN: Status = 404, content_length = 0?[0m
?[0;32mI (8802) MAIN: app_main20?[0m
?[0;32mI (8812) MAIN: HTTP_EVENT_DISCONNECTED?[0m

M5Stack Core2 for AWSの画面の表示フォントサイズが次のように大きくなりました。