microReticulumTbeam/docs/pio.md

2.4 KiB
Raw Blame History

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 youre 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.”