PlatformIOでESP8266を開発する

Built-in Variables


前回、$PIOENVのBuilt-in Variablesを紹介しましたが、それ以外にもいくつかのBuilt-in Variablesが用意されています。
こ ちらにPlatformIOのBuilt-in Variablesが公開されています。
以下のBuilt-in Variablesを使うことができます。

• $PYTHONEXE, full path to current Python interpreter
• $UNIX_TIME, current time in Unix format
• $PIOENV, name of build environment from “platformio.ini” (Project Configuration File)
• $PIOPLATFORM, name of development platform
• $PIOFRAMEWORK, name of framework
• $PIOHOME_DIR, PlatformIO Home directory
• $PROJECT_DIR, project directory
• $PROJECTBUILD_DIR, project build directory per all environments
• $BUILD_DIR, build directory per current environment

これらを使うために、iniファイルを以下のように変更します。
文字列の環境変数が含まれているので、全体をシングルクォートで、変数名をダブルクォートで囲まないとビルドが通りません。
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
build_flags =
 '-D PYTHONEXE="$PYTHONEXE"'
 '-D UNIX_TIME="$UNIX_TIME"'
 '-D PIOENV="$PIOENV"'
 '-D PIOPLATFORM="$PIOPLATFORM"'
 '-D PIOFRAMEWORK="$PIOFRAMEWORK"'
 '-D PIOHOME_DIR="$PIOHOME_DIR"'
 '-D PROJECT_DIR="$PROJECT_DIR"'
 '-D PROJECTBUILD_DIR="$PROJECTBUILD_DIR"'
 '-D BUILD_DIR="$BUILD_DIR"'

以下のコードで全ての変数を表示してみました。
#include "Arduino.h"

void setup()
{
  // enable serial
  Serial.begin(9600);delay(2000);

#if defined(PYTHONEXE)
  Serial.print("PYTHONEXE=");
  Serial.println(PYTHONEXE);
#endif

#if defined(UNIX_TIME)
  Serial.print("UNIX_TIME=");
  Serial.println(UNIX_TIME);
#endif

#if defined(PIOENV)
  Serial.print("PIOENV=");
  Serial.println(PIOENV);
#endif

#if defined(PIOPLATFORM)
  Serial.print("PIOPLATFORM=");
  Serial.println(PIOPLATFORM);
#endif

#if defined(PIOFRAMEWORK)
  Serial.print("PIOFRAMEWORK=");
  Serial.println(PIOFRAMEWORK);
#endif

#if defined(PIOHOME_DIR)
  Serial.print("PIOHOME_DIR=");
  Serial.println(PIOHOME_DIR);
#endif

#if defined(PROJECT_DIR)
  Serial.print("PROJECT_DIR=");
  Serial.println(PROJECT_DIR);
#endif

#if defined(PROJECTBUILD_DIR)
  Serial.print("PROJECTBUILD_DIR=");
  Serial.println(PROJECTBUILD_DIR);
#endif

#if defined(BUILD_DIR)
  Serial.print("BUILD_DIR=");
  Serial.println(BUILD_DIR);
#endif

}

void loop() { }

このように表示されます。
PYTHONEXE=/usr/bin/python
UNIX_TIME=1549668471
PIOENV=nodemcuv2
PIOPLATFORM=espressif8266
PIOFRAMEWORK=arduino
PIOHOME_DIR=/home/pi/.platformio
PROJECT_DIR=/home/pi/platformio/project3
PROJECTBUILD_DIR=/home/pi/platformio/project3/.pioenvs
BUILD_DIR=/home/pi/platformio/project3/.pioenvs/nodemcuv2



iniファイルに[common]セクションを定義し、以下のように定義することで、全ての環境で同じbuild_flagsを使うことができま す。
セクション名は何でも構いません。
[common]
build_flags =
 '-D PYTHONEXE="$PYTHONEXE"'
 '-D UNIX_TIME="$UNIX_TIME"'
 '-D PIOENV="$PIOENV"'
 '-D PIOPLATFORM="$PIOPLATFORM"'
 '-D PIOFRAMEWORK="$PIOFRAMEWORK"'
 '-D PIOHOME_DIR="$PIOHOME_DIR"'
 '-D PROJECT_DIR="$PROJECT_DIR"'
 '-D PROJECTBUILD_DIR="$PROJECTBUILD_DIR"'
 '-D BUILD_DIR="$BUILD_DIR"'

[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
build_flags = ${common.build_flags}

[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino
build_flags = ${common.build_flags}

nodemcuv2でビルドしても、d1_miniでビルドしても、同じフラグでビルドされます。
PYTHONEXE=/usr/bin/python
UNIX_TIME=1549669280
PIOENV=nodemcuv2
PIOPLATFORM=espressif8266
PIOFRAMEWORK=arduino
PIOHOME_DIR=/home/pi/.platformio
PROJECT_DIR=/home/pi/platformio/project3
PROJECTBUILD_DIR=/home/pi/platformio/project3/.pioenvs
BUILD_DIR=/home/pi/platformio/project3/.pioenvs/nodemcuv2

PYTHONEXE=/usr/bin/python
UNIX_TIME=1549669379
PIOENV=d1_mini
PIOPLATFORM=espressif8266
PIOFRAMEWORK=arduino
PIOHOME_DIR=/home/pi/.platformio
PROJECT_DIR=/home/pi/platformio/project3
PROJECTBUILD_DIR=/home/pi/platformio/project3/.pioenvs
BUILD_DIR=/home/pi/platformio/project3/.pioenvs/d1_mini

続く...