【PC电脑windows-[jetson-orin-NX]-Linux串口OTA-学习他人文章【ESP32-S2 Linux串口OTA升级】-基础样例学习+复刻】

1、概述

最近想调试一个ESP32串口相关升级,不是http的ota,但是http对自己新手而言有太大了,表示看着费劲,不知道怎么弄才好。
然后在网上看到了一篇【ESP32-S2 Linux串口OTA升级】文章,解决了自己需求吧。

2、实验环境

硬件信息:开发板 ESP32-S3-DevKitM-1(EPS32-S3-wroom-1模块)
在这里插入图片描述

其它硬件:杜邦线,两个usb-type-c连接线,USB转ttl电平模块。
软件环境:ESP-IDF 5.0 PowerShell 、vscode

3、 物品说明

ESP32对自己来说还是比较新的,最近也是刚刚接触,这里对自己使用ESP32进行简单说明。
博文链接:【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】
在这里插入图片描述

另外如果对ESP32相关型号比较感兴趣,可以去官网查看,或者找些资。
官网文档:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitm-1.html
在这里插入图片描述

4-1、参考文章-鸣谢

首先在这里感谢CSDN的博主“李法师_”和文章【ESP32-S2 Linux串口OTA升级】,开始说没有这篇文章,自己新手也不太会做,也就没有本篇文章。
文档连接:https://blog.csdn.net/maomaochong666/article/details/126646135
在这里插入图片描述

4-2、自我总结

(1)先做后理解概念
在做这个之前,看了很多资料吧,但是因为没有实际操作,没有人引导你,告诉你怎么做,很多知识,其实很难理解,不知道为啥要说这个。比如在博文说到的分区表,自己开始并不理解。这个我在官网找到原文。
文档链接:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-guides/partition-tables.html添加链接描述
在这里插入图片描述

(2)需要了解空中升级(OTA)和分区表这个概念
首先需要了解下,什么时候空中升级(ota),可以直接看官网文档,如下为截图,简单了解下。
文档链接:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-reference/system/ota.html?highlight=ota
在这里插入图片描述
自己总结来说:设备在正常运行下的时候,以某种方式(包括不限于,uart,can,http或者其它等等),进行升级固件,升级版本的功能,就叫做ota。

另外需要了解分区表,也是官网文档,如何理解呢。
自己总结来说:分区表,就是官网已经给你定义了分区方式,如果你不用ota,采用一种分区方式(内存分配方式),使用ota,就使用已经给你弄好的分区方式(内存分配方式),你不必自己麻烦分区了。直接往对应位置放就可以了。
文档链接:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-guides/partition-tables.html
在这里插入图片描述
当然你说,你自己就要特立独行,也行,可以自定义分区。

(3)理解代码,了解相关功能函数。
自己实际操作一遍后,要反过来理解相关函数,知道每个函数做了什么,为什么能实现相关功能,大致流程要心中有数。
文档链接:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-reference/system/ota.html?highlight=esp_ota_begin
在这里插入图片描述

5、本次实验说明

本次实验是使用样例博主“李法师_”的代码,当然不能完全照抄,这边自己在APP端,加入一个串口打印,所以实验分为3个部分:

  • 简单串口样例
  • 复刻他人的ota程序
  • 结合在一起的程序

(1)简单串口样例

我们需要做个简单串口程序,使用调试传进行打印程序,可以使用之前弄好的模板改,也可以重新建立一个。
具体可以看自己之前博文:【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序+VScode建立工程+usb组件添加±基础样例学习】
这里直接将代码放在下面了,不在一步步说了,直接一步到位。
代码链接:https://download.csdn.net/download/qq_22146161/88504364

如下将代码下载后,设置芯片,编译下载如下图。
在这里插入图片描述
然后进行验证,注意波特率为115200.
在这里插入图片描述

功能描述:使用ESP32的调试串口,收到信息后,发回来。

(2)复刻他人的ota程序

然后就是使用李法师代码了,
如下下载后,应该有如下两个文件夹,一个是升级文件,一个是esp32文件。
在这里插入图片描述
window下我们进入OTA相关目录。

1、Windows下操作

(1)下载点后,进入相关目录

在这里插入图片描述

(2)设置芯片

这块需要根据自己芯片来进行设置。

idf.py set-target esp32s3

在这里插入图片描述

(3)进入菜单模式,选择ota模式

这里需要设置两个部分,一个是flash,一个是ota方式
命令:

idf.py menuconfig

在这里插入图片描述

(1)flash
在这里插入图片描述

(2)ota模式
在这里插入图片描述
退出后保存

(4)编译下载然后复位

(1)编译

idf.py build

在这里插入图片描述

(2)下载:实际串口要根据自己串口更换,按住boot键,按一下rst键,然后撒开boot下载。

idf.py -p com6 flash

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)复位按下rst
如果有类似内容,就代表ESP32设置好。
以下为自己实际调试的时候,收到调试串口消息
在这里插入图片描述
以下为博主“李法师_”说明的。
在这里插入图片描述

2、Linux 下(jetson orin nx 或者 Linux 环境PC也可以)

(1)编译文件

将其中另一个文件放到Linux下,进行编译下,其实也有了,不编译也行。
在这里插入图片描述

 gcc download.c -o download2 -pthread
(2)导入升级固件

这块记得原博文提过一次,说只放一个文件。怕冲突还是有其他问题来着。
在这里插入图片描述

(3)硬件连接

这块还是要注意一下的,一旦连接有问题,就下不进去。
GPIO6和GPIO7,自己开始作为新手的时候,都不敢确实是这两个标号6和7的,在原博主(“李发师”)指点下确认下,才确定就是这两个。
(1)三根线 RX TX GND

