PlatformIO使用中遇到的坑

首先,最重要的多翻翻官方文档中心,VSCode上的使用说明主要可以参考VSCode章节

另外一个,除了文档,遇到问题官方的论坛PlatformIO Community也是可以帮忙的,就是除了都英文之外

根据文档中心,PlatformIO大概分为以下三个部分:

  1. PlatformIO IDE:个人理解就是下面两个东西的打包(官方目前提供两个:VSC和CLion上的插件做的IDE)
  2. PlatformIO Core:核心文件,提供CLI(命令行接口)供用户调用,给那种没有使用IDE的人用
  3. PlatformIO Home:由Core提供的一个前端(图形界面,一个网页,所以说VSC在某种程度上就是一个浏览器 :) )

注意:对于PlatformIO IDE来说,只要装上插件,所有东西都会自动设置完毕,不需要重新安装PlatformIO Core

本人早几年就一直在关注PlatformIO IDE(VSCode端插件),但是当时候一直不满意,就放在VSC禁用列表中吃灰,最近捡起来一看,感觉好使多了,但是仍然遇到不少坑,遂总结如下

推荐设置

  • Platformio-ide: Disable PIOHome Startup:使能,即在启动VSC时默认不会启动PlatformIO Home
  • Platformio-ide: Activate Only On Platform IOProject:使能,当存在platform.ini文件时激活插件
  • Platformio-ide: Custom PATH:设置成PlatformIO Core下的penv/Scripts文件夹即可。这个选项用于设置该插件的环境变量,以便之后直接在vsc中调用pio相关命令。在本文中设为D:\\PlatformIO_Core\\penv\\Scripts(之后会修改默认的PlatformIO Core安装目录)
  • Platformio-ide: Custom Py Pi Index Url:设置成https://mirrors.bfsu.edu.cn/pypi/web/simple即可。在插件中使用默认python时会下载PlatformIO Core,此时会用到pip下载,这个链接用于设置pip的源
  • 其他默认即可,一共也没几个配置项

值得注意的是,PlatformIO IDE在安装完毕后会将PlatformIO Core默认安装在C:\Users\username\.platformio下,导致之后下载安装的各种库都会安装在这里,正是这个原因导致之前一直没用,C盘装库有点秀

另外一点是VSC的PlatformIO IDE插件会使用自带的python3和PlatformIO Core(不建议更换,PlatformIO IDE插件不支持conda环境),安装完毕后会在<PlatformIO Core>\penv下生成一个隔离环境,其中pio.exeplatformio.exe等命令均在<PlatformIO Core>\penv\Scripts下,所以建议通过将该目录设为环境变量(如上述Platformio-ide: Custom PATH选项)以便直接调用

修改

修改PlatformIO Core安装目录

根据官方文档Environment variables章节,需要在系统环境变量加上PLATFORMIO_CORE_DIR变量,重启VSCode即可发现目录变了,之后记得删除C:\Users\username\.platformio目录即可

环境变量

修改默认工程目录

根据官方文档pio settings章节,在VSCode中打开PlatformIO终端,通过pio settings命令修改默认工程目录:

1
2
3
4
5
6
7
8
# 查看所有可设置选项
pio settings get
# 设置默认工程目录(默认为~/Documents/PlatformIO/Projects)
pio settings set projects_dir ~/Documents/PlatformIO/Projects
# 设置是否启用PlatformIO 诊断数据收集(默认为Yes)
pio settings set enable_telemetry Yes
# 还原默认值
pio settings reset

查看PlatformIO 默认设置

ini配置

这个没啥好说的,直接帅官方链接:“platformio.ini” (Project Configuration File),这一章说的很明白了。

这里挑一些常用的配置说下:

  • board_build.f_cpu:CPU频率设置

  • board_build.mcu:芯片选择

  • board_build.ldscript:不使用bsp的默认链接脚本,指向用户自定义的链接脚本

  • build_flags:编译选项

  • monitor_speed:串口波特率,默认9600

