PlatformIOでESP8266を開発する

Arduino Libraryの利用

PlatformIOでもGitHubに公開されているArduino Libraryを利用することができます。
そこで、UNIX_TIMEの環境変数を、こ ちらのライブラリを使用して日本時間に変換してみました。
GitHubに公開されているライブラリを使う場合、iniファイルのlib_depsにURLを指定します。
ビルドすると、必要なライブラリをGitHubから自動的にダウンロードします。
[platformio]
description = UNIX_TIME変数を取り出すサンプル

[common]
build_flags =
 '-D UNIX_TIME="$UNIX_TIME"'
lib_deps =
 https://github.com/PaulStoffregen/Time

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


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

TimeLibを使ってUNIX_TIMEを日本時間に変換します。
#include "Arduino.h"
#include <TimeLib.h>     // https://github.com/PaulStoffregen/Time

// dow() 曜日を示す数値を戻す[0-Sunday, 1-Monday etc.]
uint8_t dow(unsigned long t) {
    return ((t / 86400) + 4) % 7;
}

// dow_char() 曜日文字を戻す [日曜,火曜....]
char * dow_char_JP(byte days) {
  const char *you[] = {"日曜","月曜","火曜","水曜","木曜","金曜","土曜"};
  return (char *)you[days];
}

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  Serial.print("UNIX_TIME=");
  Serial.println(UNIX_TIME);
  unsigned long epoch = atol(UNIX_TIME);
  //Serial.print("epoch=");
  //Serial.println(epoch);

  // Timeライブラリに時間を設定(UNIXタイム)
  // 日本標準時にあわせるために+9時間しておく
  setTime(epoch + (9 * 60 * 60));

  Serial.print("JST time = ");
  Serial.print(year());
  Serial.print('/');
  Serial.print(month());
  Serial.print('/');
  Serial.print(day());
  Serial.print(' ');
  Serial.print(hour());
  Serial.print(':');
  Serial.print(minute());
  Serial.print(':');
  Serial.print(second());
  Serial.print(" ");
  uint8_t DayOfWeek = dow(epoch + (9 * 60 * 60));
  Serial.print(dow_char_JP(DayOfWeek));
  Serial.println();
  delay(1000);
}

日本時間が表示されました。
UNIX_TIME=1549705693
JST time = 2019/2/9 18:48:13 土曜

UNIX_TIMEの環境変数には、起動時の通算秒が設定されるので、常に同じ時間を表示します。
Arduino環境では、configTzTimeでNTPサーバーからカレントの時間を取り出す事ができますが、PlatformIOではこの 関数が使えません。
Arduino環境で動くコードが、PlatformIOで必ず動くとは限りません。

今回のiniファイルでは[platformio]セクションにdescriptionを追加しています。
以下のコマンドでプロジェクトの一覧を表示することができます。
意外と便利です。
$ grep -r "description =" *
project1/platformio.ini:description = Blink LED_BUILTIN
project2/platformio.ini:description = SPIFFSのサイズを確認する
project3/platformio.ini:description = Built-in Variablesを表示するサンプル
project4/platformio.ini:description = UNIX_TIME変数を取り出すサンプル

続く...