开启platformio之旅

十里还是比较喜欢用终端解决问题的,在某个小伙伴身上学到了些vim神技,虽然十里的技术现在很菜,但十里还是有追求的!比如十里希望能在终端下进行嵌入式开发工作,哈哈!平常会使用arduino,最近这些天又在找vim插件,但基本上年久不更,跟不上Arduino版本的更新!转换思路,用bing搜索了支持Arduino开发的CLI,没想到就找到了文章主角platformio,它不要太强大,竟然支持很多平台和板子的嵌入式开发,wonderful,更重要的是跨平台特性,windows\macOS\linux(+arm),简直了!特此分享!

看图感受一下支持的MCU平台:

支持的MCU厂商

PlatformIO is an open source ecosystem for IoT development. Cross-platform build system. Continuous and IDE integration. Arduino and ARM mbed compatible

platformio提供的是一个嵌入式平台开发的构建系统和开发环境,它会管理你使用到的编译连工具、调试器和下载工具等,不需要费心自己去找然后艰难搭建各种MCU的开发环境了,真的非常方便!

安装

platformio提供可视化的IDE,也提供CLI,CLI就是十里需要的Platformio Core,首先需要安装,macOS下非常简单,使用homebrew就可以安装。

brew install platformio

安装完,终端重启一下就可以调出platformio命令,还有一个alias命令是pio,执行一下help感受一下:

➜  play pio --help
Usage: pio [OPTIONS] COMMAND [ARGS]...

Options:
  --version          Show the version and exit.
  -f, --force        Force to accept any confirmation prompts.
  -c, --caller TEXT  Caller ID (service).
  -h, --help         Show this message and exit.

Commands:
  account   Manage PIO Account
  boards    Embedded Board Explorer
  ci        Continuous Integration
  device    Monitor device or list existing
  init      Initialize PlatformIO project or update existing
  lib       Library Manager
  platform  Platform Manager
  remote    PIO Remote
  run       Process project environments
  settings  Manage PlatformIO settings
  test      Local Unit Testing
  update    Update installed platforms, packages and libraries
  upgrade   Upgrade PlatformIO to the latest version
➜  play pio --version
PlatformIO, version 3.3.0

从一个Arduino点灯开启使用旅程

其实此时此刻可以把Arduino IDE卸载掉了,哈哈!下面可以跟我简单走一个 Arduino UNO 例程的开发过程。

查看platformio支持的开发板

pio boards

这样就会列出当前所支持的开发板,目前应该是200多款,它们按照硬件平台或MCU进行分类,可以看到其中Arduino官方开发板。其中ID一列在使用命令的时候,用ID用来表示不同开发板。其中我们要实验的 Arduino UNO 对应的是 uno

初始化blinky工程

在自己想要的目录下创建blinky目录,并进入此目录

mkdir blinky && cd blinky

初始化uno工程

pio init --board uno

正常的话就生成了工程目录和文件如下

.
├── lib
│   └── readme.txt
├── platformio.ini
└── src
	└── main.cpp

其中platformio.ini就是配置文件,可以点了解更改配置相关的内容,这里我们不需要更改,保持默认就好。lib以后用来保存使用的库文件,默认没有文件,而src下包含了工程源码,自动生成了main.cpp,内容如下

/**
 * Blink
 *
 * Turns on an LED on for one second,
 * then off for one second, repeatedly.
 */
#include "Arduino.h"

#ifndef LED_BUILTIN
#define LED_BUILTIN 13
#endif

void setup()
{
	// initialize LED digital pin as an output.
	pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
	// turn the LED on (HIGH is the voltage level)
	digitalWrite(LED_BUILTIN, HIGH);

	// wait for a second
	delay(100);

	// turn the LED off by making the voltage LOW
	digitalWrite(LED_BUILTIN, LOW);

	// wait for a second
	delay(900);
}

编译工程

可以使用run命令进行编译和上传程序,执行

pio run

platformio会自动下载对应开发板的交叉编译链工具、工程框架等,Arduino UNO对应的就是avr的相关CLI开发工具,下载完成后就会自动编译了。

上传程序

程序编译完成后,需要将程序上传到开发板,执行

pio run -t upload

了解更多关于run命令的使用,-t 用来指定功能,比如这里的upload,因为缺少工具,所以platformio会自动下载Arduino UNO程序下载工具avrdude,下载完成后就会将程序上传到连接电脑的开发板,这期间会自动选择合适的串口进行上传。

总结

走过以上步骤,会发现platformio是一个智能的工具,首先它会根据你指定的开发板在platformio.ini生成默认的开发板工程配置,执行编译命令后就会自动选择相应的交叉编译工具和依赖工具,如果资源不好还会自动更换资源地址,尽量保证工具能够下载安装,然后完成代码编译。将程序上传到开发板时,它同样智能的下载对应平台的上传工具,并完成智能选择串口上传。其实一个工程还可以指定多种开发板,详情可以点了解。总之,十里十分喜欢这个工具,建议看到本文的小伙伴安装体验一下,无论IDE还是CLI都一样令人心动!

后面如果有时间,十里还会分享使用感受!