基于CLion搭建ESP32的Arduino开发环境
Arduino框架是快速入门开发ESP32的好选择,但是Arduino IDE却难称得上优雅。本文介绍如何使用CLion
以及PlatformIO
搭建ESP32
的Arduino
开发环境。
安装PlatformIO插件及CLI
首先请安装CLion,安装的过程在此不再赘述。安装完毕CLion之后,接下来需要下载PlatformIO插件来支持嵌入式开发。在CLion中,选择File->Settings->Plugins
,搜索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中。其他外观等个性化设置请根据个人喜好进行设置。
接下来使用Windows Terminal打开一个MinGW64终端,参考官网上的指引,使用pacman
对其进行更新。
pacman -Syu
询问[Y/n]时,直接回车选是即可。安装的最后,会询问是否重启终端,选是后当前终端会被关闭。
重新打开Windows Terminal后,继续进行下面的安装指令
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-make mingw-w64-x86_64-gdb
来安装CLion需要的gcc
gdb
与make
。如果需要完整的工具链,也可以按照官网指引中描述的指令
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会自动检测到工具链。
到此为止,便完成了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即可。
到此为止,工程应该已经可以被正常的配置了。
编译并下载示例代码
在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
来提高下载的速度。
配置完毕后,保存并关闭网页,然后在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