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