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の画面の表示フォントサイズが次のように大きくなりました。