GND --- GND
RX --- GPIO6
TX --- GPIO7

在这里插入图片描述
(2)使用串口模块连接
这块我自己没找到转换器,只能暂时借用开发板子的串口模块,但是记得好像那个大串口转换器,需要驱动的,只要是能完成转换,并被Linux 识别到就行。
在这里插入图片描述

(4)下载

下载前,要找下串口,看看Linux识别到是否,一般是如下两个设备

/dev/ttyUSB0
/dev/ttyACM0

如下图为查看设备,多了之后,很容易不知道是哪个,比如下面xxAMA0就不是。
在这里插入图片描述

命令:

./download2 /dev/ttyUSB0 app_main_ota.bin

在这里插入图片描述

3、结合在一起

然后我们将上述代码结合在一起,练习一下,如果加入代码的话,直接在app理解加,不需要在Windows下,重新下载了,但是需要在Windows下编写代码。

(1)vscode 打开代码

在这里插入图片描述

(2)编写代码功能
#include "bsp_ota.h"
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"

#define UART_PORT UART_NUM_0 //选择串口端口

void uart_task(void *pvParameters){
    
    
    uint8_t data;
    while(1){
    
    
		
		// printf("this is my——test,helloworld!",data);
		// sleep(1);
        //从串口读取输入数据
        if(uart_read_bytes(UART_PORT,&data,1,pdMS_TO_TICKS(10))>0){
    
    
            //打印读到的字符
            printf("Received:%c\n",data);
        }
    }
}

void app_main(void)
{
    
    
    UART_OTA_Init();
        // //初始化 USB的串口
    // printf("Hello,USB Serial!\n");
    // while(1){
    
    
    //     printf("output data:this is my app_usb_uart_test!\n");
    //     vTaskDelay(pdMS_TO_TICKS(1000));
    // }

    //配置串口参数
    uart_config_t uart_config={
    
    
    .baud_rate = 9600,                      /*!< UART baud rate*/
    .data_bits = UART_DATA_8_BITS,      /*!< UART byte size*/
    .parity = UART_PARITY_DISABLE,               /*!< UART parity mode*/
    .stop_bits = UART_STOP_BITS_1,         /*!< UART stop bits*/
    .flow_ctrl = UART_HW_FLOWCTRL_DISABLE    /*!< UART HW flow control mode (cts/rts)*/

    };
    uart_param_config(UART_PORT,&uart_config);
    uart_set_pin(UART_PORT,UART_PIN_NO_CHANGE,UART_PIN_NO_CHANGE,UART_PIN_NO_CHANGE,UART_PIN_NO_CHANGE);
    uart_driver_install(UART_PORT,1024,0,0,NULL,0);

    //创建串口任务
    xTaskCreate(uart_task,"uart_task",2048,NULL,10,NULL);

}

在这里插入图片描述

(3)编译

在这里插入图片描述

(4)传到Linux

windows下,将app文件转到Linux下
在这里插入图片描述
linux 下
在这里插入图片描述

(5)升级

在这里插入图片描述

(6)功能验证

在windows下验证或者Linux下验证,使用串口软件链接debug串口,如下为win环境验证。
在这里插入图片描述

7、代码连接

(1)esp串口样例
代码链接:https://download.csdn.net/download/qq_22146161/88504364
(2)参考文章“李法师_”样例代码
代码链接:https://download.csdn.net/download/qq_22146161/88504657
(3)添加功能后的代码
代码链接:https://download.csdn.net/download/qq_22146161/88504662

8、相关细节

(1)空中升级OTA相关资料

(个人见解)其实本章严格来说,不能完全算是是OTA,ota应该像它定义的那样,空中升级,ESP因为有wifi和蓝牙,所以对它而言,使用http方式,才算是。
这里展示http相关连接,有兴趣可以研究下,不在本章讲解范围。
文档链接:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-reference/system/esp_https_ota.html?highlight=ota
在这里插入图片描述

(2)OTA升级与esptool下载的区别。

无论使用你使用那种方式ota,串口也好,http也好,其实只能更新app.bin文件。而esptool下载或编译下载,意味着所以文件都可能更换,bootloader.bin,partition-table.bin和app.bin文件,以下为示意图。

在这里插入图片描述

(3)调试串口,不能更改波特率

这块还是很神奇的,记得和jetson orin 的调试串口一样一样的,我这里明明设置了9600波特率,但是实际使用时,用的是115200.
这块暂时不影响调试,应该是有地方可以改动动
或许是(注意:这块暂时不关心,就没去验证)

idf.py menuconfig

如下图,为代码部分设置波特率。

在这里插入图片描述
在这里插入图片描述

(4)硬件IO接法

这块特意请教了博主“李法师_”,他给画了示意图,当然他说的也可以换。
在这里插入图片描述

(5)超时 timeout

如下实际操作是,超时了,基本是线路插错了,没有连接上,检查GPIO6和GPIO7和GND。
在这里插入图片描述

(5)代码报错

应该是版本更新,有些函数明发了变化,需要改下。
在这里插入图片描述
下边也告诉你如何更改了。

在这里插入图片描述

(6)问题:是否可以下载其它工程的app.bin

这个问题也问了原博主,答案是否定的,因为其它app.bin,不带升级程序,所以不能进行相关升级。

9、总结

想着快点写完,一写,加上重新做实验,花了自己3个小时。

猜你喜欢

转载自blog.csdn.net/qq_22146161/article/details/134222320
今日推荐