告别简陋,让Arduino开发变得高大上——MS VSCode体验
扫描二维码
随时随地手机看文章
有人说,Arduino是当之无愧的宇宙第一开发板!RPI(树莓派)的拥护者可能已开始准备扔鸡蛋了。不过依笔者的经验,对于一个非电子或嵌入式软件专业人员来说,Arduino的入门显然比RPI要快!其实关于二者的优劣,口水仗已打过不少,按照伟大的Q哥的想法:喜欢谁就是谁!不纠结,动起来才是王道。
今天的主题不是口水仗,只是为了让Arduino更好用,告别简陋的Arduino IDE,使用高大上的VSCode来进行软件开发。
笔者多年前就接触过Arduino,对其设计理念是非常赞同的。只是使用Arduino IDE的时候,感觉非常不爽,总想着哪一天官方能推出一款更好的集成开发环境,那样就更完美了。可惜的是,直到今天,Arduino的IDE依旧是那么朴素,没有代码提示,没有调试功能。要知道,这些特性是一个伟大的IDE应该具备的特性啊。
VSCode是MS(微软)推出的一款编辑器,就是编辑器,不是IDE!
VSCode的全称是Visual Studio Code,源自MS大名鼎鼎的Visual Studio开发套件,不过没有Visual Studio那么臃肿,继承了Visual Studio强大的代码编辑功能,具备代码补全、代码格式化等诸多编辑优点。
这个编辑器组件来自online editor Monaco,由坐镇苏黎世的Eric Gamma率领团队打造,typescript写就。VSCode小巧而实用,一经推出就备受好评。
我们都知道编辑器一般是不能编译代码的,不过MS为VSCode提供了诸多的extension即扩展插件,使得完全可以把它当作一个IDE来使用。其实这种作法在很多有名的编辑器中都早已采用,如Edit Plus,Notepad ++等。
从这里https://code.visualstudio.com/下载最新的VSCode并安装,这个过程不赘述。
启动VSCode后的画面如下
现在的VSCode还是个编辑器,只能编辑文件,不能编译!毕竟工具链什么的都还没有配置。
VSCode支持非常丰富的插件类型,包括各种语言如c/c++、Python等,支持不同的硬件平台如Arduino、STM32、ESP32等,确是应有尽有。
先来添加Arduino支持,如下
需要安装什么插件,直接在搜索栏内输入内容,然后VSCode会列出一堆可供选择,上图中显示的是已安装好了Arduino扩展插件的情况,这个插件是MS官方推出的版本,目前版本号为0.2.6。
要在VSCode中使用Arduino的功能,还需要下载安装Arduino,毕竟各种工具链及相关驱动及示例代码都是Arduino中提供的。
从arduino.cc下载最新的Arduino,本文测试时使用的是压缩包.zip格式,直接解压到指定的文件夹即可使用,如下
双击arduino.exe文件检查程序运行是否正常。
需要注意的是Arduino的运行是需要JRE支持的,所以如果发现不能启动Arduino的话,需要检查是否安装了JRE运行环境。
默认的Arduino支持一些基本的Arduino硬件如UNO、MEGA2560等,如果需要三方支持的话,需要先安装底层的工具链等支持。
以Adafruit的Feather开发板为例,介绍如何在Arduino中添加硬件支持。
一般来说,支持Arduino开发的硬件平台,厂商都会指定相关的工具链及底层的支持包(BSP),例如为Feather添加支持,需要在Arduino的Preferences中指定如下的URL
设置好URL之后,接下来需要在Arduino的Board Manager里添加具体的硬件支持,例如该Feather使用的MCU主控为Atmega32u4,那么就添加相应的支持包
你可能会觉得奇怪,不是用VSCode来作为开发环境么?怎么现在设置都是在Arduino里操作呢?
其实这个问题很好回答。记得我们前面介绍VSCode时说过,VSCode只是一个编辑器,把它当成IDE来使用的话,当然得先配置好Arduino本身。
配置好Arduino之后,接下来就是让VSCode感知到Arduino的存在,毕竟插件还没有智能到自动感知的地步。
VSCode与VS不同的地方在于:VSCode的配置文件都是使用JSON来进行配置,VSCode在启动的时候读取这些配置,然后就可以开始工作了。
VSCode进行系统参数设置的快捷键是Ctrl+,,打开后,搜索与Arduino相关的设置,如下
如图所示,在设置界面中先输入arduino,与Arduino相关的设置都会显示,然后在右边的用户设置中修改具体的用户值,用户设置的参数会覆盖系统默认的参数。
这里最关键的一个参数就是Arduino所在的位置,直接指定Arduino所在的位置即可。
这样子设置之后,VSCode应该可以使用Arduino来进行开发工作了。[!--empirenews.page--]
新建一个简单的Arduino源文件test.ino,在里面输入如下内容
#include
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
玩Arduino板子的用户对这段代码应该是耳熟能详了,也不解释了。
接下来设置硬件的类型及上传代码用到的串口,这些设置可以使用命令面板(Command Palette)来设置,也可以使用快速方式,先体验下快捷方式设置,在VSCode窗口的右下角有选择开发板类型及串口的设置,如下
先选择开发板类型,如下
选择通信串口,如下
接下来是编译,链接及上传代码到开发板。
除了设置开发板类型及通信串口外,其它与Arduino相关的操作如代码编译,上传等功能,都只能通过命令面板提供的命令来进行了。
打开命令面板的快捷键是Ctrl+Shitp+P,也可以使用功能键F1来完成命令,打开后的命令面板大致如下
可以看到以Arduino打头的命令都是与Arduino操作相关的,如开发板管理,串口参数设置,编译及上传代码等功能,先看下Arduino: Upload的功能,该命令是将当前代码编译并上传到目标板。可以使用Ctrl+Alt+U快捷键来完成操作,
操作过程中会看到类似如下的输出信息
Loading configuration...
Initializing packages...
Preparing boards...
Verifying...
Archiving built core (caching) in: C:\Users\netlh\AppData\Local\Temp\arduino_cache_554445\core\core_adafruit_avr_feather32u4_59d57194f9ece49e5f06a151099c183b.a
Sketch uses 4104 bytes (14%) of program storage space. Maximum is 28672 bytes.
Global variables use 149 bytes of dynamic memory.
Uploading...
[Done] Uploaded the sketch: sketch\test.ino
代码上传完成后,会看到开发板上的LED灯开始闪啊闪。
VSCode本身有代码提示及补全功能,但是有个小小局限,只限于当前文件,略为不足。不过开源的代码补全插件还是有的,像大名鼎鼎的GTAGS,在VIM里用得非常之多。为了让VSCode更好用,当然得把GTAGS加进来。
先从http://adoxa.altervista.org/global/这里下载最新的安装包,安装或解压后,将该程序加入到用户路径PATH中,GLOBAL解压后提供的工具如下
接下来就可以使用GTAGS来建立补全信息了。
Arduino本身包含若干库,这些库都位于Arduino安装目录之下,另外Arduino将用户建立文件默认放在Documents目录的Arduino子目录下,为了让GTAGS能建立全局的数据库文件,这里稍微修改了一下默认的Arduino目录参数,将用户创建的文件全部放到Arduino的sketch子目录下,方便GTAGS搜集信息,如下
注意上图中的sketch用户代码子目录。
上图中的GPATH、GRTAGS及GTAGS文件都是使用GTAGS命令建立的索引文件,这些文件是在Arduino安装目录下执行GTAGS命令得到的结果
由大多数LINUX命令一样,GTAGS命令执行后的静默输出表明代码执行成功,接下来就可以使用代码提示及代码补全命令了。
[!--empirenews.page--]
上图是输入代码中的代码提示,可以使用TAB及ENTER来实现代码补全了。还有下面的代码提示,这酸爽啊
再来看下如何使用Arduino自带的串口监视功能,就像Arduino一样,如下
点击红色标记处的图标,就可以打开串口监视器。
最后一点,如果想要体验其它IDE中的调试功能,如代码单步、断点等,这个没办法。一是Arduino本身就没有提供这个功能,再者,要想实现在线调试,一个调试器是必不可少的,如ST有STLINK,ARM通用的JLINK,对不起,Arduino没有,也许Arduino程序本身一般比较简单,官方认为没有必要!
最后我还要偷偷摸摸告诉你你一个秘密:如果想看某个对象或类型的定义,按信ctrl键,然后在对象上点击一下,会有惊喜的
上面是在Serial对象上按住Ctrl键再点击的效果图,是不是很酷!
作为比较,最后扔一张传统的Arduino的开发界面,是不是高下立判
MS出品的东西,果然还是狠不错的。不过令人郁闷的是,MS的手机为啥总是扶不上墙?