2.6 KiB
pio
pio stands for "PlatformIO".
In your context (ESP32 / T-Beam / PlatformIO workflows), “pio” stands for:
PlatformIO
More precisely, pio is the command-line interface (CLI) for the PlatformIO environment.
What PlatformIO is (practically speaking)
PlatformIO is an embedded development framework that wraps:
- toolchains (GCC for ESP32, ARM, etc.)
- build system
- library manager
- uploader (esptool, etc.)
- serial monitor
So instead of juggling:
xtensa-esp32-elf-gcc
esptool.py
arduino-cli
…you use:
pio run
pio run -t upload
pio device monitor
What pio actually does in your workflow
Given your T-Beam usage (as shown in the LilyGO docs, which explicitly include PlatformIO as a supported environment ), pio is orchestrating:
Build
pio run
- compiles your firmware using the environment in
platformio.ini
Upload
pio run -t upload
- invokes the correct uploader (ESP32 →
esptool) - uses the selected
/dev/tty*device
Monitor
pio device monitor
- serial console at configured baud
Why it exists (the “systems view”)
PlatformIO abstracts away:
- board definitions
- pin mappings
- compiler flags
- library dependencies
In your platformio.ini, for example:
[env:node_a]
platform = espressif32
board = esp32-s3-devkitc-1
That single block drives:
- toolchain selection
- linker scripts
- upload protocol
- memory layout
Important nuance (since you’re working low-level)
pio is not:
- a compiler
- a flasher
- an IDE
It is a build orchestration layer (think “make + package manager + uploader + board database”).
Quick mental model
If we translate to Unix analogies:
| Concept | Analogy |
|---|---|
| PlatformIO | portage + make + gcc + flash tool combined |
pio run |
make |
pio run -t upload |
make install (but to hardware) |
platformio.ini |
hybrid of Makefile + config |
Bottom line
When you type:
pio run -t upload
You are saying:
“Use PlatformIO to build this firmware for the specified environment and flash it to the target device.”
PlatformIO configuration file
platformio.ini is the configuration file. Each unit should have it's own entry so that the code can automaticaly be modified.
INSERT IMAGE
Uploading Image
pio run -e flo -t upload --upload-port /dev/ttytFLO