在 VSCode 中使用 PlatformIO 开发 ESP32
我们已经学会了 Arduino IDE 的基本使用了,这节课,我们来学习使用另一款软件进行 Arduino 开发,他就是 PlatformIO。
PlatformIO 是一个开源的跨平台的物联网(IoT)开发平台,用于嵌入式系统和物联网设备的开发。它提供了一个统一的开发环境和工具链,支持多种硬件平台(如 Arduino、ESP8266、ESP32、Raspberry Pi 等)和开发框架(如 Arduino 框架、ESP-IDF、STM32Cube等),使开发者可以更轻松地进行嵌入式开发。
PlatformIO 的主要特点和优势包括:
跨平台支持
:可以在 Windows、Mac 和 Linux 等操作系统上运行,并支持多种开发板和处理器架构。统一的开发环境
:提供了集成开发环境(IDE)插件,如 VS Code、Clion 等,使开发者可以在一个统一的界面中进行代码编辑、编译、调试和上传。库管理和依赖管理
:内置了强大的库管理器,可以方便地搜索、安装和更新开源库,同时支持管理项目的依赖关系。丰富的功能
:支持代码自动完成、语法检查、固件升级、调试器、单元测试等功能,提供了全面的开发工具和功能。强大的扩展性
:可以通过插件系统扩展功能,支持自定义构建脚本、添加新的开发板和框架等。社区支持
:PlatformIO 拥有活跃的社区,开发者可以在社区中获取技术支持、交流经验和分享项目。
使用 PlatformIO 可以简化嵌入式开发的流程,提高开发效率,并使项目更易于管理和维护。无论是初学者还是有经验的嵌入式开发者,都可以受益于 PlatformIO 提供的功能和工具。
PlatformIO 只是一个插件,因此,我们需要先选择一个 IDE,在 IDE 中安装 PlatformIO 插件,这里我推荐一下两种:VSCode 与 Clion。具体该怎么选择呢?
- 如果你是经验丰富的程序员或者重度依赖 JetBrains 系列开发工具,建议使用 Clion;
- 如果你是初学者,且对 C/C++ 语言的认识仅停留在学习阶段,没有实战经验或商业项目,建议选择 VSCode,而且 VSCode 是免费。
为了照顾初学者,本套教程,使用 VSCode 安装 PlatformIO。
1. 安装 VSCode
前往 VSCode 官网 ,建议下载 System Installer
版本的安装包,该版本安装在非用户目录,例如 C 盘根目录。
下载完毕后进行安装,安装时建议按如下进行勾选。
安装完毕后打开软件,安装中文插件。
2. 安装 PlatformIO 插件
在 VSCode 中根据下图步骤安装 PlatformIO IDE 插件。
插件安装完毕后,VSCode 右下角会出现 PlatformIO 的下载进程,等待其下载完毕后即可。由于 PlatformIO 的服务器在国外,下载速度特别慢,耐心等待即可。
下载完毕后,PlatformIO 只下载了公共的数据包,没有下载特定板子的数据包,因此如需使用他人的工程,需依照该工程所用芯片新建一个工程,在第一次新建工程时,PlatformIO 会下载好该工程所需的文件。
假设需运行的工程所使用的芯片为 ESP32,使用的框架为 arduino,那么在第一次运行该工程前需先按照如下步骤新建一次工程,只有第一次需要,后续就可以直接运行了。
点击 VSCode 左下角的桌面图标。
点击 New Project
,即可创建新项目。
设置项目的名称,选择开发板型号,开发框架以及项目路径。
点击 Finish 后,需要较长的一段时间,此阶段 PlatformIO 会下载该工程所需的文件,新建完成后,即可关闭此工程(直接关闭 VSCode 软件)。接着打开我们所需运行的工程即可(在工程路径下,鼠标右键后,选择通过 Code 打开)。
左下角的图标含义如图。
3. 如何使用 PlatformIO
当使用 PlatformIO 创建 ESP32 Arduino 项目时,项目目录的结构通常如下所示:
.pio
:该文件夹是 PlatformIO 的工作目录,包含编译生成的二进制文件、日志文件等。.vscode
:如果你在 VSCode 中使用 PlatformIO 插件,该文件夹包含了与项目相关的配置文件,如任务配置、调试配置等。include
:存放头文件。lib
:该文件夹用于存放项目依赖的库文件。你可以通过 PlatformIO 的库管理器安装所需的库,并它们会自动下载到该文件夹。src
:该文件夹是存放源代码的主目录。你的主要代码文件(通常是.cpp和.h文件)应放在这个目录下。test
:用于存放项目的测试代码和测试数据。这个目录通常用于编写单元测试或集成测试的代码,用于验证项目的功能和逻辑是否正确。.gitignore
:如果你使用版本控制系统如Git进行项目管理,你可以在这个文件中指定需要忽略的文件和文件夹。platformio.ini
:这是 PlatformIO 的配置文件,用于指定项目的配置选项,如目标硬件平台、编译选项、上传设置等。
在 PlatformIO 创建的项目中,lib
和 include
目录都是用于存放代码文件的特定目录。它们的区别如下:
lib
目录:用于存放项目的依赖库文件。在这个目录下,可以放置项目需要引用的第三方库或自己编写的库。这些库文件通常是以源代码的形式提供,可以是单个文件或多个文件的集合。在构建过程中,这些库文件会被编译并链接到项目中。include
目录:用于存放项目的头文件。头文件包含了函数、类、变量的声明,供其他源文件在编译时引用。在这个目录下,可以放置项目自定义的头文件,或者是一些需要被其他文件引用的第三方库的头文件。在编译过程中,编译器会在该目录下查找所需的头文件。
总结一下,lib
目录主要用于存放项目的依赖库文件,而 include
目录用于存放项目的头文件。这样的组织结构可以方便地管理项目所需的库文件和头文件,并在构建过程中正确引用和链接它们。
主要的代码,我们可以写在 main.cpp
中,src
目录下的 main.cpp
文件基本等同于 Arduino IDE 中创建的 .ino
文件。
只不过,在 main.cpp
文件的第一行需要 #include <Arduino.h>
,其余的代码部分内容一致,我们可以直接把上节课读取串口输入的代码复制过来,但是不要忘了 #include <Arduino.h>
。
#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();
Serial.begin(9600);
}
void loop()
{
// when characters arrive over the serial port...
if (Serial.available())
{
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0)
{
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
想要运行该程序,可以点击左下角的或者右上角的上传选项,或者使用快捷键 ctrl + alt + u
这时候,我们还没有导入 LiquidCrystal_I2C
库,所以,代码会运行失败,想要在 PlatformIO 中导入第三方库比 Arduino IDE 方便的多,我们可以打开 PlatformIO Home 页面,点击 libraries
,输入我们想要导入的库名称,添加到项目中即可。
PlatformIO 还会非常贴心的给你一个使用示例,
所以,如果你想要使用 ESP32 在 Arduino 框架下实现一个稍微复杂一点的项目的话,Platform 是你最佳的选择。