1. ROS2 硬件开发环境为什么总在 PlatformIO 这一步卡住
如果你正在做 ROS2 硬件相关的开发,大概率会遇到这样一个组合:Ubuntu 上装好 VSCode,准备用 PlatformIO 写 ESP32 或 STM32 的固件,结果插件首页一直转圈 loading,新建项目卡在 “Please wait…” 不动,或者 Python 版本不对导致 pio 命令直接报错。这不是你操作有问题,而是 PlatformIO 的资源服务器在境外,插件默认又会去拉内置的 core 和 Python,网络一抖就全卡住。
这篇内容聚焦的就是这个场景:Ubuntu + VSCode + PlatformIO + Python3.10 的完整搭建,重点放在离线安装思路、安装失败排查、新建项目卡顿的逐步验证动作。适合已经会基本 Linux 命令、正在做 ROS2 硬件层开发、被 PlatformIO 网络问题折磨过的同学。我会给出可复制的 settings.json 和 config.toml 骨架,也会顺带说清楚怎么用统一的 API 通道来管理开发中调用的模型 Key,避免每个工具各配一套。
整篇按“先装基础环境 → 再装 PlatformIO → 配非内置 core → 验证请求 → 排错”的顺序走,每一步都有命令和预期结果,你可以直接跟着敲。
2. 前置准备:VSCode、Python3.10 与统一 Key 通道
2.1 安装 VSCode(用 deb 包而不是商店)
Ubuntu 应用商店里的 VSCode 版本有时会缺依赖,建议直接下 deb 包。到官网下载code_*.deb,然后:
cd ~/Downloads sudo dpkg -i code_1.89.1-1715060508_amd64.deb # 如果报依赖错误 sudo apt-get install -f装完后终端直接输code能拉起窗口就说明 PATH 没问题。这一步别跳过验证,后面 PlatformIO 插件依赖 VSCode 的扩展宿主进程,装歪了会连带出问题。
2.2 源码编译 Python3.10
PlatformIO 对 Python 版本敏感,系统自带的 3.8 或 3.12 都可能让 pio 报错,所以单独编一个 3.10 最稳。
sudo apt-get update sudo apt-get install -y build-essential zlib1g-dev libncurses5-dev \ libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget -P ~/Downloads https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tar.xz cd ~/Downloads tar xvJf Python-3.10.0.tar.xz cd Python-3.10.0 ./configure --prefix=/usr/local/python3.10 --enable-optimizations make -j$(nproc) sudo make install编译大概几分钟。装完把路径加进环境:
echo 'export PATH=/usr/local/python3.10/bin:$PATH' >> ~/.bashrc source ~/.bashrc python3 -V # 应输出 Python 3.10.02.3 用 TaoToken 统一管理开发中的模型 Key
做 ROS2 硬件开发时,除了 PlatformIO,你可能还会用 VSCode 里的 AI 补全、串口日志分析、甚至自己写脚本调模型。如果每个工具都单独配 Key,管理起来很乱。我习惯用一个统一通道,把 Key 和 API 地址集中在一处。
TaoToken 提供的就是这种统一入口:一个 Key 走所有模型调用,API 地址固定为https://taotoken.net/api。你可以在控制台创建 Key,然后在各个工具里复用。具体入口:
- 模型对话体验:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite
- 控制台创建 Key:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
- API Keys 管理:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
拿到 Key 后,在终端里可以先验证一下通道是否通:
export TAOTOKEN_API_KEY="sk-你的key" curl -s https://taotoken.net/api/v1/models \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" | head -c 300返回模型列表就说明 Key 和网络都正常。这一步和 PlatformIO 本身无关,但后面写自动化脚本、分析编译日志时会用到,先配好省事。
3. 可复制配置:PlatformIO 离线安装与非内置 core
3.1 方法一:插件市场直装(大概率会卡)
在 VSCode 扩展栏搜 PlatformIO IDE 点安装。如果右下角进度条卡在 “PlatformIO IDE (core)” 不动,或者左侧狐狸头点开一直 loading,说明它在拉境外资源失败了。别干等,直接走方法二。
3.2 方法二:pip 装 core + VSIX 离线装插件
先在终端把 core 装到用户目录:
# 如果之前装过,先卸 pip uninstall platformio -y # 从源码装(网络好会快) pip install -U https://github.com/platformio/platformio-core/archive/develop.zip # 或者用国内镜像装稳定版 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple platformio # 升级 pip 和系统包 pip3 install --upgrade pip sudo apt-get upgrade -y验证 core 是否可用:
which pio # 预期输出类似 /home/lll/.local/bin/pio pio --version然后去 VSCode 扩展市场页面下载 PlatformIO IDE 的 vsix 离线包,在 VSCode 里按Ctrl+Shift+P,输入 “Install from VSIX”,选中下载的文件安装。
3.3 settings.json 骨架:让插件用非内置 core
装完插件后,打开 VSCode 设置,搜platformio,找到 “在 settings.json 中编辑”,加入这三条:
{ "platformio-ide.useBuiltinPIOCore": false, "platformio-ide.useBuiltinPython": false, "platformio-ide.customPATH": "/home/lll/.local/bin" }customPATH填which pio输出的目录,不是文件本身。注意路径别写错,写错插件会找不到 core,狐狸头还是打不开。
3.4 platformio.ini 骨架:ESP32 项目示例
新建项目时如果卡住,可以先手动建一个platformio.ini,内容如下:
[env:esp32doit-devkit-v1] platform = espressif32 board = esp32doit-devkit-v1 framework = arduino monitor_speed = 115200 upload_speed = 921600这个文件放在项目根目录,PlatformIO 会按它去拉对应的平台包和工具链。第一次拉包慢是正常的,但不会卡死。
4. 验证请求:从 pio home 到新建项目成功
4.1 终端验证 core
pio home预期:终端输出启动日志,浏览器自动打开 PlatformIO Home 页面。如果浏览器没弹,手动访问日志里给的http://127.0.0.1:8008。页面能打开,说明 core 和 Python 都正常。
4.2 VSCode 内验证插件
重启 VSCode,点左侧狐狸头图标,再点 “Open”。如果这次能出 Home 页面,说明useBuiltinPIOCore: false生效了。
4.3 命令行初始化项目(解决新建卡顿)
如果 VSCode 里新建项目一直转圈,别在 GUI 里等,直接在目标目录用命令行初始化:
cd ~/ros2_ws/src pio project init --board esp32doit-devkit-v1这条命令会快速把需要的文件拉下来。等它跑完,再回 VSCode 打开这个目录,就能正常识别为 PlatformIO 项目了。实测下来,命令行初始化比 GUI 新建稳得多,因为 GUI 会额外做一些索引和校验,网络一慢就卡。
4.4 编译验证
pio run预期输出编译进度,最后出现[SUCCESS]。第一次编译会下载工具链,耐心等。如果卡在 “Downloading…”,看下一节的排查。
5. 本篇常见错排查
5.1 插件首页一直 loading
原因基本是内置 core 拉不下来。检查settings.json里三条配置是否都加了,customPATH是否指向which pio的目录。改完必须完全重启 VSCode,不是重载窗口。
5.2 新建项目卡在 “Please wait…”
GUI 新建会去拉平台包,网络不好就卡。改用pio project init --board xxx命令行方式,或者先在platformio.ini里写好配置再打开目录。
5.3 pio 命令找不到
which pio没输出,说明~/.local/bin不在 PATH。加一下:
echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc source ~/.bashrc5.4 Python 版本冲突报错
如果 pio 报ModuleNotFoundError或语法错误,多半是用了系统 Python。确认python3 -V是 3.10,且settings.json里useBuiltinPython: false。必要时在customPATH里把 Python3.10 的 bin 目录也带上。
5.5 编译时下载工具链超时
这是平台包下载慢,不是配置错。可以多试几次,或者手动把平台包放到~/.platformio/packages下。命令行pio run比 GUI 编译更容易看到具体卡在哪一步。
5.6 串口权限问题
ROS2 硬件开发常要烧录,Ubuntu 下普通用户没串口权限会报Permission denied:
sudo usermod -aG dialout $USER # 重新登录生效6. 后续开发中的 Key 与通道管理
环境搭好之后,日常开发里还会反复用到模型调用:比如让 AI 帮你分析 PlatformIO 的编译报错、生成 ROS2 节点模板、或者写串口数据解析脚本。这时候统一 Key 通道的价值就出来了——不用在每个脚本里硬编码不同的 Key。
如果你主要是长期做编码和 Agent 类任务,可以看下 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite
如果你用的是 Claude Code 这类工具做 ROS2 代码辅助,接入方式参考:https://taotoken.net/claude-code?utm_source=taotoken_aicg_blog_end&utm_content=claude_code&utm_campaign=rewrite
API 地址统一用https://taotoken.net/api,Key 在控制台创建后复制到各工具的配置里即可。这样 PlatformIO 管硬件编译,TaoToken 管模型调用,两边互不干扰,排查问题时也清楚是环境问题还是 Key 问题。
最后提醒一句:PlatformIO 的坑九成出在网络和 Python 版本上,把settings.json那三条配好、用命令行初始化项目,基本就能绕开大部分卡顿。剩下的就是耐心等第一次工具链下载完。