VMWare Ubuntu22.04虚拟机+VSCode ESP-IDF插件搭建ESP32开发环境
在Unbuntu22.04.2LTS虚拟机上使用VSCode插件Espressif Extension搭建ESP32开发环境,编译并烧录hello_world项目,该教程同样适用于Unbuntu22.04.2LTS主机
目录
1 使用VMware搭建Ubuntu22.04虚拟机并下载VSCode
2 利用Espressif IDF插件搭建ESP32开发环境
0 前言
本来在自己的笔记本电脑上装了双系统,一边学习Linux相关的知识,一边在Win系统办公学习(+电竞),然而双系统来回切换实在麻烦,遂将电脑上的Ubuntu删了,转而使用虚拟机。正巧又在折腾ESP32,遂尝试在Ubuntu虚拟机上搭建ESP32开发环境,本以为轻轻松松,没想到一路踩坑踩坑踩坑……一点点解决问题,终于搞定,成功编译HelloWorld示例并烧录。
1 使用VMware搭建Ubuntu22.04虚拟机并下载VSCode
配置环境介绍与预先准备:
- 主机操作系统Windows 10 Home, 64-bit (Build 19045.32080) 10.0.19045
- 虚拟机软件VMware Workstation 17 Pro_17.0.0 build-20800274
- 虚拟机操作系统镜像ubuntu-22.04.2-desktop-amd64.iso,即Ubuntu 22.04.2 LTS
1.1 安装虚拟机软件VMware
以下是软件下载链接(包含教程)。
VMware Workstation Pro 17.0安装教程附安装包下载 (qq.com)https://mp.weixin.qq.com/s/fDtsTE9vgNHYhl3Fp4wPFw
1.2 下载虚拟机操作系统镜像
以下是链接,下载的是一个.iso文件,全名应该是ubuntu-22.04.2-desktop-amd64.iso,需要记住这个文件的位置,在“1.3 使用VMware搭建Ubuntu虚拟机”中需要使用。
下载Ubuntu桌面系统 | Ubuntuhttps://cn.ubuntu.com/download/desktop
1.3 使用VMware创建虚拟机
打开VMware Workstation Pro,点击左上角“文件(F)-新建虚拟机(N)...”或者快捷键“Ctrl+N”打开新建虚拟机向导,如下图所示,采用“典型(推荐)(T)”类型的配置即可,点击下一步。
会出现下图所示的界面,点击“浏览(R)”选择“1.2 下载虚拟机操作系统镜像”中下载的.iso文件,确保红框中为你下载的.iso文件路径,然后点击下一步。
会出现如下界面,自定义你的全名,用户名以及密码,随便写也没事,在之后安装Ubuntu系统的时候还会再填。但只有全部填完后,才可以点击下一步。
会出现如下界面,首先定义虚拟机名称,VMware会新建一个以该名称命名的文件夹,用来存储虚拟机相关的文件;随后点击“浏览(R)...”选择虚拟机安装的位置,我是专门分出一个盘来装虚拟机,方便管理,不分盘管理也是无所谓的。
会出现如下界面,需要先给虚拟机分配磁盘大小,我是分配了40GB,当然这个也是看自己需求;然后下面这个选择也是视自己需求决定,一般选择“将虚拟磁盘拆分成多个文件(M)”即可。全部完成后点击下一步。
会出现如下界面,根据自己主机的情况可以自定义以下硬件。
考虑到自己电脑的性能,我设置了2个处理器,每个处理器4个内核,并且设置了虚拟化引擎(这个取决于主机支不支持),如下图所示,没有其他需求的话关闭这个界面再点“完成”即可完成虚拟机的配置。
启动虚拟机后会进入Ubuntu系统的安装进程,首先是键盘布局的选择,默认是English(US)-English(US),自己改成Chinese-Chinese就行,不改也可以,完成后点击Continue进入下一步。
出现如下界面,第一个问题是询问要不要安装一些必要的应用(浏览器,办公软件等),Other options则是询问“是否在安装Ubuntu系统时下载更新”以及“是否下载图形化界面以及Wi-Fi硬件的第三方软件”,默认即可,点击Continue。
然后会出现如下界面,默认即可,如果想要自己分配空间,则选择Something else,然后参照其他教程划分分区。如果选择默认,点击Install Now即可。
在弹出的界面中点击Continue。
随后的地区选择中选择Shanghai,然后点击Continue。
弹出如下界面,设置名称,用户名和密码,用来登录Ubuntu系统。根据自己需求选择自动登录还是需要密码才能登录。
Your name会显示在Ubuntu的登录界面,如下图所示。 然后静候Ubuntu安装...
安装完毕,重启一下。
输入之前设置的密码启动Ubuntu系统。
会出现如下界面,直接点击skip跳过。
按照默认设置,直接点Next。
继续点Next,当然如果你不想向Ubuntu发送系统信息就选择“No,don't send system info”。
随后是位置服务的设置,直接点Next即可。
在Ready to go界面点击“Open 'Software' now”,去下载code,完成这一部分的最后一步。
等待Software即软件市场打开。
点击左上角的搜索图标,唤起搜索栏。
然后在搜索栏中键入“vscode”,下载code。
点击“Install”开始安装。
在弹窗中输入之前设置的Ubuntu用户密码,再点击“Authenticate”授权安装。
等界面发生如下变化时代表VScode安装完毕。
点击桌面左下角,去找到VScode。
看到VScode在最后一个,点击启动,安装完毕。初次启动VSCode会让进行一系列配置,这个不想弄的话跳过就可以了。
2 利用Espressif IDF插件搭建ESP32开发环境
2.1 Espressif IDF插件的下载
首先打开VSCode的插件市场。
搜索Espressif IDF,就是下图所示这个插件,点击Install进行安装。
2.2 Espressif IDF插件的初始化
等待安装完成,在VSCode界面按F1唤起指令窗口,在指令窗口中输入esp以检索指令,选择“ESP-IDF:Configure ESP-IDF extension”,对ESP-IDF插件进行初始化。
出现如下界面,需要我们先安装针对Linux系统的ESP-IDF前置需求,点击蓝色的“ESP-IDF Prerequisites for Linux”。
会跳转到ESP官方的在线文档,该文档提示为了使用ESP-IDF编译,需要安装一些包,并给出了相应的指令,我们复制下图的指令,在Ubuntu系统使用“Ctrl+alt+t”唤起命令行窗口,然后使用“Ctrl+Shift+V”将复制的指令粘贴进去。
无法连接在线界面的话,我把指令贴在下边。
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
将指令复制进命令行窗口后,按回车键执行,输入前面设置的Ubuntu密码对软件包进行安装。如果遇到Ubuntu系统提示进程被占用的特殊情况,可以重启虚拟机后再使用该命令安装。
输入Y,再按回车键继续安装进程。
等待安装完毕,再重启VSCode,按照之前F1唤起指令窗口再查找ESP指令的操作,重新初始化ESP-IDF插件。这次就会出现如下界面,选择“EXPRESS”最速安装即可。
第1步,选择下载服务器,国内的话选择Espressif。
第2步,选择ESP-IDF的版本,我选择的是5.1发布版本,选择其他的也行,这里以v5.1(release version)为例。
第3步,选择ESP-IDF安装的位置,为了方便ESP-IDF工具的版本管理(因为ESP-IDF工具更新的很快),我建议大家给安装位置的文件夹标上版本号。
第4步,选择ESP-IDF工具文件夹,这里需要注意的是,末尾的.espressif最好不要改,否则可能会引起插件的错误,同样的,为了方便ESP-IDF工具的版本管理,也建议标上版本号。
第5步,指定系统Python可执行文件的路径。
全部设置完毕后点击Install安装即可。然后就是等待插件自己下载与安装了,应该还会遇到一些错误,可以先泡杯茶等报错。
竟然没有报错,这还蛮出乎我意料的……根据提示,对于Linux用户来说,OpenOCD工具需要加入60-openocd,USB设备的使用许可也需要加入/etc/udev/rules.d/中,我们复制最下面这行的指令,然后以sudo权限执行即可。
那么到这里,该插件就算彻底初始化完成了。
3 编译hello_world示例并烧录
3.1 新建hello_world示例工程
F1打开指令栏,输入“esp”以检索指令,点击“ESP-IDF:New Project”以新建一个工程。
第1步,设置工程名,插件会以该名称创建一个文件夹,存储所有文件。
第2步,选择工程文件夹,插件会在该目录下创建一个以工程名为名称的新文件夹。
第3步,选择ESP-IDF开发板,这里我使用的淘宝上常见的NodeMCU开发板,是以ESP-WROOM-32模块为基础设计的,因为没有找到NodeMCU这一选项,那就选择Custom board(第三方开发板)即可
第4步,选择ESP-IDF目标,这里取决于要编译哪块芯片,ESP-WROOM-32以ESP32为基础,就选ESP32 module,如果是S6,那就选S6,这个看自己需求。
第5步,选择串口端口号,用于烧录、通讯等,这个取决于把开发板接在电脑的哪个USB上,由于现在我还没把开发板插上去,随便选了以下,后期可以改。
全部设置完毕后,点击“Choose Template”,去选择工程模板,乐鑫提供了很多工程模板,这里以hello_world为例。
在右下角弹出的窗口中点击“yes”,在新窗口中打开工程文件夹。
3.2 编译hello_world示例工程
可以看到新建的hello_world工程报了两个错误,分别是
- identifier "CONFIG_IDF_TARGET" is undefined
- identifier "portTICK_PERIOD_MS" is undefined
这是小问题,在如下文件加入这行指令即可。参考问题解决链接:identifier "CONFIG_IDF_TARGET" is undefined和identifier "CONFIG_FREERTOS_HZ" is undefined (VSC-1138) · Issue #1008 · espressif/vscode-esp-idf-extension · GitHubhttps://github.com/espressif/vscode-esp-idf-extension/issues/1008
可以看到PROBLEMS消失了,再点击如图所示图标唤起ESP-IDF Terminal。
在ESP-IDF Terminal中输入idf.py build对工程进行编译。
等待编译完成。虚拟机编译还是比较慢的,我是因为对Linux系统不熟悉,不想老是重装系统才用虚拟机联系Linux操作的,如果追求速度的话,还是在主机上编译比较好。
那么出现如下文字时,就代表编译完成了。
3.3 烧录
于是我们将开发板接上电脑,由于USB设备同时只能连接到一台主机或一台虚拟机,因此我们需要在如下窗口(开发板插上时VMware会自动弹出的)选择一下。
连接后,我们再点击如图所示图标对串口号进行选择。
可以看到,/dev/ttyS0是原来就有的,而/dev/ttyACM0是插上开发板后才出现的,因此可以确认/dev/ttyACM0才是连接着开发板的串口,那么就选择这个串口。
首次连接时还会询问该串口的作用域,只有一个选项,点一下就好。
选完以后可以看到左下角图标变了,显示的是我们选择的串口,这样就可以开始烧录了。
如果我们直接输入idf.py -p /dev/ttyACM0 flash的话会如下报错。
出现该错误的原因是默认情况下我们对该串口是没有读写权限的,这个时候就得打开Ubuntu系统的命令行窗口,输入如下指令,为我们要用到的串口赋予读写权限,重启系统后会失效,需要再输入一遍,暂时还没找到别的一劳永逸的办法。
sudo chmod -R 777 /dev/ttyACM0
执行完毕后,回到VSCode,再在ESP-IDF Terminal中输入
idf.py -p /dev/ttyACM0 flash
就能正常烧录啦!
等待烧录完毕,输入以下命令打开串口监视器,就可以看到ESP32发回的消息了。想要退出串口监视器的话,按“Ctrl+]”快捷键即可。
idf.py monitor
至此,编译-烧录工作完成!
4 总结与废话环节
不建议使用虚拟机开发ESP32,写这个教程只是为了之后在主机Ubuntu系统中开发不走弯路,虚拟机配置环境的教程同样可以应用于主机Ubuntu系统中。
鄙人才疏学浅,教程中难免有不妥或纰漏之处,还请路过大佬批评指正或与我讨论,谢谢!
继续学习,继续热爱!
更多推荐
所有评论(0)