文章目录
安装Clion和WSL2
默认大家都会了,不会的请上jetbrain的官网和微软官网自行查看。我的linux distribution是ubuntu。
在WSL配置必要工具
默认大家对linux的文件系统和命令行有一定的了解。
安装基础依赖软件包
更新 Ubuntu 并安装 ESP-IDF 编译所需的prerequisites(工具链依赖)。打开 WSL 终端执行:
sudo apt-get update
sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-serial
安装toolchain:esp-idf
推荐创建一个专用的目录,并从 GitHub 克隆仓库。建议使用 --recursive 参数以包含所有子模块:
mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
执行安装脚本
在 WSL 终端中执行:
cd ~/esp/esp-idf
./install.sh esp32s3 # 如果你只想支持 S3 芯片,这样可以节省空间
# 或者 ./install.sh all 安装所有芯片支持
设置环境变量
. ./export.sh
在Clion配置WSL
因为我们用的是wsl的工具链,所以必须在clion配置wsl。
- 用clion打开一个example,如helloworld。找不到的去问ai。
- 关掉clion那些乱七八糟的弹窗,先不要管cmake各种报错。
- 进入 File -> Settings -> Build, Execution, Deployment -> Toolchains。
- 点击 mingw上面的"+",选择 WSL。你会发现多了一只小企鹅,把小企鹅顶到最上面,设为default。要是有缺东西的话,自己去ai一下怎么装,有装一般都能被clion找到。

- 添加环境,点击蓝色的add environment,选择environment file,这个环境文件和刚才设置环境用的文件必须同一个。
注意:检查一下所有东西都是wsl里面的。

在Clion配置cmake
按图操作一下

toolchain要选wsl的。
generator是ninja。
cmake option,我这个版本刚好能用,但是不要照搬,target选你自己的芯片型号。-G是指定生成器,-DCMAKE_MAKE_PROGRAM=ninja叫cmake去环境变量里面找。
搭桥连接wsl和电脑的usb
wsl一开始不会自动获取usb的文件。需要我们操作一下,搭个桥,让wsl从windows拿一点权限。这个桥就是usbipd。
在powershell安装usbipd
以管理员身份运行powershell。
输入命令:
winget install usbipd
!!!重启powershell才会生效。
用usbipd分配usb总线(用powershell)
第一步:列出所有 USB 设备。把esp32连接到电脑上(我用的是esp32s3的com接口),在powershell用下面这条命令查看esp32设备的busid(总线id)。正常来说第一次连接时,看到的是not shared。
usbipd list
第二步:绑定设备 (仅首次需要)。绑定该总线id
# 将 <BUSID> 替换为 list 命令中查看到的 ID(例如 2-1)
usbipd bind --busid <BUSID>
可以选择再list一下,看到该设备显示的是shared,如图。

第三步:连接设备到 WSL
usbipd attach --wsl --busid <BUSID>
PLUS:
由于每次连接esp32,bus id可能会发生变化。所以我们需要用VID:PID(就是中间那八位)追踪设备。每次连接后,在powershell用下面这个命令:
usbipd attach --wsl --busid ((usbipd list | Select-String "1a86:55d3").ToString().Split()[0]).Trim()
这样就不需要每次手动改busid了。
在WSL验证usb通信搭桥成功
进入ubuntu。
可以用命令lsusb查看当前wsl可以访问的usb。如果没有这个命令,去apt install一下usbutils。

图片最下面显示的文件就是usb的文件了。
使用esp-idf烧写hello world
esp-idf是高度自动化的,两句命令就可以解决。
在Clion的terminal运行这两句命令。
. $HOME/esp32/esp-idf/export.sh
idf.py -p /dev/ttyACM0 flash monitor
第一句是配置环境变量。执行后,它会将 ESP-IDF 必要的路径添加到你的 PATH 变量中,并设置一些环境变量(如 IDF_PATH)。
注意: 每次打开一个新的终端窗口打算编译 ESP32 程序时,都必须先运行这一句,否则系统会提示找不到 idf.py 命令。
第二句是将程序写入芯片并开启串口监视器,都是英语,相毕都看得懂。
PLUS:一句命令编译+烧录
使用linux的配置文件.bashrc
- 在Ubuntu终端输入:nano ~/.bashrc
- 把这堆代码复制到文件最底部,然后ctrl+O,enter,ctrl+X。
flash-esp() {
# 自动加载环境变量 (如果还没加载)
if [ -z "$IDF_PATH" ]; then
. $HOME/esp32/esp-idf/export.sh
fi
# 执行烧录和监控
# 注意:如果设备名不是 ttyACM0,请根据实际情况修改(如 ttyUSB0)
idf.py -p /dev/ttyACM0 flash monitor
}
- 关键一步:修改完并保存退出后,配置不会立即生效。你需要运行以下命令让系统重新加载它:source ~/.bashrc
- 最后,你可以在clion或者wsl打开工程文件夹,输入flash-esp。

成功了的话,监视器是这样的。
如果想要停止monitor,按下ctrl+]。
如果报错
如果红字报错说:芯片类型不符合,一般是前面配置cmake的时候没弄好target。可以回到 cmake config那一步。
或者直接在clion的terminal:idf.py set-target esp32s3
Appendix
1.从clion打开工程
不要直接打开原来路径下的example,否则clion会加载整个idf,卡死。
正确的做法是用wsl把工程文件复制到另一个地方,用clion打开。
笔记的作者也是人,要是哪里漏了,麻烦提醒一下,别被我坑到了。更高级的操作我也还在学,请多多指教。
参考文献:
https://www.instructables.com/ESP32-Development-on-Windows-Subsystem-for-Linux/
https://cavemancave.github.io/posts/2022-03-26-esp32_development_on_wsl2/
一些意见来自AI。

625

被折叠的 条评论
为什么被折叠?