注意:官方默认包含/src下的所有源文件和/include下的所有头文件,如果需要指定包含其他文件夹的头文件或源文件,则须在.ini中添加以下配置:

1
2
build_flags =
-I./include/letter_shell
  • 上述-I配置实际上就是修改编译器的CPPPATH
  • 这里采用行隔开,可以添加多个参数,具体情况详见构建选项

插件冲突

VSCode安装PlatformIO 插件后会和Arduino、Clangd插件冲突,目前的解决办法就是禁用或者卸载,这是官方的讨论贴:“mitaki28.vscode-clang” extension conflicts with “ms-vscode.cpptools”

Clangd在很多方面是比C/C++好的,之前一直用Clangd替代C/C++微软官方的插件中的自动补全、自动跳转等功能,奈何最近出了点问题只能暂时禁用Clangd换回C/C++插件

设置代理

这里首先要感谢使用下一代的嵌入式IDE-PlatformIO 教程这篇帖子,给了我很大启发:

为了写这篇文章,我已经去阅读了PlatformIO的源码,从其中扣出了第三方包的下载网站是这里:http://dl.bintray.com/platformio/dl-packages/,并且看到其下载是使用python的request模块进行下载的(关键代码)。 而再google一下,发现可以设置 HTTP_PROXYHTTPS_PROXY 两个环境变量,来设置下载代理。

不废话,首先参考官方文档可以得知PlatformIO和VSC的代理设置方法:PlatformIO IDE代理设置Network Connections in Visual Studio Code

其中,有两个点要注意下:

  1. 在VSC中修改设置项http.proxyhttp.proxyStrictSSL,更改的是VSC商店中插件下载相关内容:

    1
    2
    "http.proxy": "http://ip:port/",//代理ip及端口
    "http.proxyStrictSSL": false,//代理设置
    • 注意:该方法目前只能设置http协议,如需要其他协议仍需要参考上述VSC的官方文档:Network Connections in Visual Studio Code,在本地VSCode快捷方式中目标参数增加对应命令行参数即可(或者直接通过命令行启动VSC)

      1
      --proxy-server=<scheme>=<uri>[:<port>][;...] | <uri>[:<port>] | "direct://"

      如:

      1
      code --proxy-server="socks5://127.0.0.1:7890"
  2. 设置并修改系统环境变量HTTP_PROXYHTTPS_PROXY才是真正修改PlatformIO下载的各种环境

所以,只需要在系统中设置环境变量HTTP_PROXYHTTPS_PROXY为如下形式即可,但是根据这篇帖子:PlatformIO IDE in VSCode can’t connect to the Internet - blocked by Proxy,有如下需要注意的点:

  • 不包含域名
  • 用户名前面的协议必须为http://而不是https://
  • 最后的斜杠很重要
  • 重新启动VSC

环境变量形式:

1
2
HTTP_PROXY: http://<username>:<password>@you_proxy_ip:8888/
HTTPS_PROXY: http://<username>:<password>@you_proxy_ip:8888/

相关命令

PIO

参考手册:CLI Guide

编辑系统环境变量Path添加 C:\Users\UserName\.platformio\penv\Scripts; 路径即可使PIO命令在整个Windows中可用而不仅仅只局限于VSC中

pio run

1
2
# 运行esp32 idf框架中的menuconfig
pio run -t menuconfig
  • -t:处理指定的目标,可以允许多个目标。
  • VSC自带的命令行不能够在menuconfig中进行上下键选择,必须换到cmd、powershell或者windows terminal下
1
pio run --environment nodemcuv2-rtos -v
  • –environment或-t:指定编译的环境
  • -v:输出编译的详细过程

pio system prune

仅在5.0版本及以上生效

该命令用于移除无效数据:

  • 缓存的 API 请求
  • 下载的缓存包
  • 临时数据
  • 不必要的核心包
  • 不必要的开发平台包
1
2
3
4
# 查看要删除数据
pio system prune --dry-run
# 交互式删除
pio system prune

最后打开PlatformIO Home安装各种库,之后尽情享受PlatformIO带来的乐趣吧