目录

基于CLion搭建ESP32的Arduino开发环境

Arduino框架是快速入门开发ESP32的好选择,但是Arduino IDE却难称得上优雅。本文介绍如何使用CLion以及PlatformIO搭建ESP32Arduino开发环境。

安装PlatformIO插件及CLI

首先请安装CLion,安装的过程在此不再赘述。安装完毕CLion之后,接下来需要下载PlatformIO插件来支持嵌入式开发。在CLion中,选择File->Settings->Plugins,搜索PlatformIO插件,进行安装。

https://img.yuanze.wang/posts/esp32-dev-in-clion/platformio-plugin.jpg
安装PlatformIO插件

这个插件只是给CLion添加了PlatformIO的支持,接下来需要安装PlatformIO的命令行工具PlatformIO Core。在安装PlatformIO Core之前,请先确保自己已经安装了python3以及virtualenv

pip install virtualenv

PlatformIO默认安装在用户文件夹下的.platformio文件夹下,但其由于包含了很多开发框架及工具链,需要占用很大的空间。如果系统盘没有这么大的空间,可以在安装前,添加PLATFORMIO_CORE_DIR环境变量并指向空间充足的安装路径。准备完毕后,从PlatformIO的官网下载get-platformio.py 脚本到任意位置并执行。

python get-platformio.py

最后需要将PlatformIO Core安装路径下的的penv\Scripts路径添加到PATH中。例如,我将PlatformIO Core安装在D:\Programs\platformio中,因此我应该将路径D:\Programs\platformio\penv\Scripts添加到PATH中。

安装MinGW

PlatformIO需要MinGW来生成工程文件。MinGW是包含在msys2中的,因此需要先下载并安装msys2。由于MinGW自带的mintty非常丑,因此在安装完毕后可以将MinGW64终端其添加到Windows Terminal

打开Windows Terminal的设置并新增一个配置文件,名称可以随意设置,这里我设置为MinGW64。我将msys2安装在了D:\Programs\msys64中,因此将图标设置为D:\Programs\msys64\mingw64.ico,命令行设置如下。

D:\Programs\msys64\msys2_shell.cmd -mingw64 -defterm -no-start

通过修改参数中的-mingw64-mingw32-msys,还可以将对应类型的终端添加到Windows Terminal中。其他外观等个性化设置请根据个人喜好进行设置。

https://img.yuanze.wang/posts/esp32-dev-in-clion/windows-terminal-mingw64.jpg
在Windows Terminal中配置MinGW

接下来使用Windows Terminal打开一个MinGW64终端,参考官网上的指引,使用pacman对其进行更新。

pacman -Syu

询问[Y/n]时,直接回车选是即可。安装的最后,会询问是否重启终端,选是后当前终端会被关闭。

https://img.yuanze.wang/posts/esp32-dev-in-clion/msys2-pacman-upgrade.jpg
更新MinGW64

重新打开Windows Terminal后,继续进行下面的安装指令

pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-make mingw-w64-x86_64-gdb

来安装CLion需要的gcc gdbmake。如果需要完整的工具链,也可以按照官网指引中描述的指令

pacman -S --needed base-devel mingw-w64-x86_64-toolchain

来安装。安装完毕后,打开CLion中的File->Settings->Build, Execution, Deployment->Toolchains,点击加号新建一个MinGW工具链,命名为MinGW64,并将Environment指向64位的MinGW的安装路径D:\Programs\msys64\mingw64目录,CLion会自动检测到工具链。

https://img.yuanze.wang/posts/esp32-dev-in-clion/clion-toolchain-mingw64.jpg
添加MinGW64工具链

到此为止,便完成了MinGW环境的安装。

新建工程

在准备工作都完成后,接下来就可以开始新建一个工程了。在CLion中选择File->New Project,在右侧选择PlatformIO,在安装正确的情况下窗口右侧将会显示PlatformIO所支持的所有开发板。为了使用Arduino开发ESP32,需要在右侧选择Espressif->Espressif ESP32 Dev Module->Arduino

第一次使用某个开发板或某个开发平台时,会下载所需要的工具链以及开发包,这对网络的要求较高,请自行解决网络问题。假如在配置的过程中由于网络原因导致配置不完整,可以在处理好网络问题后,右键点击左侧工程目录下的platformio.ini文件,选择PlatformIO->Re-Init来重新配置工程。

