Ubuntu:ESP-IDF 开发环境配置【保姆级】

物联网开发学习笔记——目录索引

参考官网:ESP-IDF 物联网开发框架 | 乐鑫科技

ESP-IDF 是乐鑫官方推出的物联网开发框架,支持 Windows、Linux 和 macOS 操作系统。适用于 ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列 SoC。它基于 C/C++ 语言提供了一个自给自足的 SDK,方便用户在这些平台上开发通用应用程序。ESP-IDF 目前已服务支持数以亿计的物联网设备,并已开发构建了多种物联网产品,例如照明、消费电子大小家电、支付终端、工控等各类物联网设备。

一、ESP-IDF软件组件和功能

相关资源:

ESP-IDF 入门指南 | 乐鑫科技

ESP-IDF GitHub

ESP-IDF 组件管理工具

二、ESP-IDF开发环境配置

第一步:安装准备

编译 ESP-IDF 需要以下软件包

sudo apt-get install git wget flex bison gperf python3 python3-venv python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0

备注:使用 ESP-IDF 需要 CMake 3.16 或以上版本

第二步:获取 ESP-IDF

获取 ESP-IDF ,使用 git clone 命令克隆远程仓库

mkdir -p ~/esp

cd ~/esp

git clone -b v5.1 --recursive https://github.com/espressif/esp-idf.git

ESP-IDF 将下载至 ~/esp/esp-idf

请前往 ESP-IDF 版本简介,查看 ESP-IDF 不同版本的具体适用场景。

第三步:设置工具

除了 ESP-IDF 本身,您还需要为支持 ESP32 的项目安装 ESP-IDF 使用的各种工具,比如编译器、调试器、Python 包等。

cd ~/esp/esp-idf

./install.sh esp32

上述命令仅仅为 ESP32 安装所需工具。如果需要为多个目标芯片开发项目,则可以一次性指定多个目标,如下所示:

 cd ~/esp/esp-idf

./install.sh esp32,esp32s3

如果需要一次性为所有支持的目标芯片安装工具,可以运行如下命令:

cd ~/esp/esp-idf

./install.sh all

下载工具备选方案

ESP-IDF 工具安装器会下载 Github 发布版本中附带的一些工具,如果访问 Github 较为缓慢,可以设置一个环境变量,从而优先选择 Espressif 的下载服务器进行 Github 资源下载。

备注: 该设置只影响从 Github 发布版本中下载的单个工具,它并不会改变访问任何 Git 仓库的 URL。

要在安装工具时优先选择 Espressif 下载服务器,请在运行 install.sh 时使用以下命令:

cd ~/esp/esp-idf

export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"

./install.sh

自定义工具安装路径

本步骤中介绍的脚本将 ESP-IDF 所需的编译工具默认安装在用户的根目录中,即 Linux 系统中的 $HOME/.espressif 目录。您可以选择将工具安装到其他目录中,但请在运行安装脚本前,重新设置环境变量 IDF_TOOLS_PATH。注意,请确保您的用户账号已经具备了读写该路径的权限。

如果修改了 IDF_TOOLS_PATH 变量,请确保该变量在每次执行安装脚本 install.sh和导出脚本 export.sh 均保持一致。

第四步:设置环境变量

在需要运行 ESP-IDF 的终端窗口运行以下命令:

. $HOME/esp/esp-idf/export.sh

注意,命令开始的 “.” 与路径之间应有一个空格!

或者使用如下命令

source $HOME/esp/esp-idf/export.sh

经常运行 ESP-IDF,您可以为执行 export.sh 创建一个别名,具体步骤如下:

  1. 复制并粘贴以下命令到 shell 配置文件中.bashrc

    alias get_idf='. $HOME/esp/esp-idf/export.sh'
    
  2. 通过重启电脑或运行source ~/.bashrc 来刷新配置文件。

现在您可以在任何终端窗口中运行 get_idf 来设置或刷新 esp-idf 环境。

三、开始使用 ESP-IDF 

现在您已经具备了使用 ESP-IDF 的所有条件,接下来将介绍如何开始您的第一个工程。

第一步:开始创建工程

 复制一个ESP32 示例程序。您可以从 ESP-IDF 中 examples 目录下的 get-started/hello_world 工程开始。

注意:ESP-IDF 编译系统不支持 ESP-IDF 路径或其工程路径中带有空格。

将 get-started/hello_world 工程复制至您本地的 ~/esp 目录下:

cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world .

第二步:连接设备

现在,请将您的 ESP32 开发板连接到 PC,并查看开发板使用的串口。

假如您不知道如何查看开发板连接的端口号,请看备注查看开发板端口号

第三步:配置工程

请进入 hello_world 目录,设置 ESP32 为目标芯片,然后运行工程配置工具 menuconfig

cd ~/esp/hello_world
idf.py set-target esp32
idf.py menuconfig

