ESP32基础应用之http实验

文章目录

  • 1 HTTP Client 实验
    • 1.1 新建工程
      • 1.1.1 新建自己的工程app-http-client
      • 1.1.2 直接使用官方例程esp_http_client
    • 1.3 代码分析

1 HTTP Client 实验

本实验是在app-wifi-station例程基础之上添加乐鑫官方例程esp_http_client所做的实验
app-wifi-station例程:作用是连接指定wifi;
乐鑫官方例程esp_http_client:作用是测试http作为client的各种功能。
ESP32基础应用之http实验_第1张图片

1.1 新建工程

如果只是想测试http client相关的内容则推荐使用 1.1.2 直接使用官方例程esp_http_client
如果想新建自己的工程则使用 1.1.1 新建自己的工程app-http-client,但该方法较麻烦。

1.1.1 新建自己的工程app-http-client

  1. 复制app-wifi-station例程并改名为app-http-client
  2. 将编译生成的可烧录文件更名为app-http-clientESP32基础应用之http实验_第2张图片
  3. 删除例程内旧的menu相关文件(包括main文件夹下),将官方例程esp_http_clientmenu相关文件复制过来,完成后如下:ESP32基础应用之http实验_第3张图片
  4. examples\common_components\protocol_examples_common文件夹下的Kconfig.projbuild文件内容复制到app-http-client\main文件夹下的Kconfig.projbuild,这时会有连个wifi连接相关的配置,将旧的wifi配置部分替换到新复制过来的wifi配置完成后如下:ESP32基础应用之http实验_第4张图片
menu "Example Configuration"
    config EXAMPLE_CONNECT_WIFI
        bool "connect using WiFi interface"
        default y
        help
            Protocol examples can use Wi-Fi and/or Ethernet to connect to the network.
            Choose this option to connect with WiFi

    if EXAMPLE_CONNECT_WIFI
		config ESP_WIFI_SSID
			string "WiFi SSID"
			default "myssid"
			help
				SSID (network name) for the example to connect to.

		config ESP_WIFI_PASSWORD
			string "WiFi Password"
			default "mypassword"
			help
				WiFi password (WPA or WPA2) for the example to use.

		config ESP_MAXIMUM_RETRY
			int "Maximum retry"
			default 5
			help
				Set the Maximum retry to avoid station reconnecting to the AP unlimited when the AP is really inexistent.
    endif
    ……/*省略了剩余代码*/
endmenu
  1. 将官方例程下的howsmyssl_com_root_cert.pem文件复制过来,并在main文件夹下的CMakeLists.txtcomponent.mk文件内增加该文件ESP32基础应用之http实验_第5张图片ESP32基础应用之http实验_第6张图片
  2. 将官方例程esp_http_client_example.c文件复制过来,更名为user_http_client.c,并添加进CMakeLists.txtESP32基础应用之http实验_第7张图片
  3. 新建user_http_client.h文件
  4. 打开user_http_client.c文件,将app_main改为user_http_client_init,并删除多于的函数,完成后如下:在这里插入图片描述
  5. 将user_http_client_init函数在user_http_client.h文件中作声明,再添加到station_example_main.c文件下的app_main函数中ESP32基础应用之http实验_第8张图片
  6. 使用idf.py menuconfig指令配置wifiESP32基础应用之http实验_第9张图片
  7. 使用idf.py build指令编译工程

1.1.2 直接使用官方例程esp_http_client

  1. 直接将官方例程复制到自己做实验的文件夹下;
  2. 使用idf.py menuconfig指令配置wifi;
  3. 使用idf.py build编译即可;

注意:

  1. 确保 examples\common_components\protocol_examples_common 该路径下有如下官方库文件ESP32基础应用之http实验_第10张图片
  2. protocol_examples_common的作用就是连使用wifi或**Ethernet(以太网)**连接

1.3 代码分析

  1. 在函数 http_test_task 中做了http client各种功能实验
static void http_test_task(void *pvParameters)
{
     
    http_rest_with_url();          /*使用URL连接http server*/
    http_rest_with_hostname_path();/*使用hostname+path连接http server*/
    .
    .
    .
    ESP_LOGI(TAG, "Finish http example");
    vTaskDelete(NULL);
}
  1. 在功能测试用出现的 GET、POST、PUT、PATCH等,其含义如下ESP32基础应用之http实验_第11张图片
  2. HTTP 配置参数
/**
 * @brief HTTP configuration
 */
typedef struct {
     
    const char                  *url;                /*!< HTTP URL, the information on the URL is most important, it overrides the other fields below, if any */
    const char                  *host;               /*服务器域名或ip地址 !< Domain or IP as string */
    int                         port;                /*端口 http默认80 https 默认443!< Port to connect, default depend on esp_http_client_transport_t (80 or 443) */
    const char                  *username;           /*用户名,认证时使用!< Using for Http authentication */
    const char                  *password;           /*用户密码,认证时使用!< Using for Http authentication */
    esp_http_client_auth_type_t auth_type;           /*认证方式!< Http authentication type, see `esp_http_client_auth_type_t` */
    const char                  *path;               /*路径!< HTTP Path, if not set, default is `/` */
    const char                  *query;              /*请求参数!< HTTP query */
    const char                  *cert_pem;           /*证书!< SSL server certification, PEM format as string, if the client requires to verify server */
    const char                  *client_cert_pem;    /*!< SSL client certification, PEM format as string, if the server requires to verify client */
    const char                  *client_key_pem;     /*!< SSL client key, PEM format as string, if the server requires to verify client */
    esp_http_client_method_t    method;                   /*!< HTTP Method */
    int                         timeout_ms;               /*请求超时!< Network timeout in milliseconds */
    bool                        disable_auto_redirect;    /*!< Disable HTTP automatic redirects */
    int                         max_redirection_count;    /*!< Max redirection number, using default value if zero*/
    http_event_handle_cb        event_handler;             /*!< HTTP Event Handle */
    esp_http_client_transport_t transport_type;           /*!< HTTP transport type, see `esp_http_client_transport_t` */
    int                         buffer_size;              /*!< HTTP receive buffer size */
    int                         buffer_size_tx;           /*!< HTTP transmit buffer size */
    void                        *user_data;               /*!< HTTP user_data context */
    bool                        is_async;                 /*!< Set asynchronous mode, only supported with HTTPS for now */
    bool                        use_global_ca_store;      /*!< Use a global ca_store for all the connections in which this bool is set. */
    bool                        skip_cert_common_name_check;    /*!< Skip any validation of server certificate CN field */
} esp_http_client_config_t;
  1. 实验函数分析

实验中用到的函数请参考官网:乐鑫官网HTTP client 解析

你可能感兴趣的:(乐鑫ESP32)