ESP32 HTTP GET 同步请求

#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "nvs_flash.h"
#include "esp_http_client.h"
#include "esp_event_loop.h"
#include "freertos/event_groups.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "app_wifi.h"

static const char *TAG = "HTTP_CLIENT";

EventGroupHandle_t wifi_event_group;

const int CONNECTED_BIT = BIT0;

esp_err_t _http_event_handler(esp_http_client_event_t *evt) {
	switch (evt->event_id) {
	case HTTP_EVENT_ERROR:
		ESP_LOGD(TAG, "HTTP_EVENT_ERROR");
		break;
	case HTTP_EVENT_ON_CONNECTED:
		ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED");
		break;
	case HTTP_EVENT_HEADER_SENT:
		ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT");
		break;
	case HTTP_EVENT_ON_HEADER:
		ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key,
				evt->header_value);
		break;
	case HTTP_EVENT_ON_DATA:
		ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
		if (!esp_http_client_is_chunked_response(evt->client)) {
			// Write out data
			printf("\r\n====收到的数据==%s=====\r\n", (char*) evt->data);
		}

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

void app_wifi_wait_connected() {
	xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true,
	portMAX_DELAY);
}

static void http_rest() {
	esp_http_client_config_t config =
			{
					.url =
							"http://192.168.2.188:7803/web-api/file/getFileSize?fileName=ESP8266Flasher.exe", };
	esp_http_client_handle_t client = esp_http_client_init(&config);
	esp_err_t err = esp_http_client_perform(client);
	if (err == ESP_OK) {
		int content_length = esp_http_client_get_content_length(client);
		char readData[content_length];
		ESP_LOGI(TAG, "HTTP GET Status = %d, content_length = %d",
				esp_http_client_get_status_code(client), content_length);
		esp_http_client_read(client, readData, content_length);
		printf("\r\n====收到的数据==%s=====\r\n", readData);
	} else {
		ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));
	}

}

static void http_test_task(void *pvParameters) {
	app_wifi_wait_connected();
	ESP_LOGI(TAG, "Connected to AP, begin http example");
	http_rest();
	vTaskDelete(NULL);
}

static esp_err_t event_handler(void *ctx, system_event_t *event) {
	switch (event->event_id) {
	case SYSTEM_EVENT_STA_START:
		esp_wifi_connect();
		break;
	case SYSTEM_EVENT_STA_GOT_IP:
		xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);
		break;
	case SYSTEM_EVENT_STA_DISCONNECTED:
		/* This is a workaround as ESP32 WiFi libs don't currently
		 auto-reassociate. */
		esp_wifi_connect();
		xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
		break;
	default:
		break;
	}
	return ESP_OK;
}
void app_wifi_initialise(void) {
	tcpip_adapter_init();	//tcp协议初始化
	wifi_event_group = xEventGroupCreate();	//创建一个事件组
	ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));	//wifi 事件
	wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT()
	;
	ESP_ERROR_CHECK(esp_wifi_init(&cfg));
	ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
	wifi_config_t wifi_config = { .sta = { .ssid = "jack", .password =
			"jack.12306",	//设置要连接的wifi
			}, };
	ESP_LOGI(TAG, "Setting WiFi configuration SSID %s...",
			wifi_config.sta.ssid);
	ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));	//设置模式
	ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));//设置连接wifi的参数
	ESP_ERROR_CHECK(esp_wifi_start());	//启动wifi

}
void app_main() {
	esp_err_t ret = nvs_flash_init();
	if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
		ESP_ERROR_CHECK(nvs_flash_erase());
		ret = nvs_flash_init();
	}
	ESP_ERROR_CHECK(ret);
	app_wifi_initialise();   //wifi连接部分
	xTaskCreate(&http_test_task, "http_test_task", 8192 * 2, NULL, 5, NULL); //创建HTTP任务
}


java后台

 @Value("${download-file.path}")
    private String path;

    @RequestMapping(value = "/getFileSize")
    public void getFileSize(HttpServletResponse response, String fileName) throws IOException {
        log.error("=======getFileSize=======" + fileName);
        BaseResult<Long> result = new BaseResult();
        long fileSize = MSCommonUtils.getFileSize(path + "/" + fileName);
        result.setData(fileSize);
        ServletOutputStream os = response.getOutputStream();
        os.write(JSONObject.toJSONString(result).trim().getBytes("gbk"));
    }
ESP32是一款功能强大的开发板,可以通过编程来发送HTTP请求。为了发送HTTP请求,我们需要使用ESP32的WiFi功能和HTTP客户端库。 首先,我们需要初始化ESP32的WiFi模块并连接到无线网络。我们可以使用WiFi类的begin()方法来初始化WiFi,然后使用WiFi类的connect()方法连接到无线网络。 接下来,我们需要导入HTTP客户端库。ESP32提供了一个名为HTTPClient的库,可以用来发送HTTP请求。 一旦我们连接到了无线网络,并导入了HTTPClient库,我们就可以准备发送HTTP请求了。为了发送请求,我们需要一个URL和一个HTTP请求方法。 我们可以使用HTTPClient对象的begin()方法来设置URL和请求方法。然后,我们可以使用addHeader()方法来添加任何需要的请求头。然后,我们可以使用send()方法来发送HTTP请求。 最后,我们可以使用getResponseBody()方法来获取HTTP响应的正文。我们还可以使用getHeaders()方法查看响应的头部信息。 发送完HTTP请求后,我们可以使用 HTTPClient的end()方法来释放资源,并断开与服务器的连接。 总结起来,要在ESP32上发送HTTP请求,我们需要初始化WiFi模块并连接到无线网络,导入HTTP客户端库,设置URL和请求方法,添加任何需要的请求头,发送HTTP请求,获取响应的正文和头部信息,然后释放资源和断开连接。通过编写适当的代码,我们可以在ESP32上实现发送HTTP请求的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值