目录

0 前言

1 使用VMware搭建Ubuntu22.04虚拟机并下载VSCode

1.1 安装虚拟机软件VMware

1.2 下载虚拟机操作系统镜像

1.3 使用VMware创建虚拟机

2 利用Espressif IDF插件搭建ESP32开发环境

2.1 Espressif IDF插件的下载

2.2 Espressif IDF插件的初始化

3 编译hello_world示例并烧录

3.1 新建hello_world示例工程

3.2 编译hello_world示例工程

3.3 烧录

4 总结与废话环节


0 前言

    本来在自己的笔记本电脑上装了双系统,一边学习Linux相关的知识,一边在Win系统办公学习(+电竞),然而双系统来回切换实在麻烦,遂将电脑上的Ubuntu删了,转而使用虚拟机。正巧又在折腾ESP32,遂尝试在Ubuntu虚拟机上搭建ESP32开发环境,本以为轻轻松松,没想到一路踩坑踩坑踩坑……一点点解决问题,终于搞定,成功编译HelloWorld示例并烧录。

1 使用VMware搭建Ubuntu22.04虚拟机并下载VSCode

 配置环境介绍与预先准备:

  1. 主机操作系统Windows 10 Home, 64-bit (Build 19045.32080) 10.0.19045
  2. 虚拟机软件VMware Workstation 17 Pro_17.0.0 build-20800274
  3. 虚拟机操作系统镜像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工程报了两个错误,分别是

  1. identifier "CONFIG_IDF_TARGET" is undefined
  2. 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系统中。

    鄙人才疏学浅,教程中难免有不妥或纰漏之处,还请路过大佬批评指正或与我讨论,谢谢!

    继续学习,继续热爱!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