Получите миллисекунду с NTP-сервера - PullRequest
0 голосов
/ 16 марта 2019

В настоящее время я пытаюсь создать таймер круга, используя микроконтроллер ESP32.Я подумываю об использовании NTP-сервера pool.ntp.org для получения точности синхронизации в несколько миллисекунд.

Я пытался сделать что-то подобное

#include <WiFi.h>
#include "time.h"
String time_str;
time_t epoch;
const char* ssid     = "SSID";
const char* password = "PASSWORD";

void setup() { 
  Serial.begin(115200);
  Start_WiFi(ssid,password);
  configTime(0, 0, "pool.ntp.org");
}

void loop() {
  setenv("TZ", "  WIB-7", 1);
  Serial.println("  Jakarta Time  = "+printLocalTime());
  Serial.println();
  delay(100);
}

String printLocalTime(){
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    return "Time Error";
  }
  char output[80];
  //epoch = mktime(&timeinfo);
  //return epoch;
  strftime(output, 80, "%d-%b-%y, %H:%M:%S", &timeinfo);
  time_str = String(output);
  return time_str;
}

int Start_WiFi(const char* ssid, const char* password){
  int connAttempts = 0;
  Serial.println("\r\nConnecting to: "+String(ssid));
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED ) {
    delay(500);
    Serial.print(".");
    if(connAttempts > 20) return -5;
    connAttempts++;
  }
  return 1;
}

Я хотел бы получить точность в миллисекундахstruct tm timeinfo.Я пытался использовать strftime и mktime, но я понимаю, что и strftime, и mktime возвращают только до секунды.

1 Ответ

0 голосов
/ 16 марта 2019

Не уверен, что вы используете структуру

struct tm
{
  int   tm_sec;
  int   tm_min;
  int   tm_hour;
  int   tm_mday;
  int   tm_mon;
  int   tm_year;
  int   tm_wday;
  int   tm_yday;
  int   tm_isdst;
#ifdef __TM_GMTOFF
  long  __TM_GMTOFF;
#endif
#ifdef __TM_ZONE
  const char *__TM_ZONE;
#endif
};

из arduino-esp32 .

Потому что в этой структуре разрешение для маленьких составляет секунды. Почему бы не использовать один из встроенных таймеров?

...