Add PlatformIO
parent
c98037baa7
commit
763aea9e07
1 changed files with 138 additions and 0 deletions
138
PlatformIO.md
Normal file
138
PlatformIO.md
Normal file
|
|
@ -0,0 +1,138 @@
|
||||||
|
## Build System Architecture
|
||||||
|
|
||||||
|
This project is built using **PlatformIO Core (PIO)**, a Python-based embedded build system. PlatformIO manages the ESP32-S3 toolchain (compiler, linker, and associated binaries required to build firmware for a target MCU (Microcontroller Unit, here, the ESP32-S3)), Arduino framework, dependency resolution, compilation, firmware linking, device upload, and serial monitoring.
|
||||||
|
|
||||||
|
The `pio` executable is the PlatformIO Command Line Interface (CLI - a text-based interface used to interact with software via typed commands, e.g. Konsole or console). It reads the `platformio.ini` configuration file and constructs isolated build environments, each representing a deterministic firmware configuration (e.g., `node_a`, `node_b`).
|
||||||
|
|
||||||
|
All build artifacts are generated inside the automatically managed `.pio/` directory. Exercise directories contain compiled objects, firmware binaries, and toolchain packages.
|
||||||
|
|
||||||
|
For reproducibility, PlatformIO may be installed inside a dedicated Python virtual environment rather than relying on system-wide Python. I recommend using a dedicated Python virtual environment. See https://wiki.archlinux.org/title/Python/Virtual_environment
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Important Distinction
|
||||||
|
|
||||||
|
PlatformIO is:
|
||||||
|
|
||||||
|
* A build orchestration system
|
||||||
|
* Toolchain manager
|
||||||
|
* Dependency manager
|
||||||
|
* Firmware packaging system
|
||||||
|
|
||||||
|
It is not:
|
||||||
|
|
||||||
|
* Just a compiler
|
||||||
|
* Just an IDE plugin
|
||||||
|
* Just Arduino
|
||||||
|
# PlatformIO Core (PIO)
|
||||||
|
|
||||||
|
## What “pio” Actually Is
|
||||||
|
|
||||||
|
`pio` is the command-line interface (CLI) for **PlatformIO Core** (the command-line engine that performs builds and device operations.).
|
||||||
|
|
||||||
|
|
||||||
|
### MCU
|
||||||
|
|
||||||
|
Microcontroller Unit —
|
||||||
|
|
||||||
|
### Framework
|
||||||
|
|
||||||
|
A software abstraction layer for embedded programming.
|
||||||
|
In your case:
|
||||||
|
|
||||||
|
* Arduino framework for ESP32
|
||||||
|
* Could also be ESP-IDF (Espressif IoT Development Framework)
|
||||||
|
|
||||||
|
### Environment (PlatformIO environment)
|
||||||
|
|
||||||
|
A named build configuration block inside `platformio.ini`.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
[env:node_a]
|
||||||
|
```
|
||||||
|
|
||||||
|
Each environment defines:
|
||||||
|
|
||||||
|
* Target board
|
||||||
|
* Framework
|
||||||
|
* Build flags
|
||||||
|
* Libraries
|
||||||
|
* Upload protocol
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# How PlatformIO Actually Works Internally
|
||||||
|
|
||||||
|
PlatformIO Core is written in Python. When you run:
|
||||||
|
|
||||||
|
```
|
||||||
|
pio run -e node_a
|
||||||
|
```
|
||||||
|
|
||||||
|
PlatformIO:
|
||||||
|
|
||||||
|
1. Reads `platformio.ini`
|
||||||
|
2. Determines the selected environment
|
||||||
|
3. Installs (if necessary):
|
||||||
|
|
||||||
|
* Compiler toolchain
|
||||||
|
* Framework packages
|
||||||
|
* Python dependencies
|
||||||
|
4. Builds firmware
|
||||||
|
5. Places artifacts in `.pio/build/<environment>/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# What the `.pio/` Directory Is
|
||||||
|
|
||||||
|
`.pio/` is:
|
||||||
|
|
||||||
|
> The build output and package cache directory managed by PlatformIO Core.
|
||||||
|
|
||||||
|
It contains:
|
||||||
|
|
||||||
|
* Compiled object files
|
||||||
|
* Firmware binaries
|
||||||
|
* Dependency builds
|
||||||
|
* Platform packages
|
||||||
|
* Toolchain components
|
||||||
|
|
||||||
|
It is automatically generated and typically excluded from version control.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Relationship to Python
|
||||||
|
|
||||||
|
PlatformIO Core runs inside a Python environment.
|
||||||
|
|
||||||
|
There are two common models:
|
||||||
|
|
||||||
|
## 1. System Python (default install)
|
||||||
|
|
||||||
|
PlatformIO installs into:
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.platformio/
|
||||||
|
```
|
||||||
|
|
||||||
|
and uses its own managed virtual environment internally.
|
||||||
|
|
||||||
|
## 2. Custom Python Virtual Environment (recommended for reproducibility)
|
||||||
|
|
||||||
|
You can explicitly create a Python virtual environment in your home folder and then "source" the activate command.
|
||||||
|
|
||||||
|
```
|
||||||
|
python3 -m venv [shortname for your environment, i.e. "rnsenv" meaning Reticulum Network Server ENVironment]
|
||||||
|
source ~.rnsenv/bin/activate
|
||||||
|
```
|
||||||
|
Your console will now have a visual cue that you are in your custom Python environment:
|
||||||
|
|
||||||
|
Thereafter you install Python's platformio package:
|
||||||
|
|
||||||
|
```pip install platformio```
|
||||||
|
|
||||||
|
Note: to exit the environment, just enter: ```deactivate```. Since your environment includes in its PATH ~.rnsenv/bin/, the "deactivate" command will be seen.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue