PlatformIOでESP8266を開発する

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


以下のコマンドでファームの書き込みと同時に、シリアルモニターが有効になります。
シリアルモニターのボーレートは-bで指定します。
$ pio run -e nodemcuv2 -t upload && 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()
{
  // enable serial
  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(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()
{
  // turn the LED on (HIGH is the voltage level)
  Serial.println("turn the LED on");
  digitalWrite(LED_BUILTIN, HIGH);

  // wait for a second
  delay(1000);

  // turn the LED off by making the voltage LOW
  Serial.println("turn the LED off");
  digitalWrite(LED_BUILTIN, LOW);

   // wait for a second
  delay(1000);
}

シリアルモニターの起動に少し時間がかかるので、setup()時に2秒程度待ちが必要です。
--- 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
turn the LED on
turn the LED off
turn the LED on
turn the LED off
turn the LED on



ビルドで使われた環境をプログラム中で判定することができます。
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

再度コンパイルして書き込むと以下の様に表示されます。
--- 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
turn the LED on

続く...