1、 先搭建一个HTTP服务器

先将hello_wordl例子拷贝到~/esp中,在hello_wordl/build中创建get文件夹,且将hello-world.bin 放进去。

cp -r $IDF_PATH/examples/get-started/hello_world .

cd hello_world/build/

mkdir get

cd get/

cp ~/esp/hello_world/build/hello-world.bin .

cd ..

python -m SimpleHTTPServer 8070

提示:

1.1、服务器运行后,构建目录的内容可以通过网址 http://localhost:8070/ 浏览到。

1.2、将你的 PC 连接到你将会在 ESP32 上面使用的同一个 AP。

2、 先将hello-world.bin 拷贝到~/esp中且命名"my_ota"

a、 先配置menuconfig

make menuconfig

--Serial flasher conifg --->

----Default serial port

------COM3

--Partition Table --->

----Partition Table (Factory app, two OTA definitions) --->

------选择Factory app,two OTA definitions

b、先添加文件

app_wifi.c

app_wifi.h

esp_https_ota.c

esp_https_ota.h

c、 修改代码

#include

#include "freertos/FreeRTOS.h"

#include "freertos/task.h"

#include "esp_system.h"

#include "esp_spi_flash.h"

#include "nvs_flash.h"

#include "app_wifi.h"

#include "esp_log.h"

#include "esp_http_client.h"

#include "esp_https_ota.h"

static const char *TAG = "MY_OTA";

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("%.*s", evt->data_len, (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;

}

static void http_test_task(void *pvParameters)

{

esp_http_client_config_t config =

{

//.url = "http://192.168.20.96:8070/get/5FD8.bin",

.url = "http://192.168.20.96:8070/get/hello-world.bin",

.event_handler = _http_event_handler,

};

esp_err_t ret = esp_https_ota(&config);

if (ret == ESP_OK) {

esp_restart();

} else {

ESP_LOGE(TAG, "Firmware Upgrades Failed:%d\n",ret);

}

while (1) {

vTaskDelay(1000 / portTICK_PERIOD_MS);

}

}

void app_main()

{

printf("Hello world!\n");

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();

ESP_LOGI(TAG, "1------------------>Connected to AP, begin http example\n");

app_wifi_wait_connected();

ESP_LOGI(TAG, "2------------------>Connected to AP, begin http example\n");

xTaskCreate(&http_test_task, "http_test_task", 8192, NULL, 5, NULL);

while(1)

{

vTaskDelay(1000 / portTICK_PERIOD_MS);

}

printf("Restarting now.\n");

fflush(stdout);

esp_restart();

}

d、修改esp_https_ota.c文件中函数

esp_err_t esp_https_ota(constesp_http_client_config_t *config),将几条语句屏蔽。

/*

if (!config->cert_pem)

{

ESP_LOGE(TAG, "Server certificate not found in esp_http_client config");

return ESP_FAIL;

}

*/

3、 测试

a、make erase_flash flash monitor

image.png

可以看到已经开始在运行hello-world.bin的例子。

image.png

c语言空中升级协议,esp32 http空中升级相关推荐

  1. c语言空中升级协议,BLE的空中升级(OTA)

    BLE的OTA可以用来更新固件程序.本文以BlueNRG-1芯片为例,分析OTA实现方案细节. 1. 架构 一个OTA方案至少包括三个部分: 程序类型 描述 当前用户程序 当前正在运行的固件程序 新版 ...

  2. 图文手把手教程--ESP32 OTA空中升级(阿里云物联网平台)

    本文内容 1)使用ota_example_mqtt例程,通过阿里云物联网平台,进行OTA升级. 2)将例程编译成两个版本,版本1.0.0下载至ESP32开发板,版本2.0.0上传至阿里云物联网平台. ...

  3. 图文手把手教程--ESP32 OTA空中升级(VSCODE+IDF)

    本文内容 1)使用hello_world例程,编译生成hello_world.bin文件,并且开启HTTP本地服务器. 2)使用simple_ota_example例程,通过HTTP服务器访问hell ...

  4. aptos中文版白皮书-前Facebook团队打造明星公链,三个优势:Move语言、Move虚拟机、合约可升级

    摘要 区块链作为一种新的互联网基础设施的崛起,导致开发者以快速增长的速度部署了数万个去中心化的应用程序.不幸的是,由于频繁的中断.高成本.低吞吐量限制和许多安全问题,区块链的使用还不普遍.为了在web ...

  5. OC语言Block和协议

    OC语言Block和协议 分类: OC基础2014-10-07 09:24 162人阅读 评论(0) 收藏 举报 OC Block OC协议 OC语言BLOCK和协议 一.BOLCK (一)简介  B ...

  6. c语言编写modbus程序,C语言编写modbus协议

    <C语言编写modbus协议>由会员分享,可在线阅读,更多相关<C语言编写modbus协议(23页珍藏版)>请在人人文库网上搜索. 1.include / 字地址 0 - 25 ...

  7. 从入门到入土:基于C语言采用UDP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统|代码展示

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  8. 从入门到入土:基于C语言采用TCP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  9. 从入门到入土:基于C语言采用TCP协议实现通信功能的程序(仅有代码)

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

最新文章

  1. Hyperbola(双曲线)
  2. 3 Curator框架实现分布式锁
  3. Photoshop显示RGB值问题
  4. 35. 搜索插入位置011(二分查找)
  5. many to many mysql_mysql “Too many connections” 解决办法
  6. 苹果cms主题模板M3.1版本 苹果CMSv10自适应主题
  7. 大牛直播SDK-Windows RTMP/RTSP/本地FLV播放器使用说明...
  8. Vm虚拟机Deepin安装教程---kalrry
  9. 理解直推式学习和归纳式学习
  10. 最新 9个免费建站空间 网站均免备案
  11. linux下如何模拟按键输入和模拟鼠标
  12. 解决Windows因更新导致C盘容量急剧减少
  13. js大数值单位转换千、万、亿单位,复制即可用
  14. 《Objective-C高级编程 iOS与OS X多线程和内存管理》读书笔记
  15. freeRTOS — 软件定时器的使用
  16. Wolfram 数学习题生成器——AI技术帮你爽到飞
  17. 超级计算/先进计算的十大用途
  18. 使用js制作一个3d模型
  19. noteexpress 笔记导出_礼拜笔记下载V1.0.6-礼拜笔记安卓版下载
  20. appserv安装php,AppServ 2.5.10下载

热门文章

  1. opc服务器自动更新,ZOPC Server(OPC服务器软件)
  2. linux运shell 出现commond vim_有了这个神器,再也不怕shell写得不对了
  3. @Autowired注解与@resource注解的区别(十分详细)
  4. Linux之scp命令实现远程服务器的文件拷贝
  5. linux ping IP地址与telnet 测试IP端口
  6. linux系统中怎么驱动U盘
  7. 斐波拉契数列python123_python计算机二级题目分类汇总
  8. postgresql 参数替换 游标_postgresql动态游标使用案例
  9. android wifi动画显示,android动态配置Wifi信息
  10. react骨架屏自动生成_用纯 DOM 的方式结合 Puppeteer 自动生成网页骨架屏