🎯 写在前面:为什么会有这篇文章

刚开始搞这个的时候,AI只告诉我“下一步、下一步、点这个、点那个”。我照着做,板子确实能跑了,灯也闪了,文章也写出来了。

但有一个问题一直卡在心里:为什么每次都要先建那个 platformio.ini 文件,然后才能用 Open Project 打开?

当时只是记住了“要这么做”,但不知道“为什么要这么做”。

后来晚上睡不着,就开始瞎琢磨。这一琢磨,就琢磨出了一堆问题。这篇文章,就是把这些问题的答案整理出来。

第一部分:那些我一开始没搞明白的东西

问题1:platformio.ini 到底是干嘛的?
(写清楚它是配置文件,给插件看的,没有它插件就不认这个文件夹)

问题2:src 文件夹和 main.cpp 是什么关系?
(写清楚 src 是放代码的地方,main.cpp 是默认的代码文件)

问题3:.pio/ 文件夹能不能删?
(写清楚它是编译临时文件,可以删,会自动生成)

问题4:库和工具链藏在哪?
(写清楚它们在 C:\Users\你的用户名\.platformio\packages\ 里,第一次编译时下载,以后就不用再下)

第二部分:突然想到的两个问题

问题5:那 PlatformIO 插件本身,是不是也是这么来的?

查了一下,还真是。

VS Code 先做出来了,留了插件接口。PlatformIO 的开发者为了让大家能在 VS Code 里用嵌入式开发,就按照 VS Code 的接口规则写了一个插件。所以插件不是 VS Code 自带的,是后来装进去的,它必须“适应”VS Code 才能工作。

而且插件第一次装的时候也要下载(下在 .vscode/extensions/ 里),以后就不用再下——这个逻辑和工具链、库的下载一模一样。

问题6:操作系统到底是怎么找到这些东西的?

想明白上面这些之后,我又开始琢磨另一个问题:为什么每次找这些东西,都要知道具体的路径?

后来慢慢想通了:操作系统就像一个超大的档案室,里面所有文件的位置它都知道。但它不会主动告诉你“xxx在哪”,你得自己去查,或者按它规定的规则去找。

就像你家里每个东西放在哪,你自己知道,但家里墙上不会贴一张“全屋物品位置图”。新来的客人找不到东西,得问你。

操作系统也一样:它知道每个文件在哪,但它不会主动展示。你得知道路径,或者用搜索功能。

🧩 项目里这几样东西的关系

platformio.ini
这是一个文本文件,放在项目根目录,创建项目时自动生成。你可以改它,而且必须改——因为里面要写你用哪块板子、用什么框架、要装什么库。它必须存在,没有它插件就不认这个文件夹。

src/ 文件夹
这是一个文件夹,放在项目根目录,创建项目时自动生成。你不能改它的名字,也不能删它——因为这是放源代码的地方。它必须存在,不然你的代码没地方放。

src/main.cpp
这是一个文本文件,放在 src/ 文件夹里,创建项目时自动生成。你可以改它,而且正常来说你肯定要改——因为里面才是你真正写代码的地方。让灯闪、让舵机动、让点阵屏显示,都靠改这个文件。

这里要补充一句:虽然 main.cpp 在技术上“可以有也可以没有”——比如你可以把它改名、删掉,换成别的 .cpp 文件——但正常来说,你肯定是要改它的。因为如果你不改 main.cpp,里面就是空的或者默认生成的几行代码,那灯就不会按你想要的频率闪,舵机也不会按你想要的角度转。所以“可以有也可以没有”是从文件存在的角度说的。从“你要让板子干活”的角度说,你不仅要让它有,还要让它有“你写的内容”。不改它,你折腾这一大圈干嘛呢?

.pio/ 文件夹
这是一个文件夹,放在项目根目录,编译时自动生成。你不能手动改里面的东西,但可以删掉它——下次编译会自动重建。里面放的是编译过程中产生的临时文件,你不用管它。


库是别人写好的代码,放在 C:\Users\你的用户名\.platformio\packages\ 里。第一次编译时下载,以后就不用再下。

这里突然想到一件事:这个逻辑和 PlatformIO 插件本身的下载好像啊!插件第一次装的时候也要下载,以后再用就不用重新下了。只不过插件下在 .vscode/extensions/ 里,工具链和库下在 .platformio/packages/ 里——两个不同的仓库,但“一次下载,永久使用”的逻辑是一样的。

你不能改库,但可以在 platformio.ini 里写 lib_deps 告诉插件要用哪个库。编译时,工具链会把你写的代码和库的代码合并在一起。

