【这个界面是不是很熟悉,批量烧写ESP32的程序,每个程序都需要这三个bin】
一、引导加载程序(BOOT) 分区表前的区域都分配给了引导加载程序。 当偏移为0x8000 时,引导加载程序最大可为 0x7000字节(28K)。 如果自定义修改了引导加载程序,造成过大,可以有以下解决办法:
二、创建自定义分区表 此项目没有使用默认的ota分区,使用的是自定义分区:2个或者3个App分区。 分区文件如下: 使用idf.py menuconfig可以切换区分文件 OTA是在OTA0和OTA1分区循环升级,不会破坏出厂分区。 分区文件内容如下:
【先smartConfig配网,然后连MQTT服务器,手机触发OTA升级】 固件升级包http路径,两个固件,可以循环升级 'http://www./esp32/esp32s2_ota1.bin'//版本1 'http://www./esp32/esp32s2_ota2.bin'//版本2 OTA操作flash接口 //开始OTA保存(先擦除),放在可用的OTA分区err = esp_ota_begin(update_partition, OTA_WITH_SEQUENTIAL_WRITES, &update_handle);//保存OTA数据包err = esp_ota_write( update_handle, (const void *)ota_write_data, data_read);//OTA保存结束err = esp_ota_end(update_handle); MQTT初始化:域名、端口、账号、密码 static void mqtt_app_start(void) { esp_mqtt_client_config_t mqtt_cfg = { .host = 'www.', .port = 1883, .username = 'admin', .password = '123456', }; esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg); esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client); esp_mqtt_client_start(client); } HTTP操作接口 client = esp_http_client_init(&config);//打开err = esp_http_client_open(client, 0);//循环读取http数据int data_read = esp_http_client_read(client, ota_write_data, BUFFSIZE);//检查是否读取了http响应中的整个数据而没有任何错误if (esp_http_client_is_complete_data_received(client) != true)//关闭esp_http_client_close(client);esp_http_client_cleanup(client); MQTT订阅主题'/topic/qos0' msg_id = esp_mqtt_client_subscribe(client, '/topic/qos0', 0); 手机控制ESP32 OTA升级 case MQTT_EVENT_DATA://接收到已定阅主题数据 ESP_LOGI(TAG, 'MQTT_EVENT_DATA'); printf('TOPIC=%.*s\r\n', event->topic_len, event->topic); printf('DATA=%.*s\r\n', event->data_len, event->data); //启动ota if(strstr(event->data,'ota')!=NULL) { ota_start(event->data,event->data_len); }break; 工程目录结构 首次使用,等待smartConfig配网; 连上MQTT; 手机触发OTA(发布主题消息); ESP32收到MQTT消息,OTA升级过程及启动 APP收到推送升级成功 |
|