下载完成必要的文件后,还可能会出现如下的错误:

Cannot get compiler information:
	Compiler exited with error code 1: D:\Programs\platformio\packages\toolchain-xtensa32@2.50200.97\bin\xtensa-esp32-elf-g++.exe @C:\Users\wangyz\AppData\Local\Temp\response-file9500886701150744156 C:\Users\wangyz\AppData\Local\Temp\compiler-file4884884847078233085 | @response-file9500886701150744156=/TP -fno-rtti -fno-exceptions -std=gnu++11 -Os -g3 -Wall -nostdlib -Wpointer-arith -Wno-error=unused-but-set-variable -Wno-error=unused-variable -mlongcalls -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -Wno-error=deprecated-declarations -Wno-error=unused-function -Wno-unused-parameter -Wno-sign-compare -fstack-protector -fexceptions -Werror=reorder "-D'PLATFORMIO=50101'" "-D'ARDUINO_ESP32_DEV'" "-D'ESP32'" "-D'ESP_PLATFORM'" "-D'F_CPU=240000000L'" "-D'HAVE_CONFIG_H'" "-D'MBEDTLS_CONFIG_FILE=mbedtls/esp_config.h'" "-D'ARDUINO=10805'" "-D'ARDUINO_ARCH_ESP32'" "-D'ARDUINO_VARIANT=esp32'" "-D'ARDUINO_BOARD=Espressif ESP32 Dev Module'" /Be /Bd /EP
	xtensa-esp32-elf-g++.exe: error: /TP: No such file or directory
	xtensa-esp32-elf-g++.exe: error: /Be: No such file or directory
	xtensa-esp32-elf-g++.exe: error: /Bd: No such file or directory
	xtensa-esp32-elf-g++.exe: error: /EP: No such file or directory

这是因为PlatformIO需要MinGW来配置工程。在CLion的File->Settings->Build, Execution, Deployment->CMake选项卡中,选择MinGW64作为工具链,保存后重新配置CMake即可。

https://img.yuanze.wang/posts/esp32-dev-in-clion/clion-cmake-mingw64.jpg
更改工具链为MinGW

到此为止,工程应该已经可以被正常的配置了。

编译并下载示例代码

在PlatformIO自动为我们生成的src/main.cpp中,写入如下示例代码:

#include <Arduino.h>
void setup() {
    Serial.begin(115200);
}
void loop() {
    Serial.println("Hello world");
    delay(1000);
}

然后,对工程进行配置。在CLion的Terminal中,输入

pio home

后,会在浏览器中打开PlatformIO的图形化设置界面。点击主界面的Open Project按钮,打开刚刚创建的工程,然后在左侧选择Projects选项卡,点击工程右侧的Configure按钮,进入工程配置界面。在工程配置界面中,可以点击New Option右侧的输入框,来新增工程的配置。例如,若需要将PlatformIO提供的串口监视器的波特率调整为与示例代码中相同的115200,可以在New Options中输入speed,点击monitor_speed,并在下方新出现的设置项中将其设置为115200。同样地,也可以将upload_speed设置为921600来提高下载的速度。

https://img.yuanze.wang/posts/esp32-dev-in-clion/platformio-set-parameters.jpg
设置参数

配置完毕后,保存并关闭网页,然后在CLion右上角的Target中选择PlatformIO Upload | esp32dev-MinGW64目标,点击左侧的编译按钮。出现如下的提示,代表项目已经编译完成。

Checking size .pio\build\esp32dev\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   4.1% (used 13480 bytes from 327680 bytes)
Flash: [==        ]  15.9% (used 208170 bytes from 1310720 bytes)
Building .pio\build\esp32dev\firmware.bin
esptool.py v3.0
========================= [SUCCESS] Took 5.26 seconds =========================
Built target Production

Build finished

将开发板连接至电脑,点击Target右侧的运行按钮,将程序下载至开发板。PlatformIO会自动选择串口下载,当仅插入一个串口设备时无需设置串口号。下载完成后,在Terminal窗口中,输入

pio device monitor

即可打开串口监视器,看到示例代码运行的效果。右键点击platformio.ini,选择Monitor,也有相同的效果。

ets Jul 29 2019 12:21:46

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10124
load:0x40080400,len:5828
entry 0x400806a8
Hello world
Hello world
Hello world