Arduino本体の方で現在時刻を取得(誰か需要あるのだろうか…)
ちなみにESP-WROOM-02は単体でArduinoとして使用でき,
ライブラリによって直接NTPから現在時刻を取得できます.
ESP8266のntpの設定は1行で
回路構成
下の記事を参考に回路を組みます.
Arduino Leonardoで試しましたが,本体の3.3Vで駆動できました.
ただし,Software Serialがうまくいかなかったので10, 9番ピンに変更しました.
【Arduino】ESP-WROOM-02( ESP8266 )を使ってWifiで無線通信する
サンプルプログラム概要
- ESP-WROOM-02でWiFi接続
- NICTのjson形式のNTP情報をHTTP/GET
- jsonを展開して現在時刻へ登録
サンプルプログラム
NTP.ino
# include <TESP8266.h> //ESP-WROOM-02ライブラリ
# include <TimeLib.h>
# include <ArduinoJson.h>
// Wifi Config
const char* host = "ntp-a1.nict.go.jp";
const char* path = "/cgi-bin/json";
// Wifi
const char* ssid = "YOUR SSID";
const char* password = "YOUR WIFI PASSWORD";
TESP8266 httpClient(10, 9);
void setup() {
Serial.begin(9600);
// ESP-WROOM-02との接続確認(ATコマンドのテスト)
while (true) {
if (httpClient.statusAT(true)) {
Serial.println("*** ESP-WROOM-02と接続しました。");
break;
}
else Serial.println("*** ESP-WROOM-02と接続できません。");
delay(1000);
}
// アクセスポイントに接続(DHCP)
while (true) {
if (httpClient.connectAP(ssid, password)) {
Serial.println("*** アクセスポイントに接続しました。");
break;
}
else Serial.println("*** アクセスポイントに接続できませんでした。 再試行中...");
delay(1000);
}
// Wifi接続の確認
while (true) {
if (httpClient.statusWiFi()) {
Serial.println("*** Wifi接続しました。");
break;
}
else Serial.println("*** Wifi接続できません。");
delay(1000);
}
ntp(); //本体へ登録
}
void loop() {
time_t t = now();
char s[20];
const char* format = "%04d-%02d-%02d %02d:%02d:%02d";
sprintf(s, format, year(t), month(t), day(t), hour(t), minute(t), second(t));
Serial.println(s);
delay(1000);
}
void ntp() {
StaticJsonBuffer<200> jsonBuffer;
uint32_t filesize = 0;
String resultString = httpClient.get(host, path, filesize);
JsonObject& root = jsonBuffer.parseObject(resultString);
String ntp = root["st"];
long unsigned int nt = ntp.toInt();
setTime(nt);
}
動作サンプル
