microReticulumTbeam/docs/pio.md

141 lines
2.6 KiB
Markdown
Raw Normal View 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:
```bash
xtensa-esp32-elf-gcc
esptool.py
arduino-cli
```
…you use:
```bash
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
```bash
pio run
```
* compiles your firmware using the environment in `platformio.ini`
### Upload
```bash
pio run -t upload
```
* invokes the correct uploader (ESP32 → `esptool`)
* uses the selected `/dev/tty*` device
### Monitor
```bash
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:
```ini
[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:
```bash
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