[开源重卷]ESP32配网+MQTT+http OTA(两种分区),esp-idf v4.3.1

文摘   科技   2022-10-14 07:55   江苏  

点击上方“嘉友创信息科技”,选择关注,干货福利,第一时间奉上。

00
重卷的意义

  • 配网后,进入用户任务,用户任务启动MQTT

  • MQTT订阅接收OTA开始命令

  • HTTP OTA,3分区,每个分区1340KB最常用的4MB Flash

  • HTTP OTA,2分区,每个分区1984KB,适合更大的项目

01
BOOT和分区表

【这个界面是不是很熟悉,批量烧写ESP32的程序,每个程序都需要这三个bin】

  • 引导加载程序:bootloader

  • 分区设置:partitions_xxx.bin,图片是单分区不用于OTA,还有自定义和3分区常用于OTA

  • 应用程序:hello-world.bin,OTA就是更新这个bin,不改变boot和分区结构

一、引导加载程序(BOOT)

分区表前的区域都分配给了引导加载程序。

当偏移为0x8000 时,引导加载程序最大可为 0x7000字节(28K)。

如果自定义修改了引导加载程序,造成过大,可以有以下解决办法:

  • 修改引导加载程序的编译等级

  • 修改引导加载程序的log等级

  • 修改分区设置偏移 CONFIG_PARTITION_TABLE_OFFSET ,改成大于0x8000

二、创建自定义分区表

此项目没有使用默认的ota分区,使用的是自定义分区:2个或者3个App分区。

分区文件如下:

使用idf.py menuconfig可以切换区分文件

OTA是在OTA0和OTA1分区循环升级,不会破坏出厂分区。

分区文件内容如下:

02
其他介绍

03
软件流程

【先smartConfig配网,然后连MQTT服务器,手机触发OTA升级

04
关键代码

固件升级包http路径,两个固件,可以循环升级

"http://www.jiauc.com/esp32/esp32s2_ota1.bin"//版本1"http://www.jiauc.com/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.jiauc.com",        .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;

工程目录结构

05
验证

首次使用,等待smartConfig配网;

连上MQTT;

手机触发OTA(发布主题消息);


ESP32收到MQTT消息,OTA升级过程及启动

APP收到推送升级成功

06
源码下载

公众号后台回复关键词【ESP32】,发送后收到链接即可下载

谢谢关注,下期更精彩。

收藏、点赞、在看一键三连

-- END --

开源一小步
定期发布开源项目,欢迎关注!!
 最新文章