打开一个新工程后,应首先使用 idf.py set-target esp32 设置“目标”芯片。注意,此操作将清除并初始化项目之前的编译和配置(如有)。您也可以直接将“目标”配置为环境变量(此时可跳过该步骤)。更多信息,请见 Select the Target Chip: set-target

正确操作上述步骤后,系统将显示以下菜单:

您可以通过此菜单设置项目的具体变量,包括 Wi-Fi 网络名称、密码和处理器速度等。hello_world 示例项目会以默认配置运行,因此在这一项目中,可以跳过使用 menuconfig 进行项目配置这一步骤。

第四步:编译工程

请使用以下命令,编译烧录工程:

idf.py build

运行以上命令可以编译应用程序和所有 ESP-IDF 组件,接着生成引导加载程序、分区表和应用程序二进制文件。

liuzhengliang@liuzhengliang-Y9000X:~/esp/hello_world$ idf.py build
/home/liuzhengliang/esp/esp-idf/tools/check_python_dependencies.py:12: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  import pkg_resources
Executing action: all (aliases: build)
Running ninja in directory /home/liuzhengliang/esp/hello_world/build
Executing "ninja all"...
[13/884] Generating ../../partition_table/partition-table.binPartition table binary 

...

Project build complete. To flash, run this command:
/home/liuzhengliang/.espressif/python_env/idf5.1_py3.8_env/bin/python ../esp-idf/components/esptool_py/esptool/esptool.py -p (PORT) -b 460800 --before default_reset --after hard_reset --chip esp32  write_flash --flash_mode dio --flash_size 2MB --flash_freq 40m 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x10000 build/hello_world.bin
or run 'idf.py -p (PORT) flash'

如果一切正常,编译完成后将生成 .bin 文件。

第五步:烧录到开发板

运行以下命令,将刚刚生成的二进制文件烧录至您的 ESP32 开发板:

idf.py -p PORT flash

请将 PORT 替换为 ESP32 开发板的串口名称。如我的开发板是/dev/ttyUSB0,我使用如下命令:idf.py -p /dev/ttyUSB0 flash

烧录完成后,开发板将会复位,应用程序 “hello_world” 开始运行。 

第七版:check串口监视log输出

您可以使用 idf.py -p PORT monitor 命令,监视 “hello_world” 工程的运行情况。注意,不要忘记将 PORT 替换为您的串口名称。

对照hello_world_main.c 代码,确认一下串口log打印

#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"

void app_main(void)
{
    printf("Hello world!\n");

    /* Print chip information */
    esp_chip_info_t chip_info;
    uint32_t flash_size;
    esp_chip_info(&chip_info);
    printf("This is %s chip with %d CPU core(s), %s%s%s%s, ",
           CONFIG_IDF_TARGET,
           chip_info.cores,
           (chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",
           (chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",
           (chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",
           (chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");

    unsigned major_rev = chip_info.revision / 100;
    unsigned minor_rev = chip_info.revision % 100;
    printf("silicon revision v%d.%d, ", major_rev, minor_rev);
    if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
        printf("Get flash size failed");
        return;
    }

    printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024),
           (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

    printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size());

    for (int i = 10; i >= 0; i--) {
        printf("Restarting in %d seconds...\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    printf("Restarting now.\n");
    fflush(stdout);
    esp_restart();
}

看到打印的 “Hello world!” 了。 

 您可使用快捷键 Ctrl+],退出 IDF 串口监视器。

到此,恭喜,您已完成 ESP-IDF开发环境的搭建,并可以开始ESP32的入门学习了!

备注

查看开发板端口号

1. 首先电脑和开发板使用usb数据线相连

2. 查看开发板连接的端口号

Ubuntu 20.04 LTS系统默认自动usb转串口驱动程序,使用如下命令参考端口号

ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 10月 15 15:45 /dev/ttyUSB0
 

/dev/ttyUSB0权限问题

烧写开发板可能会出现 Failed to open port /dev/ttyUSB0 错误消息。

我烧写还遇到过如下错误:

此时可以将用户添加至 Linux Dialout 组

当前登录用户应当可以通过 USB 对串口进行读写操作。在多数 Linux 版本中,您都可以通过以下命令,将用户添加到 dialout 组,从而获许读写权限:

sudo usermod -a -G dialout $USER

在 Arch Linux 中,需要通过以下命令将用户添加到 uucp 组中:

sudo usermod -a -G uucp $USER

请重新登录,确保串口读写权限生效。

临时解决方法,也可以简单给对应端口添加读写权限,但是这种方法每次插拔开发板之后,需要重新下发命令:

sudo chmod a+rw /dev/ttyUSB0

串口终端程序

 PuTTY SSH Client是一款非常好用的串口终端程序,既可用于 Windows 也可用于 Linux。

可以快速直观的设置串口参数:波特率 = 115200(需要根据程序修改),数据位 = 8,停止位 = 1,奇偶校验 = N。

物联网开发学习笔记——目录索引_liuzl_2010的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/zsyf33078/article/details/133834913