ESP32开发:ubuntu22.04 下esp-idf开发环境搭建
ubuntu22.04 下esp-idf开发环境搭建.
ubuntu22.04 下 esp-idf 开发环境搭建
1.安装编译 ESP-IDF 需要以下软件包
编译 ESP-IDF 需要以下软件包。请根据使用的 Linux 发行版本,选择合适的安装命令。
-
Ubuntu 和 Debian:
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
2.获取 ESP-IDF
在home目录下新建 esp 文件夹.
mkdir ~/esp
为了安装多个版本:
在esp 目录下载指定版本的esp-idf sdk.
cd ~/esp
git clone -b v5.4.2 --recursive https://github.com/espressif/esp-idf.git
等待下载解压结束,把esp-idf 重命名为 esp-idf-v5.4.2,进入 esp-idf-v5.4.2 。
3.设置工具
进入 esp-idf-v5.4.2 ,运行安装脚本:.install.sh
cd esp-idf-v5.4.2
如果只需要为esp32-s3、esp32设置所需工具,可以指定:
. ./install.sh esp32s3,esp32
如果需要一次性为所有支持的目标芯片安装工具,可以运行如下命令:
. ./install.sh all
下载工具备选方案
ESP-IDF 工具安装器会下载 Github 发布版本中附带的一些工具,如果访问 Github 较为缓慢,可以设置一个环境变量,从而优先选择 Espressif 的下载服务器进行 Github 资源下载。
⚠️ 该设置只影响从 Github 发布版本中下载的单个工具,它并不会改变访问任何 Git 仓库的 URL。
要在安装工具时优先选择 Espressif 下载服务器,请在运行 install.sh 时使用以下命令:
cd ~/esp/esp-idf-v5.4.2
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh
⭐️推荐国内用户使用国内的下载服务器,以加快下载速度。
cd ~/esp/esp-idf-v5.4.2
export IDF_GITHUB_ASSETS="dl.espressif.cn/github_assets"
./install.sh
4.设置环境变量
工具安装完成之后,尚未添加至 PATH 环境变量,无法通过终端中使用这些工具。因此,必须设置一些环境变量。
需要运行 ESP-IDF 的终端窗口运行以下命令:
. $HOME/esp/esp-idf-v5.4.2/export.sh
如果需要经常运行 ESP-IDF,可以为执行 export.sh 创建一个别名,具体步骤如下:
-
复制并粘贴以下命令到 shell 配置文件中(
.profile、.bashrc、.zprofile等)alias get_idf='. $HOME/esp/esp-idf/export.sh' -
通过重启终端窗口或运行
source [path to profile],如source ~/.bashrc来刷新配置文件。
现在可以在任何终端窗口中运行 get_idf 来设置或刷新 ESP-IDF 环境。
不建议直接将 export.sh 添加到 shell 的配置文件。这样做会导致在每个终端会话中都激活 IDF 虚拟环境(包括无需使用 ESP-IDF 的会话)。这违背了使用虚拟环境的目的,还可能影响其他软件的使用。
按照上述方法,当安装了多个版本的esp-idf 之后,也可以通过使用添加别名来区分不同的版本。
示例如下:
在终端中,输入get_idf_v53 即可使用V5.3.3版本的esp-idf:
5.编译工程并烧录
配置工程
设置目标芯片,然后配置项目,指令如下:
idf.py set-target esp32s3
idf.py menuconfig
编译工程
打开一个测试工程,编译工程需要输入指令:
idf.py build
运行以上命令可以编译应用程序和所有 ESP-IDF 组件,接着生成引导加载程序、分区表和应用程序二进制文件,编译完成后将生成 .bin 文件。
把串口插入到ubuntu中,找到对应的串口的标识,Linux 操作系统: 以 /dev/tty 开头。
Linux中两种常见的 USB 转串口设备标识:
-
ttyUSB*:常见于 CH340、CP2102 等 USB 转串口芯片。 -
ttyACM*:常见于 CDC-ACM 类设备(比如 Arduino、STM32 的虚拟串口)。
使用如下指令可以查看ubuntu下的可用的串口设备文件:
cd /dev
ls ttyUSB*
ls ttyACM*
也可以比较插入设备前后的变化,可以快速找到当前的设备标识符:
插入设备前,运行:
ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null
记下已有的串口设备。
插入 USB 串口设备后,再运行同样的命令。
ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null
新出现的设备就是你要找的,比如 /dev/ttyUSB0 或 /dev/ttyACM0。
烧录固件到设备
烧录之前,需要获取串口设备文件的读写权限:
sudo chmod a+rw /dev/ttyACM0
或者
sudo chmod 666 /dev/ttyACM0
运行以下命令,将刚刚生成的二进制文件烧录至芯片:
idf.py -p PORT flash
将 PORT 替换为自己的串口名称,上面的设备对应指令则为:
idf.py -p /dev/ttyACM0 flash
6.其他指令
监视输出
可以使用 idf.py -p PORT monitor 命令,监视工程的运行情况
idf.py -p PORT monitor
擦除 flash
ESP-IDF 支持擦除 flash。请运行以下命令,擦除整个 flash:
idf.py -p PORT erase-flash
若存在需要擦除的 OTA 数据,请运行以下命令:
idf.py -p PORT erase-otadata
擦除 flash 需要一段时间,在擦除过程中,请勿断开设备连接。
清除编译
清除之前的编译:
idf.py fullclean
7.Ubuntu中串口权限设置
前面说到,可以通过chmod 来设置串口的读写权限,但是这种方法每次插拔之后,又要重新设置,很麻烦。最好就是把该串口的权限设置为永久,可以使用下面的方法。
查看串口文件权限
ls -l 是 Linux/Unix 系统中 列出目录详细信息 的常用命令。
它会显示当前目录(或指定路径)下文件/文件夹的详细列表,每一行都包含多个字段,格式大致如下:
-rw-r--r-- 1 user group 4096 Sep 11 16:30 filename.txt
下面逐列解释输出内容:
| 字段位置 | 示例值 | 含义说明 |
|---|---|---|
| 1. 文件类型与权限 | -rw-r--r-- |
第1字符:文件类型 - 普通文件、d 目录、l 符号链接、b 块设备、c 字符设备、p 管道、s 套接字。 后9字符:权限,3组,每组r读w写x执行;顺序依次是 所有者/用户、所属组、其他人。 |
| 2. 硬链接数 | 1 |
指向该文件的硬链接数量(目录表示其包含的子目录项数量+1)。 |
| 3. 所有者 | user |
文件拥有者的用户名。 |
| 4. 组 | group |
文件所属的用户组。 |
| 5. 大小 | 4096 |
文件大小(字节),目录通常显示为 4096(表示目录项占用的字节数)。 |
| 6. 最后修改时间 | Sep 11 16:30 |
最近一次修改的日期和时间(年份会根据时间远近调整显示)。 |
| 7. 文件名 | filename.txt |
文件或目录名称;若是符号链接,会显示为 name -> target。 |
示例
$ ls -l
drwxr-xr-x 2 nick staff 4096 Sep 11 15:10 Documents
-rw-r--r-- 1 nick staff 1234 Sep 11 16:00 notes.txt
lrwxrwxrwx 1 nick staff 12 Sep 11 14:50 link -> /etc/config
解释:
Documents:目录(d),nick拥有,大小4096字节。notes.txt:普通文件(-),大小1234字节。link:符号链接(l),指向/etc/config。
串口文件详情示例
结合上面的内容,知道 ttyACM0 属于 dialout 用户组。
我们只需将自己所在的用户加入该组,即可拥有串口的读写权限。
将当前用户加入指定组
sudo usermod -a -G dialout $USER
usermod -a -G 的修改立即写入系统配置,
但要 重新登录或启动新的会话 才能在 groups 命令中看到新的组。
重启前:
重启后,显示正常:
文档参考链接:
Linux 和 macOS 平台工具链的标准设置
更多推荐



所有评论(0)