2016-11-09 9 views
2

Я хотел бы получить временную метку с arduino-esp8266 (https://github.com/esp8266/Arduino).Как получить временную метку в arduino-esp8266

Но я не знаю, как это получить.

Предположим, нам нужно получить время из Интернета, так как ESP8266 не имеет часов. Нужно ли это делать только один раз или каждый раз, когда нам нужна метка времени?

Я уже подключен Wi-Fi к Интернету.

+0

стоит упомянуть: вы можете может получить модуль RTC для менее $ 1 отправлен ... http://www.ebay.com/itm/201577236297 – dandavis

ответ

6

NTP - это проверенный способ дистанционно получать время. Библиотеки NTP, такие как обозначения @Marcel, делают UDP-соединения с сервером с интервалом. Поэтому вам не нужно делать опрос на сервере перед его использованием. Вот использование библиотеки NTP со смещением 1 час и 1 минуту интервал обновления:

#include <NTPClient.h> 
#include <ESP8266WiFi.h> 

#define NTP_OFFSET 60 * 60  // In seconds 
#define NTP_INTERVAL 60 * 1000 // In miliseconds 
#define NTP_ADDRESS "europe.pool.ntp.org" 

WiFiUDP ntpUDP; 
NTPClient timeClient(ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL); 

void setup(){ 
    timeClient.begin(); 
} 

void loop() { 
    timeClient.update(); 
} 

Чтобы получить временную метку или отформатированные времени в любое время у хочу использовать функции:

String formattedTime = timeClient.getFormattedTime(); 
unsigned long epcohTime = getEpochTime(); 
+0

Спасибо! Я получаю сообщение об ошибке на вашей четвертой строке: 'error: 'WiFiUDP' не называет тип' Мне нужна другая библиотека для этого? –

+1

Я добавил это: '#include ' и он компилирует –

+0

'timeClient.getFormattedTime();' = 00:04:49, когда это 12:46, как мне добавить это? (Я в Европе Брюссель) –

1

Глядя на этот код, я не думаю, что этот микроконтроллер имеет встроенные часы, как уже упоминалось. Поскольку у вас есть Wi-Fi, хотя вы можете сделать веб-запрос, чтобы получить его вместо этого.

Я хотел бы использовать запрос REST к месту, как этот

https://timezonedb.com/api

который даст вам обратно JSon отформатирован времени. Если вам нужна точность +/- несколько секунд, это будет нормально. Вы могли бы снизить пропускную способность и увеличить время автономной работы, установив время, подобное этому, затем используя внутренний таймер для вычисления смещения вместо того, чтобы делать запрос каждый раз, когда вам нужна отметка времени. В конце концов вам нужно будет потребовать время и «исправить» его с момента вашего таймера, который, вероятно, не является точным в течение длительных периодов времени, плюс он может в итоге перевернуться.

Если вам нужно время более точное, то вам, скорее всего, понадобятся часы. Вы можете попытаться сделать немного коррекции, основанной на ping, но в целом насколько точной она должна быть основана на ваших требованиях к проекту.

1

Свяжитесь с конкретным API-интерфейсом даты и времени в Интернете, как описано в @ user2927848. Или отправьте простой HTTP-запрос на сервер, которому вы доверяете, и прочитайте заголовок ответа Date.

Если вам нужна большая точность, вы можете использовать NTP client for Arduino.