在Clion使用WSL的ESP-IDF开发

实战派 ESP32-S3,双模无线开发板

ESP32-S3 原生支持 ESP-IDF,WiFi + 蓝牙一次搞定

安装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。

  1. 用clion打开一个example,如helloworld。找不到的去问ai。
  2. 关掉clion那些乱七八糟的弹窗,先不要管cmake各种报错。
  3. 进入 File -> Settings -> Build, Execution, Deployment -> Toolchains。
  4. 点击 mingw上面的"+",选择 WSL。你会发现多了一只小企鹅,把小企鹅顶到最上面,设为default。要是有缺东西的话,自己去ai一下怎么装,有装一般都能被clion找到。
    在这里插入图片描述
  5. 添加环境,点击蓝色的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

  1. 在Ubuntu终端输入:nano ~/.bashrc
  2. 把这堆代码复制到文件最底部,然后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
}
  1. 关键一步:修改完并保存退出后,配置不会立即生效。你需要运行以下命令让系统重新加载它:source ~/.bashrc
  2. 最后,你可以在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。

实战派 ESP32-S3,双模无线开发板

ESP32-S3 原生支持 ESP-IDF,WiFi + 蓝牙一次搞定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值