PlatformIOでESP8266を開発する

Serial出力とビルド環境の判定


以下のコマンドでファームの書き込みと同時に、シリアルモニターが起動します。
シリアルモニターのボーレートは-bで指定します。
$ pio run -t upload && pio device monitor -b 115200

余り情報が有りませんが、--upload-portで書き込みに使用するポートを指定することができます。
複数のターゲットを1台のホストで同時に開発するときには、書き込みに使用するポートを指定する必要が有ります。
$ pio run -t upload --upload-port /dev/ttyUSB0 && pio device monitor -b 115200

blink.cppのソースにシリアル出力のコードを追加して実行します。
/**
 * Blink
 *
 * Turns on an LED on for one second,
 * then off for one second, repeatedly.
 */
#include "Arduino.h"

#ifndef LED_BUILTIN
#define LED_BUILTIN 13
#endif

void setup()
{
  Serial.begin(115200);
  delay(1000);Serial.println("start sketch 1000");
  delay(2000);Serial.println("start sketch 2000");
  delay(3000);Serial.println("start sketch 3000");
#if defined(BUILD_ENV_NAME)
  Serial.print("BUILD_ENV_NAME=");
  Serial.println(BUILD_ENV_NAME);
#endif
#if defined(nodemcuv2)
  Serial.println("environment is nodemcuv2");
#endif
#if defined(d1_mini)
  Serial.println("environment is d1_mini");
#endif
  // initialize LED digital pin as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
  Serial.println("turn the LED on");
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);

  Serial.println("turn the LED off");
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

シリアルモニターの起動に少し時間がかかるので、setup()時に2秒程度待ちが必要です。
--- Miniterm on /dev/ttyUSB0  115200,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
start sketch 2000
start sketch 3000
turn the LED on
turn the LED off
turn the LED on
turn the LED off



ビルドで使われた環境をプログラム中で判定することができます。
platform.iniを一部変更し、build_flagsを追加します。
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
build_flags = '-D"$PIOENV"'

[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino
build_flags = '-D"$PIOENV"'

再度コンパイルして書き込むと以下の様に表示されます。
これで、MCUによる違いを吸収することができます。
--- Miniterm on /dev/ttyUSB0  9600,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
start sketch 2000
start sketch 3000
environment is nodemcuv2
turn the LED on
turn the LED off
turn the LED on
turn the LED off

platform.iniを一部変更し、build_flagsにBUILD_ENV_NAMEの定義(define)を追加します。
複数の定義(define)を指定するときはスペースで区切って指定します。
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
;build_flags = '-D"$PIOENV"'
build_flags = '-DBUILD_ENV_NAME="$PIOENV"' '-D"$PIOENV"'

[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino
;build_flags = '-D"$PIOENV"'
build_flags = '-DBUILD_ENV_NAME="$PIOENV"' '-D"$PIOENV"'

再度コンパイルして書き込むとBUILD_ENV_NAMEの値が表示されます。
--- Miniterm on /dev/ttyUSB0  9600,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
start sketch 2000
start sketch 3000
BUILD_ENV_NAME=nodemcuv2
environment is nodemcuv2
turn the LED on
turn the LED off
turn the LED on
turn the LED off

続く...