一、esp32 OTA的配置
我是在esp-idf\examples\system\ota\simple_ota_example例子上面修改的
进入simple_ota_example文件夹里面make menuconfig 选择partition Table ->Factory app,two OTA definitions
选择好之后保存退出。并且编译(我之前用的是esp8266不带系统的,做OTA的时候要生成2个文件,esp32这里生成的是一个文件。已经合并了,并且函数接口已经官方写好,使用非常简单)
二、程序修改
1、在例子里面 修改URL 为自己本机http服务器的地址
void simple_ota_example_task(void *pvParameter)
{
ESP_LOGI(TAG, "Starting OTA example");
printf("-----------等待wifi连接成功-----------\n");
app_wifi_wait_connected();
printf("-----------wifi连接成功-----------\n");
esp_http_client_config_t config = {
.url = "http://192.168.43.95:8070/get/simple_ota.bin",
//.cert_pem = (char *)server_cert_pem_start,
.event_handler = _http_event_handler,
};
esp_err_t ret = esp_https_ota(&config);//调用这个自动完成更新
if (ret == ESP_OK) {
printf("------------------------success-------------------------------------\n");
esp_restart();
} else {
printf("------------------------error:%x-------------------------------------\n",ret);
ESP_LOGE(TAG, "Firmware Upgrades Failed");
}
while (1) {
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
2、注释掉esp_https_ota_begin的如下代码(不同版本可能注释掉的不一样,我之前用的是3.1.3注释的不是这里)
/* if (!ota_config->http_config->cert_pem) {
ESP_LOGE(TAG, "Server certificate not found in esp_http_client config");
*handle = NULL;
return ESP_ERR_INVALID_ARG;
}*/
这个是要配置服务器证书,我们用不到,在上面的的配置里面已经注释掉了 //.cert_pem = (char *)server_cert_pem_start,
三、启动HTTP 服务器
1、首先编译刚才配置好的工程,然后再工程里面会多出一个build文件夹,在CMD里面进入到build文件夹,在build里面新建一个文件夹get,然后把生存的simple_ota.bin文件拷贝进去,如下图 esp32生成的只有一个文件 ,他们文件合并了。
2、启动http服务
首先启动http服务一定要到build文件夹的路径,否则程序更新的时候回产生esp_ota_write failed! err=0x5379错误,如下图启动http服务
启动http服务之后就可以在浏览器上面打开,打开服务器运行后,构建目录的内容可以通过网址 http://localhost:8070/ 浏览到。
四、程序下载
程序的下载根据编译的结果下载四个文件就行,如下图
五、运行结果
从这里可以看到,更新是成功的,我在程序的开始还加了一个
const esp_partition_t *running = esp_ota_get_running_partition();
// Display the running partition
ESP_LOGI(TAG, "\n\nRunning partition: %s\n", running->label);
然后再串口上面可以看到 不断的更新,打印出来的信息是 Running partition: ota_0 和Running partition: ota_1 说明一直在不停的自动更新。