工具链
工具链是真正干活的程序(编译器、链接器、烧录工具),也放在 C:\Users\你的用户名\.platformio\packages\ 里。第一次编译时下载,以后就不用再下。你不能改它,插件会调用它来编译你的代码。

🎯第三部分: 从写代码到灯亮,全过程

你在 src/main.cpp 里写代码,告诉编译器要让灯闪。

你在 platformio.ini 里写配置,告诉插件要用什么板子、要装什么库。

你点上传。插件读 platformio.ini,知道要用什么板子、什么库。插件去中央仓库找工具链和库。插件调用工具链,工具链读你的 main.cpp。

工具链看到 main.cpp 里 #include 了库,就去中央仓库拿那个库。把你的代码和库的代码合并,翻译成机器语言。中间文件放 .pio/ 里。

翻译好的程序通过 USB 送到 ESP32。ESP32 运行程序。灯闪了。

🤔 突然想到的另一个问题:操作系统到底是怎么找到这些东西的?

想明白上面这些之后,我又开始琢磨另一个问题:为什么每次找这些东西,都要知道具体的路径?比如 .platformio/packages/、.vscode/extensions/,这些路径是哪来的?

后来慢慢想通了:操作系统就像一个超大的档案室,里面所有文件的位置它都知道。但它不会主动告诉你“xxx在哪”,你得自己去查,或者按它规定的规则去找。

就像你家里每个东西放在哪,你自己知道,但家里墙上不会贴一张“全屋物品位置图”。新来的客人找不到东西,得问你。

操作系统也一样:

· 它知道每个文件在哪
· 但它不会主动展示
· 你得知道路径,或者用搜索功能

所以那些路径不是“秘密”,只是操作系统默认你知道怎么找。不知道的时候,就查文档、问AI、或者翻自己之前的记录。

这让我想到:其实整个计算机世界的设计逻辑就是这样的——把“存东西的地方”和“找东西的方式”分开,中间靠“路径”连接。你掌握了这个逻辑,就掌握了操作系统的底层设计。

第四部分:✅ 你现在应该清楚的事

platformio.ini 是配置文件,给插件看的,必须存在,你必须改它。

src/ 是放源代码的文件夹,必须存在,你不能改名。

main.cpp 是你写代码的地方,必须存在,而且你必须改它——不然你折腾这一圈干嘛?

.pio/ 是编译临时文件夹,可以删,会自动生成,不用管它。

库是别人写的代码,放在中央仓库,你在 platformio.ini 里写 lib_deps 告诉插件要用哪个。

工具链是真正干活的程序,也放在中央仓库,插件调用它来编译。

插件是传话的,它不干活,但知道怎么安排工具链干活。

VS Code 是编辑器,提供界面,让你写代码、点按钮。

操作系统是档案室,知道所有文件在哪,但不会主动告诉你,你得自己按路径找。

💡 一句话终极总结

platformio.ini 告诉插件怎么配,插件去中央仓库找工具链和库,工具链编译 src/main.cpp 里的代码,中间文件放 .pio/,最终程序传给 ESP32 运行。而 main.cpp 你必须改——不然你折腾这一圈干嘛呢?

第五部分:🎯 写在最后:最近在折腾什么

文章写完了,但折腾还没停。

最近在看 SolidWorks 插件开发的事——想做一个能接 AI 的小工具,直接告诉它“我要一个支架,高 50mm,宽 30mm,四个螺丝孔”,它就能自动生成模型。

为什么要搞这个?

因为我想给机器人设计一个 3D 外壳。之前都是买现成的板子拼,但拼出来的东西总差点意思——线露在外面,传感器没地方固定,看起来就像个半成品。

找人建模?问了一圈价格,默默关掉了聊天窗口。🤐

所以还是自己来吧。

一开始以为写插件就是“会点编程就能搞”,一查才发现后面还蹲着一堆东西:C# 基础、SolidWorks API、对象模型、COM 交互……再加上之前听人提过几次“DDD”(领域驱动设计),说是能帮人理清复杂系统的结构,也打算顺带着看看。

能成吗?不知道。

但这一路走过来,从 47% 卡死到现在能写几千字的文章,最大的收获不是学会了什么工具,而是知道了一件事:

看不懂没关系,查。查不到没关系,问。问不明白没关系,试。试错了没关系,记下来。

写插件这件事也一样——能成最好,给自己省一笔建模钱;不能成,至少摸了一遍 C# 和 SolidWorks API,下次遇到相关的问题,知道去哪找答案。

反正最坏的结果,也就是再写一篇文章。😎(本文经AI润色)

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