LoginSignup
0
1

More than 5 years have passed since last update.

Arduino > Time > ラッパー関数用ライブラリ実装 > esp8266_160619_timeLib.ino

Last updated at Posted at 2016-06-19
動作確認
ESP-WROOM-02

参考 http://qiita.com/exabugs/items/fe46ec45ff2ffd6c5777

https://github.com/PaulStoffregen/Time
のTimeライブラリ使用

上記のライブラリを使う上で自分が使いたい形に処理をするためのラッパー関数が必要となる。
当面目指しているのはUDPLoggerに対してUDPコマンドから時計合わせを行うこと。これでUDPLoggerが時刻を持ってくれる。

timeLib > esp8266_160619_timeLib.ino

以下のラッパー関数を実装した。

  • void TimeLib_Set_yyyymmddhhnnss(char *srcPtr, int size);
    • yyyymmddhhnnss 形式でのsetTime()実行
  • void TimeLib_SerialTxDateTime(void);
    • 日時のシリアル出力
esp8266_160619_timeLib.ino
#include <TimeLib.h>
#include <stdarg.h> // for va_XXX()

/*
 * using time library by
 * https://github.com/PaulStoffregen/Time
 */

/*
 * v0.1 19 Jun. 2016
 *   - add TimeLib_SerialTxDateTime()
 *   - add myPrintf()
 *   - add Test_TimeLib_Set_yyyymmddhhnnss()
 *   - add TimeLib_Set_yyyymmddhhnnss()
 */

void TimeLib_Set_yyyymmddhhnnss(char *srcPtr, int size)
{
  //         01234567890123
  // srcPtr: yyyymmddhhnnss

  if (size < 14) {
    return; // error
  }
  char szbuf[20];
  int hh, nn, ss, dd, mm, yyyy;

  strcpy(szbuf, srcPtr);
  ss = atoi(&szbuf[12]);
  szbuf[12] = 0x00;
  nn = atoi(&szbuf[10]);
  szbuf[10] = 0x00;
  hh = atoi(&szbuf[8]);
  szbuf[8] = 0x00;
  dd = atoi(&szbuf[6]);
  szbuf[6] = 0x00;
  mm = atoi(&szbuf[4]);
  szbuf[4] = 0x00;
  yyyy = atoi(&szbuf[0]);

  setTime(hh, nn, ss, dd, mm, yyyy);
}

void Test_TimeLib_Set_yyyymmddhhnnss(void)
{
  char settim[] = "20160619101200"; // yyyymmddhhnnss
  TimeLib_Set_yyyymmddhhnnss(settim, sizeof(settim));  
}

void myPrintf(char *fmt, ...) 
{
  char buf[128];
  va_list args;
  va_start(args, fmt);
  vsnprintf(buf, 128, fmt, args);
  va_end(args);
  Serial.print(buf);  
}

void TimeLib_SerialTxDateTime(void)
{
  myPrintf("%02d:%02d:%02d", hour(), minute(), second() );
  myPrintf(",%02d/%02d/%04d", day(), month(), year() );
  Serial.println();
}

例として、上記のコードを以下のプログラムで使う。
同じスケッチ内のタブで定義。

esp8266_160619_testTimeLib.ino
void setup() 
{
  char settim[] = "20160619103200"; // yyyymmddhhnnss
  TimeLib_Set_yyyymmddhhnnss( settim, sizeof(settim) );

  Serial.begin(115200);
}

void loop() {
  TimeLib_SerialTxDateTime();
  delay(3000);
}
結果
10:32:03,19/06/2016
10:32:06,19/06/2016
10:32:09,19/06/2016
10:32:12,19/06/2016
10:32:15,19/06/2016
10:32:18,19/06/2016
10:32:21,19/06/2016
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1