- 一、 概述
- 二、安装VSCode
- 2.1 安装依赖环境
- 2.2 获取 ESP-IDF
- 2.3 安装Espressif IDF插件
- 2.3.1 查看python版本
- 2.3.2 安装pip
- 2.3.3 安装python 3.8
- 2.3.5 卸载python
- 2.3.6 更换为ubuntu22.04
- 三、创建工程
- 四、编译下载程序
- 下载失败
- 1. 设备连接到虚拟机
- 2. 设置目标板
- 3. 添加用户到Dialout组
- 4. 手动进入下载模式
- 五、查看程序运行
这篇笔记本来不应该出现的。只是windows加密环境下开发,会有编译偶尔失败等不确定问题。所以尝试下linux下搭建开发环境。
基于博客VirtualBox 6.1安装Ubuntu16.04创建的ubuntu虚拟机进行。
2022.06.13补充,最好使用ubuntu20.04,一路安装会很顺利,能够避免很多麻烦。
二、安装VSCode 2.1 安装依赖环境在ESP32的官方文档快速入门 - 安装准备中选择Linux,也可以直接点击进入:
会给出Linux 平台工具链的标准设置:
在ubuntu中打开终端,安装依赖环境:
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-02.2 获取 ESP-IDF
mkdir -p ~/esp cd ~/esp git clone -b v4.4.1 --recursive https://github.com/espressif/esp-idf.git
注:遇到错误“fatal: unable to access ‘https://github.com/espressif/esp-idf.git/’: gnutls_handshake() failed: The TLS connection was non-properly terminated.”,修改为http仍然无效。重启虚拟机后,可开始克隆。
我这里克隆到最后,会提示有一个子模块无法克隆。重新克隆,仍然会有一个子模块失败。
我删除了已克隆的文件,到VSCode使用插件直接装:
rm -rf esp-idf/2.3 安装Espressif IDF插件
VSCode安装,在之前的一篇笔记中已经写过(点击进入),笔记中的2.1节和2.2节即可。安装完搜索插件espressif,点击安装。之后使用快捷键Ctrl+Shift+P打开命令面板,输入ESP-IDF: Config,配置插件:
上面克隆失败了,直接选择第一个:
设置如下:
等待下载。我这里最终仍然失败了:
SyntaxError: future feature annotations is not defined。SyntaxError:未定义未来的功能注释。应该是python版本太低了。
查看系统的python版本:
默认的是2.7.12,修改默认为python3:
参考链接:添加链接描述
sudo add-apt-repository ppa:jonathonf/python-3.8 sudo apt-get update sudo apt-get install python3.8
修改python默认为3.8:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2
参考链接:添加链接描述
继续安装ESP-IDF,显示:
测试pip
添加链接描述、添加链接描述都是改名称,测试并不能解决问题。
sudo cp apt_inst.cpython-35m-x86_64-linux-gnu.so apt_inst.cpython-38m-x86_64-linux-gnu.so sudo cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.cpython-38m-x86_64-linux-gnu.so sudo cp brlapi.cpython-35m-x86_64-linux-gnu.so brlapi.cpython-38m-x86_64-linux-gnu.so sudo cp _cffi_backend.cpython-35m-x86_64-linux-gnu.so _cffi_backend.cpython-38m-x86_64-linux-gnu.so sudo cp cups.cpython-35m-x86_64-linux-gnu.so cups.cpython-38m-x86_64-linux-gnu.so sudo cp cupsext.cpython-35m-x86_64-linux-gnu.so cupsext.cpython-38m-x86_64-linux-gnu.so sudo cp _dbus_bindings.cpython-35m-x86_64-linux-gnu.so _dbus_bindings.cpython-38m-x86_64-linux-gnu.so sudo cp _dbus_glib_bindings.cpython-35m-x86_64-linux-gnu.so _dbus_glib_bindings.cpython-38m-x86_64-linux-gnu.so sudo cp hpmudext.cpython-35m-x86_64-linux-gnu.so hpmudext.cpython-38m-x86_64-linux-gnu.so sudo cp pcardext.cpython-35m-x86_64-linux-gnu.so pcardext.cpython-38m-x86_64-linux-gnu.so sudo cp pycurl.cpython-35m-x86_64-linux-gnu.so pycurl.cpython-38m-x86_64-linux-gnu.so sudo cp scanext.cpython-35m-x86_64-linux-gnu.so scanext.cpython-38m-x86_64-linux-gnu.so sudo cp _yaml.cpython-35m-x86_64-linux-gnu.so _yaml.cpython-38m-x86_64-linux-gnu.so
sudo rm apt_inst.cpython-38m-x86_64-linux-gnu.so sudo rm apt_pkg.cpython-38m-x86_64-linux-gnu.so sudo rm brlapi.cpython-38m-x86_64-linux-gnu.so sudo rm _cffi_backend.cpython-38m-x86_64-linux-gnu.so sudo rm cups.cpython-38m-x86_64-linux-gnu.so sudo rm cupsext.cpython-38m-x86_64-linux-gnu.so sudo rm _dbus_bindings.cpython-38m-x86_64-linux-gnu.so sudo rm _dbus_glib_bindings.cpython-38m-x86_64-linux-gnu.so sudo rm hpmudext.cpython-38m-x86_64-linux-gnu.so sudo rm pcardext.cpython-38m-x86_64-linux-gnu.so sudo rm pycurl.cpython-38m-x86_64-linux-gnu.so sudo rm scanext.cpython-38m-x86_64-linux-gnu.so sudo rm _yaml.cpython-38m-x86_64-linux-gnu.so2.3.5 卸载python
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2 sudo apt-get remove python3.8 # 卸载python3.8 sudo apt-get remove --auto-remove python3.8 # 卸载python3.8及其依赖2.3.6 更换为ubuntu22.04
使用最新的ubuntu系统,默认的python已经是3.10,这样就避免了升级python的问题。直接安装成功:
VSCode是以文件夹为工作区的,可以先创建一个esp32_pro文件夹,后续工程都放在这个目录下。VSCode打开esp32_pro文件夹:
使用快捷键Ctrl+Shift+P打开命令面板,输入ESP-IDF: Show Examples Projects :
继续选择:
选择示例工程,使用hello_world:
设置存放路径:
首次编译会比较慢 多等一会。编译完成后点击进行下载:
继续选择:
没有/dev/ttyUSB1。开发板默认连接在windows,需要切换到ubuntu虚拟机内。终端查看多了一个/dev/ttyUSB0(ubuntu22.04连接开发板无变化,重装ch341驱动无效。在ubuntu16.04可以搜索到设备,最终使用了ubuntu20.04)。修改目标串口:
继续选择:
默认是esp32,我的开发板是esp32c3:
继续选择:
重新下载,结果仍然失败:
从终端信息看是没有权限。在官方文档中有相关内容:
添加用户到Dialout组
sudo usermod -a -G dialout guanyuan
也可以参考这篇文章:添加链接描述。
继续下载,结果还是失败:
打开终端给出的解决方法链接(点击进入):
继续进入Manual Bootloader:
需要按下按钮。回到VSCode再次下载。链接过程中,按下开发板的按键,可以看到下载成功:



