引言:最近突发All in one的编程想法,想通过Vscode+Extension的方式尽可能的实现所有计算机相关的开发,减少使用新工具带来的学习成本的上升,同时减少PC上工具的复杂程度。
注意:关于这个插件的配置教程大部分已经过时了,因为之前其他人用的那个微软官方的Arduino插件已经下架,取而代之的是本篇教程中所介绍的Arduino Community Edition
【相关链接】
1. 前提准备
- 下载并安装Visual Studio Code
- 安装Arduino Community Edition插件
- 首先安装一下Arduino插件,这个毫无疑问

我的建议是把“细节”模块仔细看一下,这样可能会对之后的操作更理解一些。这个插件有两个依赖项,即C/C++插件和一个串口的插件,安装的时候应该会自动安装。
安装好插件之后,如果去看这个插件的安装目录,会发现目录下已默认下载了一个Arduino CLI(就是我们前面安装的Arduino CLI,可能只有版本不一样),而插件的编译下载等功能都是依赖于这个程序实现的。
理论上来说,已经有了一个执行程序,可以不用自己再安装,但是个人觉得还是需要再安装一遍,主要有两个理由:
- ①这个文件本身也不大,<30M,下载/复制一遍感觉代价较小;
- ②为了实现在任意位置都能使用这个程序,最好是将它添加到环境变量,但是由于VS Code插件在更新时目录会更换,一般是时间上改变,这样添加到环境变量意义就不大了。
2. 插件配置
引言:根据插件介绍,本插件有两种配置模式,第一种是借用已经安装的ArduinoIDE进行配置的,第二种是借助ArduinoCLI进行配置的。由于本人已经下载的ArduinoIDE版本过高,故先介绍如何CLI的配置以及相关问题的解决,并且留下IDE配置法待填坑
CLI:即Command Line Interface,是与gui(Graphic User Interface)相对,即使用命令行来实现图形界面点击按钮可完成的功能。它是官方在2018年发布的一个集成的工具,把和Arduino相关的嵌入式开发过程,如编译和下载,管理库和板子SDK等都集成到这一个工具当中。(当然,它本身是不具有编译和下载的功能的,只是调用其他工具来进行操作)这样可以实现只用这一个工具就能构建整个项目,功能非常强大。
2.1. IDE配置法
2.2.1 前提须知
Use of the legacy Arduino IDE is not recommended, and support for the legacy Arduino IDE will be removed in a future version of the extension. The legacy Arduino IDE can be installed from the Arduino download page.
- The supported legacy Arduino IDE versions are
1.6.x
and up to, but not including, 2.0.0
.
- The Windows Store's version of the Arduino IDE is not supported because of the sandbox environment that the application runs in.
- Note: Arduino IDE
1.8.7
had some breaking changes, causing board package and library installation failures. These failures were corrected in 1.8.8
and later.
- Note: Arduino IDE
2.X.Y
is not supported and there are no plans for support in the future (issue 1477).
总的来说就是IDE版本在2.X.Y以上的不支持,只支持在1.6.x2.0.0间的IDE(除1.8.7版本)
2.2 CLI 配置法
2.1.1 前提须知
To use the bundled(捆绑的) version of Arduino CLI, arduino.useArduinoCli
should be true
, and arduino.path
and arduino.commandPath
should be empty or unset. arduino.useArduinoCli
defaults to false
while we deprecate(反对) support for the Arduino IDE, but there will be a prompt when the extension first activates to switch to the Arduino CLI.
If you want to use a custom version of Arduino CLI, it can be downloaded from the repository's release page. For custom versions, arduino.path
must be set to the directory containing the Arduino CLI executable.
最好不要用魔改过的CLI来给本扩展使用,容易出现一些玄学问题。
2.1.2 下载安装
Arduino cli这个工具更新非常快,基本几天一个版本,所以建议去官方GitHub
Arduino cli是单个执行文件,可以下载压缩包然后放在电脑中的某个位置。但这里建议下载后缀为.msi
的文件,这样在安装时会自动将安装路径添加到环境变量,比较省事。

安装好之后检验一下是否安装成功:
arduino-cli -h #or --help

如果没出现报错就证明安装成功了。
2.1.3 相关配置
(1)CLI配置
前面提到,arduino-cli是一个集成的工具,它基本囊括了Arduino IDE常用的功能,甚至可以视为就是Arduino IDE的核心,只是缺少编辑器而已。因此,最好是理解Arduino IDE的基本功能,这样差不多可以理解配置的每一步了。
不过在配置Cli之前,首先要知道Arduino IDE有哪些目录。
首先是IDE的安装目录,即%ProgramFiles(X86)%\Arduino_1.8.19
目录(默认路径)下
然后是开发板SDK目录,每种开发板都有其对应的基础代码,内置库,编译下载工具等,这些文件放在%LocalAppdata%\Arduino15
文件夹下
如果在使用过程中,有安装第三方库,那么库文件会放在项目文件夹下,当然,这个在IDE当中也可以自定义,如下图所示:

如果你是2.0.0以上的IDE版本,你可以让cli和Ide共用这个库文件夹节约存储空间
理解了Arduino IDE的文件夹结构,应该对它的工作原理有了一定认识,接下来就开始使用安装好的arduino-cli来搭建[Arduino开发](https://so.csdn.net/so/search?q=Arduino%E5%BC%80%E5%8F%91&spm=1001.2101.3001.7020)环境。
arduino-cli config init --dest-dir "$env:LOCALAPPDATA\Arduino15"
# 如果你想要和IDE共用库文件夹,可以把上述IDE中所示项目文件夹位置地址复制来,修改命令如下
arduino-cli config init --dest-dir
"C:\Users\Zeoy\Documents\Arduino"
之所以选择这个文件夹是因为VS Code中的Arduino插件只认这个文件夹下的配置文件,这个后面就理解了
如果要查看配置,可以:
arduino-cli config dump
这本质上是查看上面那个初始化的配置文件,文件名为arduino-cli.yaml
。如果默认路径下没有配置文件,那显示的就是内置的默认配置。
通过查看默认配置可知,库文件和板子SDK文件是不在同一个路径下的,个人觉得很不方便,因此修改一下配置,将板子SDK文件与库文件放在同一目录下:
arduino-cli config set directories.user "$env:LOCALAPPDATA\Arduino15"
这样配置文件、板子SDK文件和安装的第三方库文件都在一个路径下,如果需要找目标更加明确。
这里分享一下我的使用习惯。前面提到,Arduino软件(不管是1.8还是2.0)SDK和第三方包存放的位置是不一样的,一个在Local/Arduino15
下,一个在文档/Arduino
文件夹下。后者被官方设置为“用户目录”,即希望用户将写的项目代码也放在这个位置,但是个人更喜欢放在桌面这样更明显的位置。因此个人的习惯设置是将第三方包和板子的SDK放在一起,这样不管是查找第三方库还是默认库(一般在板子SDK包中),都只需要去一个路径下查找即可。如果使用Arduino,则是设置“首选项”中的“项目文件夹”;如果是使用Arduino-cli,则使用上述指令设置。
(2)插件配置
依次点击下图所示按钮

再依次点击下图所示按钮

勾选那个Use Arduino Cli选项即可或者你手动把Cli的路径填入到Arduino:path这栏中也可以,二者选其一(因为IDE方法本质也只是在借用CLi而已)。然后重启IDE

还有一件事,打开以下这个选项,防止编译时候遇上因为点击编译间隔太短造成的Bug

2.1.4 插件使用
如果开发板的SDK已安装的话,在VS Code中新建.ino
文件,然后在底下状态栏选择开发板之后,程序就会自动刷新,并且在当前项目文件夹下创建一个c_cpp_properties.json
文件,它设置了对应开发板开发过程中需要使用的编译器,需要包含的库文件等,如果没有出现,可以试着Ctrl Shift P,选择重新加载窗口,多刷新几次。而且如果切换开发板,也是会自动刷新的,这就是VS Code的重要作用,即它帮助你省掉了很多工作,也不需要你自己去手打命令,非常方便。
底下的状态栏时刻需要注意:
从左至右依次是:设置编译下载工具(arduino一般是avr,esp32一般是esptool)、当前选中开发的文档、设备类型、串口显示、串口号。
而添加开发板以及第三方库主要有命令行添加方式和图形化添加方式两种,我们来一一介绍,首先介绍图形化添加的方法
你按住ctrl+shift+p调出命令面板输入Arduino就可以看到插件命令列表

开发板管理、三方库管理、项目开发板选择命令分别为Arduino:Board Manager
、Arduino:Library Manager
、Arduino:Board Config
,界面如下所示
- 添加开发板
若目标开发板本身就在list内,ctrl+shift+p调出命令面板,输入Arduino:Board Manager
回车,然后执行如图所示步骤

若目标开发板不在自身list内,ctrl+shift+p调出命令面板,输入Arduino:Board Manager
回车,然后依次执行下图所示步骤



注意:步骤三是把相应板子的URL index文件地址放进去

- 添加库文件
ctrl+shift+p调出命令面板,输入Arduino:Library Manager
回车,执行如下步骤

新建完.ino
文件后点击下图所示按钮为该项目文件设置其对应的相应开发板

稍等片刻就会出现其他选项分支供开发者进行设置,如下图所示

新建完.ino
文件后点击下图所示按钮为该项目文件设置其对应的相应开发板

稍等片刻就会出现其他选项分支供开发者进行设置,如下图所示

如果在程序开发中,想要添加其他开发板SDK怎么办呢?如果自带list中含有目标开发板,执行如下命令即可
####### 如果自带list中含有目标SDK
# 先更新一下板子列表(core list)
arduino-cli core update-index
# 再下载arduino核心(SDK)
arduino-cli core install arduino:avr
那如果我还要开发ESP8266和ESP32怎么办呢?还记得在Arduino IDE中是怎么设置的吗?先要添加一个板子的链接,一个json文件,然后再下载并安装,然后板子列表就多出了很多可选的开发板型号。
相信配置过的人都知道,在Arduino IDE中配置时失败概率非常高,往往要点击好几次下载。
所以这里的重点就是那个packages的json文件,从以往的教程来看,这个链接老是会失效,因此建议还是找相对固定的GitHub链接:
安装指令:
# 先添加额外的链接,按需选择,多个开发板用空格分隔
arduino-cli config set board_manager.additional_urls https://hub.yzuu.cf/esp8266/Arduino/releases/download/3.1.2/package_esp8266com_index.json https://hub.yzuu.cf/espressif/arduino-esp32/releases/download/2.0.7/package_esp32_index.json
# 然后再更新一下链接(实际上就是把上面两个文件下载下来)
arduino-cli core update-index
# 这个时候就可以根据需要下载对应的开发板包了
arduino-cli core install esp32:esp32
arduino-cli core install esp8266:esp8266
第三步如果下载速度太慢,这是因为每个下载包都是从GitHub下载的,这里建议修改一下packages条目,使用镜像网站下载,速度会快不少:

建议使用查找替换,将github.com
全部替换成hub.yzuu.cf
,然后再执行上面的命令
安装完成之后,可以使用arduino-cli清除缓存文件
# 加上-v可以看到详细输出信息
arduino-cli cache clean -v
如果在程序开发过程中,想要添加第三方库并使用到程序当中怎么办呢?首先要用命令行安装第三方库:
# 查看已安装的库
arduino-cli lib list #需要注意,这里只会列出lib_path设置路径下的包,即libraries文件夹下
# 搜索某个库
arduino-cli lib search <name>
# 安装某个库
arduino-cli lib install <name>
# 升级
arduino-cli lib upgrade
新建完.ino
文件后点击下图所示按钮为该项目文件设置其对应的相应开发板

稍等片刻就会出现其他选项分支供开发者进行设置,如下图所示

安装好第三方库之后,可以直接在程序中引用,但是一般会画波浪线,这是因为c_cpp_properties.json文件没刷新的缘故,试试重新加载窗口,差不多就好了,因为每次重新加载窗口,插件都会对打开的ino文件进行验证(Verify)
- 使用注意事项
- 要时刻注意右下角的状态栏,即此时的板子型号,串口号,目标文件(不一定是打开的文件)等
- arduino-cli还是沿用了Arduino IDE的项目文件的概念,因此每次新建一个文件,记得要在外面套一层同名文件夹
总结来说,其实Arduino插件就是依赖于安装目录下的cli程序,并将它的一些常用功能集成到VS Code界面上的一些按钮,这样大大方便了开发者使用,而前面我们下载安装arduino-cli,更多的是为了不时之需,比如安装第三方库的时候,但实际执行操作的还是VS Code自带的arduino-cli程序。相当于是两个相同的程序读写同一堆文件。
三、插件测试
- 新建一个Arduino文件夹,在其下方新建一个Arduino.ino文件,填入如下内容
#include <Arduino.h>
#define LED_BUILTIN 13
#define LED_PIN 13
/*
Blink
Turns an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your Arduino
model, check the Technical Specs of your board at:
https://www.arduino.cc/en/Main/Products
modified 8 May 2014
by Scott Fitzgerald
modified 2 Sep 2016
by Arturo Guadalupi
modified 8 Sep 2016
by Colby Newman
This example code is in the public domain.
https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
*/
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
- 点击upload按钮,目录变成如下,且终端输出如下

[Starting] Uploading sketch 'Arduino.ino'
Please see the build logs in output path: c:\Users\Administrator\Documents\CODE\VsCode\Arduino\buid
Error initializing instance: Loading index file: loading json index file C:\Users\Administrator\AppData\Local\Arduino15\package_esp32_index.json: open C:\Users\Administrator\AppData\Local\Arduino15\package_esp32_index.json: The system cannot find the file specified.
. Variables and constants in RAM (global, static), used 29044 / 80192 bytes (36%)
鈺� SEGMENT BYTES DESCRIPTION
鈺犫晲鈺� DATA 1520 initialized variables
鈺犫晲鈺� RODATA 1548 constants
鈺氣晲鈺� BSS 25976 zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 61311 / 65536 bytes (93%)
鈺� SEGMENT BYTES DESCRIPTION
鈺犫晲鈺� ICACHE 32768 reserved space for flash instruction cache
鈺氣晲鈺� IRAM 28543 code in IRAM
. Code in flash (default, ICACHE_FLASH_ATTR), used 256516 / 1048576 bytes (24%)
鈺� SEGMENT BYTES DESCRIPTION
鈺氣晲鈺� IROM 256516 code in flash
IntelliSense configuration already up to date. To manually rebuild your IntelliSense configuration run "Ctrl+Alt+I"
[Done] Uploading sketch 'Arduino.ino'
提示:遇上如下报错时候,把编译输出的文件夹清除掉或者,多点一两下次编译就行,这是一个Bug,目前没有解决方案,除非在upload之前把编译文件夹自动清空
Error initializing instance: Loading index file: loading json index file C:\Users\Administrator\AppData\Local\Arduino15\package_esp32_index.json: open C:\Users\Administrator\AppData\Local\Arduino15\package_esp32_index.json: The system cannot find the file specified.
Error during build: unable to read contents of the source item: open C:\Users\Administrator\Documents\CODE\VsCode\Arduino\buid\compile_commands.json: The system cannot find the file specified.
还有一个提醒的就是,许多人不知道什么时候正在编译什么时候已经编译好了,左下角状态栏在编译时候会亮起和下图一样的图标可以作为判断依据

【报错集锦】
问题描述:点击verify按钮时终端弹出警告信息如下
[Warning] Output path is not specified. Unable to reuse previously compiled files. Build will be slower. See README.
问题分析:原因没有手动指定编译文件的存放路径,需要我们到项目目录的arduino.json
下增加output
键值对

此时里面的内容如下
{
"port": "COM9",
"configuration": "xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=40,FlashMode=dout,eesz=1M64,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200",
"board": "esp8266:esp8266:generic",
"sketch": "SwithMaid.ino"
}
方案尝试:往arduino.json
下增加output
键值对,设定项目目录的output
文件夹为编译输出路径。修改后的json对如下
{
"port": "COM9",
"configuration": "xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=40,FlashMode=dout,eesz=1M64,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200",
"board": "esp8266:esp8266:generic",
"sketch": "SwithMaid.ino",
"output": "./buid"
}
方案检验:警告消失,终端弹出如下信息
Please see the build logs in output path: c:\Users\Administrator\Documents\CODE\VsCode\Arduino\buid

Assuming VS Code is working through the C:/Program Files (x86)/Arduino/**
directory tree (recursively) in alphabetical order, it will hit this one first:C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\wifishield\wifiHD\src\SOFTWARE_FRAMEWORK\DRIVERS\SPI\spi.h
- 方案尝试:在
C:/Users/Administrator/AppData/Local/Arduino15/**
前加C:/Users/Administrator/AppData/Local/Arduino15/packages/arduino/hardware/**
项,防止被提前检索到错误的同名头文件
C:/Users/Administrator/AppData/Local/Arduino15/packages/arduino/hardware/**
C:/Users/Administrator/Documents/Arduino/libraries/**
C:/Users/Administrator/AppData/Local/Arduino15/**

问题描述:按下verify按钮,终端报错类似如下
Error opening sketch: main file missing from sketch: C:\Users\Administrator\Documents\CODE\VsCode\Arduino\Arduino.ino
问题分析:根据Main file missing from sketch · Issue #1665 · microsoft/vscode-arduino (github.com)中所讨论的,此为Cli的一个Bug,其cli命令被传入的ino文件名字与父目录同名,就是上面报错中\Arduino\Arduino.ino
所体现的那样。而下图你当时ino文件的命名是SwithMaid.ino,所以就会报错

方案尝试:将SwithMaid.ino
重命名为Arduino.ino
即可
方案检验:终端报错更新,更新为如下内容
Error during build: unable to read contents of the source item: open C:\Users\Administrator\Documents\CODE\VsCode\Arduino\buid\compile_commands.json: The system cannot find the file specified.
问题分析:报错没有发现buid
目录下的compile_commands.json
文件,这是该插件的Bug,连续点击veryfy过快,会导致将上一次编译构建过程的build文件夹缓存在清理的同时进行了检测导致误报
方案尝试:删除build文件夹,慢点veryfy按钮
方案检验:终端正确输出编译成功的信息,且生成正确的编译文件目录结构

[Starting] Verifying sketch 'Arduino.ino'
Please see the build logs in output path: c:\Users\Administrator\Documents\CODE\VsCode\Arduino\buid
Error initializing instance: Loading index file: loading json index file C:\Users\Administrator\AppData\Local\Arduino15\package_esp32_index.json: open C:\Users\Administrator\AppData\Local\Arduino15\package_esp32_index.json: The system cannot find the file specified.
. Variables and constants in RAM (global, static), used 29044 / 80192 bytes (36%)
鈺� SEGMENT BYTES DESCRIPTION
鈺犫晲鈺� DATA 1520 initialized variables
鈺犫晲鈺� RODATA 1548 constants
鈺氣晲鈺� BSS 25976 zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 61311 / 65536 bytes (93%)
鈺� SEGMENT BYTES DESCRIPTION
鈺犫晲鈺� ICACHE 32768 reserved space for flash instruction cache
鈺氣晲鈺� IRAM 28543 code in IRAM
. Code in flash (default, ICACHE_FLASH_ATTR), used 256516 / 1048576 bytes (24%)
鈺� SEGMENT BYTES DESCRIPTION
鈺氣晲鈺� IROM 256516 code in flash
IntelliSense configuration already up to date. To manually rebuild your IntelliSense configuration run "Ctrl+Alt+I"
[Done] Verifying sketch 'Arduino.ino'
至于如何解决输出的乱码问题,在Arduino在vscode中输出乱码解决方法——亲测有效_vscode arduino中文乱码-CSDN博客中有介绍,此处不在赘述了