Arduino에서 NTP 획득 (ESP-WROOM-02 사용)

Arduino 본체쪽으로 현재 시각을 취득(누군가 수요 있는 것일까…)

덧붙여서 ESP-WROOM-02는 단독으로 Arduino로 사용할 수 있으며,
라이브러리를 통해 NTP에서 직접 시간을 얻을 수 있습니다.
ESP8266의 ntp 설정은 한 줄로

회로 구성



아래의 기사를 참고로 회로를 조립합니다.
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);
    }
    
    

    동작 샘플



    좋은 웹페이지 즐겨찾기