Ошибка при использовании NtpClientLib.h

ntpclient

Поскольку ядро ESP8266 обновлено до версии 3.0 (теперь это 3.0.2), я сталкиваюсь с ошибками при использовании этой библиотеки.

Во-первых, устаревание байта до uint8 (надеялся, что обновление библиотеки NTP до бета-версии 3.0.2 решит эту проблему), но теперь даже при использовании встроенного файла примера библиотеки не удается отобразить то же сообщение об ошибке байта.

Есть ли обходной путь ?

In file included from /home/guy/Documents/git/Arduino/libraries/NtpClientLib/examples/NTPClientESP8266/NTPClientESP8266.ino:38:
/home/guy/Documents/git/Arduino/libraries/NtpClientLib/src/NtpClientLib.h:501:32: error: reference to 'byte' is ambiguous
  501 |     bool summertime (int year, byte month, byte day, byte hour, byte weekday, byte tzHours);
      |                                ^~~~
In file included from /home/guy/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.0.4-gcc10.3-1757bed/xtensa-lx106-elf/include/c++/10.3.0/cmath:42,
                 from /home/guy/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.0.4-gcc10.3-1757bed/xtensa-lx106-elf/include/c++/10.3.0/math.h:36,
                 from /home/guy/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/cores/esp8266/Arduino.h:34,
                 from sketch/NTPClientESP8266.ino.cpp:1:

ПРАВКА 1 :: ВЕРСИИ

pic1 pic2 IDE+Sketch file

, 👍0

Обсуждение

Я только что скомпилировал этот пример без проблем с 3.0.2. Возможно, в вашей установке Arduino / ESP8266 что-то не так., @Majenko

Или, может быть, ваши библиотеки устарели...?, @Majenko

@Majenko - смотрите установленную версию, IDE и пример сбоя sktech, @Guy . D

Не используйте менеджер библиотек для установки библиотек. Скачайте его прямо с Github. Вы можете в значительной степени гарантировать, что все, что есть в менеджере библиотек, будет устаревшим., @Majenko

@Majenko - Потрясающе!! Ты был прав. Я удалил все библиотеки NtpClient и переустановил только с github... и теперь все в порядке. Спасибо тебе, @Guy . D


1 ответ


Лучший ответ:

1

В esp8266 Arduino 3 произошли серьезные изменения, поэтому авторам библиотек необходимо адаптировать свои библиотеки к этим изменениям. Проверьте хранилище библиотеки на наличие исправлений.

Библиотека NtpClient была отмечена автором как устаревшая. Причина заключалась в том, что существует лучший способ работы с NTP на ESP. Теперь библиотека была "перезапущена" в качестве альтернативы функциям SDK, потому что автор решил проблему с точностью до микросекунд.

Если вам не нужна точность в микросекундах, вам не нужно использовать библиотеку Arduino NtpClient на esp8266 или esp32. SDK Espressif поддерживает передачу времени NTP во внутренний RTC.

Оба ядра ESP Arduino имеют примеры для NTP. Для esp8266 это пример esp8266/NTP-TZ-DST.

Часть NTP должна быть в настройке()

configTime(TIME_ZONE, "pool.ntp.org");

TIME_ZONE должно быть значением из констант TZ_ из TZ.h, например, у меня есть

#include <TZ.h>
#define TIME_ZONE TZ_Europe_Bratislava

SDK будет отслеживать время с помощью внутреннего RTC ESP и периодически корректировать его с сервера NTP.

Вы можете получить время esp8266 RTC с помощью

time_t t = time(nullptr); // epoch
struct tm *tm = localtime(&t);
uint8_t minute = tm->tm_min;
uint8_t hour = tm->tm_hour;

если вы хотите подождать в setup (), пока время не будет восстановлено, вы можете использовать

  time_t now = time(nullptr);
  while (now < SECS_YR_2000) {
    delay(100);
    now = time(nullptr);
  }
,

Во-первых, большое вам спасибо. Во-вторых, есть ли способ автоматического обновления перехода на летнее время ?, @Guy . D

@Guy.D, он автоматически настраивается на дневное освещение, экономя время. Я построил будильник с esp8266 и этими функциями. https://github.com/jandrassy/SunriseClock, @Juraj

Жесткий ваш ответ позволяет избежать использования запрошенной библиотеки, но, чтобы отметить его как ответ, мне нужно, чтобы вы перефразировали ответ Майенко, который фактически решил эту проблему., @Guy . D

@Парень.D, я обновил ответ, @Juraj