Skocz do zawartości

ESP8266, NTPClient, time.h, problem z gmtime


SOYER

Pomocna odpowiedź

Cześć, tydzień temu działało a dzisiaj nie. Na podstawie tego tutoriala(biblioteka i przykładowy kod) zrobiłem obsługę pobierania czasu dla mojego nodeMCU. Wszystko się kompilowało, wgrywało i działa po dziś dzień. Chciałem jednak wprowadzić małe poprawki w innej części kodu(mój asystent pieca CO) i wywala mi:

'gmtime' was not declared in this scope

a dokładnie

"C:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\esp8266\\tools\\xtensa-lx106-elf-gcc\\1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.4.2/tools/sdk/include" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.4.2/tools/sdk/lwip2/include" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.4.2/tools/sdk/libc/xtensa-lx106-elf/include" "-IC:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_508794/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11 -MMD -ffunction-sections -fdata-sections -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DARDUINO=10810 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD=\"ESP8266_NODEMCU\"" -DESP8266 "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.4.2\\cores\\esp8266" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.4.2\\variants\\nodemcu" "-ID:\\ARDUINO\\projekty\\libraries\\MAX31850_OneWire" "-ID:\\ARDUINO\\projekty\\libraries\\DallasTemperature" "-ID:\\ARDUINO\\projekty\\libraries\\DFRobotDFPlayerMini" "-ID:\\ARDUINO\\projekty\\libraries\\HCSR04\\src" "-ID:\\ARDUINO\\projekty\\libraries\\Timers-master" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.4.2\\libraries\\ESP8266WiFi\\src" "-ID:\\ARDUINO\\projekty\\libraries\\Blynk\\src" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.4.2\\libraries\\ESP8266mDNS" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.4.2\\libraries\\ArduinoOTA" "-IC:\\Users\\user\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.4.2\\libraries\\SoftwareSerial" "-ID:\\ARDUINO\\projekty\\libraries\\NTPClient" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_508794\\sketch\\PIEC_nodeMCU_NTPClient.ino.cpp" -o "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_508794\\sketch\\PIEC_nodeMCU_NTPClient.ino.cpp.o"
C:\Users\user\AppData\Local\Temp\arduino_modified_sketch_466627\PIEC_nodeMCU_NTPClient.ino: In function 'void pobierzCzas()':

PIEC_nodeMCU_NTPClient:197:48: error: 'gmtime' was not declared in this scope

   struct tm *ptm = gmtime ((time_t *)&epochTime); 

                                                ^

PIEC_nodeMCU_NTPClient:198:17: error: invalid use of incomplete type 'struct tm'

   monthDay = ptm->tm_mday;

                 ^

In file included from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\cwchar:44:0,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\postypes.h:40,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\char_traits.h:40,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\string:40,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\random:41,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algo.h:65,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\algorithm:62,

                 from C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/Arduino.h:255,

                 from C:\Users\user\AppData\Local\Temp\arduino_build_508794\sketch\PIEC_nodeMCU_NTPClient.ino.cpp:1:

C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2/tools/sdk/libc/xtensa-lx106-elf/include/wchar.h:56:8: error: forward declaration of 'struct tm'

 struct tm;

        ^

PIEC_nodeMCU_NTPClient:199:21: error: invalid use of incomplete type 'struct tm'

   currentMonth = ptm->tm_mon+1;

                     ^

In file included from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\cwchar:44:0,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\postypes.h:40,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\char_traits.h:40,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\string:40,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\random:41,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algo.h:65,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\algorithm:62,

                 from C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/Arduino.h:255,

                 from C:\Users\user\AppData\Local\Temp\arduino_build_508794\sketch\PIEC_nodeMCU_NTPClient.ino.cpp:1:

C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2/tools/sdk/libc/xtensa-lx106-elf/include/wchar.h:56:8: error: forward declaration of 'struct tm'

 struct tm;

        ^

PIEC_nodeMCU_NTPClient:200:20: error: invalid use of incomplete type 'struct tm'

   currentYear = ptm->tm_year+1900;

                    ^

In file included from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\cwchar:44:0,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\postypes.h:40,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\char_traits.h:40,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\string:40,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\random:41,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algo.h:65,

                 from c:\users\user\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\algorithm:62,

                 from C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/Arduino.h:255,

                 from C:\Users\user\AppData\Local\Temp\arduino_build_508794\sketch\PIEC_nodeMCU_NTPClient.ino.cpp:1:

C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2/tools/sdk/libc/xtensa-lx106-elf/include/wchar.h:56:8: error: forward declaration of 'struct tm'

 struct tm;

        ^

