1.ESP32 http_client使用post方法推送图片代码解析
最新学习http_client的post方法,把自己对推送图片函数进行注释一下,共同学习。
源码在上一篇博客:https://editor.csdn.net/md/?articleId=128116094 第二部分“MQTT协议实现公网对讲”。
/推送图片*/
static esp_err_t take_send_photo()
{
Serial.println(“Taking picture…”);
camera_fb_t * fb = NULL;//定义图片指针
esp_err_t res = ESP_OK;
fb = esp_camera_fb_get();//拍照获取一帧图片
if (!fb) {
Serial.println(“Camera capture failed”);
return ESP_FAIL;
}
httpResponseString = “”;//定义字符串,保存服务器端返回的信息
esp_http_client_handle_t http_client;//定义httpClient,分配给HTTP客户端所用的内存
esp_http_client_config_t config_client = {0}; //esp_http_client_config_t结构体,这里主要是初始化了 URL 和http的一个事件
config_client.url = post_url; // 初始化URL
config_client.event_handler = _http_event_handler;// 初始化http的一个事件
config_client.method = HTTP_METHOD_POST;// 初始化http的POST方法
http_client = esp_http_client_init(&config_client);//创建httpClient
esp_http_client_set_post_field(http_client, (const char *)fb->buf, fb->len);//设置http发送的内容和长度,这里发送的是一帧图片
esp_http_client_set_header(http_client, “Content-Type”, “image/jpg”); //设置http头部字段
esp_http_client_set_header(http_client, “Authorization”, uid); //设置http头部字段
esp_http_client_set_header(http_client, “Authtopic”, topic); //设置http头部字段
esp_http_client_set_header(http_client, “wechatmsg”, wechatMsg); //设置http头部字段
esp_http_client_set_header(http_client, “wecommsg”, wecomMsg); //设置http头部字段
esp_http_client_set_header(http_client, “picpath”, urlPath); //设置http头部字段
esp_err_t err = esp_http_client_perform(http_client);//这个函数是重点,完成TCP发送和接收
if (err == ESP_OK) {
Serial.println(httpResponseString);//打印获取的URL
//json数据解析
StaticJsonDocument<200> doc; //声明一个JsonDocument对象
DeserializationError error = deserializeJson(doc, httpResponseString); //httpResponseString为传入的待解析的JSON字符串,存到doc数组中
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.c_str());
}
String url = doc[“url”];//将httpResponseString中的"url"字符串找出赋值给字符串url
Serial.println(url);//打印获取的URL
}
esp_http_client_cleanup(http_client);//它将关闭连接(如果有的话)并释放分配给HTTP客户端的所有内存
esp_camera_fb_return(fb);//释放该帧图片内存
}
2. 上面esp32 client相关的结构体和函数在esp_http_client中定义:
C:\Users\Administrator\esp\esp-idf\components\esp_http_client
3.json数据相关函数和数据结构在Arduino的系统库中,需要安装.
C:\Users\Administrator\Documents\Arduino\libraries\ArduinoJson