Znaleziono wiele bibliotek w "ESP8266WiFi.h"
Wykorzystane: C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\ESP8266WiFi
Znaleziono wiele bibliotek w "BlynkSimpleEsp8266.h"
Wykorzystane: D:\ARDUINO\projekty\libraries\Blynk
Niewykorzystane: D:\ARDUINO\arduino187\Arduino\libraries\Blynk
Znaleziono wiele bibliotek w "ESP8266mDNS.h"
Wykorzystane: C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\ESP8266mDNS
Znaleziono wiele bibliotek w "ArduinoOTA.h"
Wykorzystane: C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\ArduinoOTA
Znaleziono wiele bibliotek w "DallasTemperature.h"
Wykorzystane: D:\ARDUINO\projekty\libraries\DallasTemperature
Niewykorzystane: D:\ARDUINO\arduino187\Arduino\libraries\MAX31850_DallasTemp
Niewykorzystane: D:\ARDUINO\projekty\libraries\MAX31850_DallasTemp
Znaleziono wiele bibliotek w "HCSR04.h"
Wykorzystane: D:\ARDUINO\projekty\libraries\HCSR04
Niewykorzystane: D:\ARDUINO\arduino187\Arduino\libraries\HCSR04
Znaleziono wiele bibliotek w "Timers.h"
Wykorzystane: D:\ARDUINO\projekty\libraries\Timers-master
Niewykorzystane: D:\ARDUINO\arduino187\Arduino\libraries\Timers-master
Znaleziono wiele bibliotek w "NTPClient.h"
Wykorzystane: D:\ARDUINO\projekty\libraries\NTPClient
Znaleziono wiele bibliotek w "OneWire.h"
Wykorzystane: D:\ARDUINO\projekty\libraries\MAX31850_OneWire
Niewykorzystane: D:\ARDUINO\arduino187\Arduino\libraries\MAX31850_OneWire
Znaleziono wiele bibliotek w "DFRobotDFPlayerMini.h"
Wykorzystane: D:\ARDUINO\projekty\libraries\DFRobotDFPlayerMini
Znaleziono wiele bibliotek w "SoftwareSerial.h"
Wykorzystane: C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\SoftwareSerial
Użycie biblioteki MAX31850_OneWire w wersji 1.0.1 z folderu: D:\ARDUINO\projekty\libraries\MAX31850_OneWire 
Użycie biblioteki DallasTemperature w wersji 3.9.0 z folderu: D:\ARDUINO\projekty\libraries\DallasTemperature 
Użycie biblioteki DFRobotDFPlayerMini w wersji 1.0.5 z folderu: D:\ARDUINO\projekty\libraries\DFRobotDFPlayerMini 
Użycie biblioteki HCSR04 w wersji 1.0.0 z folderu: D:\ARDUINO\projekty\libraries\HCSR04 
Użycie biblioteki Timers-master w wersji 16.4.1 z folderu: D:\ARDUINO\projekty\libraries\Timers-master 
Użycie biblioteki ESP8266WiFi w wersji 1.0 z folderu: C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\ESP8266WiFi 
Użycie biblioteki Blynk w wersji 0.6.1 z folderu: D:\ARDUINO\projekty\libraries\Blynk 
Użycie biblioteki ESP8266mDNS z folderu C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\ESP8266mDNS (legacy)
Użycie biblioteki ArduinoOTA w wersji 1.0 z folderu: C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\ArduinoOTA 
Użycie biblioteki SoftwareSerial w wersji 1.0 z folderu: C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\libraries\SoftwareSerial 
Użycie biblioteki NTPClient w wersji 3.1.0 z folderu: D:\ARDUINO\projekty\libraries\NTPClient 
exit status 1
'gmtime' was not declared in this scope

Po poszukiwaniach rozwiązania problemu, doszedłem tylko do tego, że może to mieć coś wspólnego z bibliotekami time.h, lub Time.h. Jednak w moim projekcie nie używam tych bibliotek. Coś mnie tknęło i jednak dołożyłem najpierw time.h, a później zamiast niej Time.h. O dziwo problem z kompilacją zniknął i wszystko pięknie się kompiluje. Nie wiem czy fizycznie działa, bo zabrakło mi czasu by sprawdzić.

Powtarzam, wcześniej wszystko śmigało bez problemu i nagle jakaś niespodzianka.

Kto mi wytłumaczy zależności?

Moja funkcja pobierania czasu wygląda tak:

void pobierzCzas(){
  timeClient.update();
  unsigned long epochTime = timeClient.getEpochTime();
  currentHour = timeClient.getHours();
  currentMinute = timeClient.getMinutes();
  weekDay = timeClient.getDay();

  struct tm *ptm = gmtime ((time_t *)&epochTime); 
  monthDay = ptm->tm_mday;
  currentMonth = ptm->tm_mon+1;
  currentYear = ptm->tm_year+1900;
}

Przyznam bez bicia, że nie mam pojęcia co robi ta linijka:

struct tm *ptm = gmtime ((time_t *)&epochTime);

 

Link do komentarza
Share on other sites

13 minut temu, SOYER napisał:

Przyznam bez bicia, że nie mam pojęcia co robi ta linijka:

Akurat w tym przypadku dokładnie to samo, co robi funkcja gmtime w całym cywilizowanym świecie 🙂 Najprościej poczytać linuksowego mana:

https://linux.die.net/man/3/gmtime

Masz tam wszystko objaśnione, Arduinowe funkcje mogą być co prawda uproszczone ale ogólna zasada jest taka sama.

  • Lubię! 1
Link do komentarza
Share on other sites

Ok, to już doczytałem tutaj, rozumiem, ze to jakaś struktura która niesie informację o czasie(liczba sekund od 1970), z której można wyciągnąć dzień, miesiąc, godzinę itd. za pomocą tm_cośtam, ale co to za wskaźnik(?) ptm?. Skąd się wszystko bierze? To chyba jakaś ważna rzecz ten time.h...?

Dlaczego wcześniej działało bez dołączonej tej biblioteki? W moim szkicu działającym teraz w piwnicy na pewno nie ma jej dołączonej, a działa...

 

Link do komentarza
Share on other sites

10 minut temu, SOYER napisał:

ale co to za wskaźnik(?) ptm?

Hm... sądząc po kodzie jest to wskaźnik na strukturę tm, a sądząc po nazwie pointer to tm 😉 A swoją drogę przeczytaj tego mana, tam jest dużo więcej na ten temat.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.