Merkwürdiges VSC Problem

Hallo Zusammen,

der nachfolgende Quellcode übersetzt in der Arduino IDE fehlerfrei, in VSC kommt es zu den Fehlermeldungen:

Building in release mode
Compiling .pio\build\az-delivery-devkit-v4\src\main.cpp.o
src\main.cpp:14:11: error: aggregate 'tm timeinfo' has incomplete type and cannot be defined
 struct tm timeinfo; 
           ^
src\main.cpp: In function 'void initWiFi()':
src\main.cpp:17:3: error: 'WiFi' was not declared in this scope
   WiFi.begin(ssid, password);
   ^

Schlimmer noch, diese Codebestandteile habe ich auch in anderen Projekten verwendet und dort übersetzen sie auch fehlerfrei in VSC.

Hier muss irgendein Problem mit VSC vorliegen. Hat da jemand Erfahrung mit und kann mir Hinweise geben, was ich tun kann?

Der Quellcode:

#include <Arduino.h>
#include <WiFi.h>
#include <Time.h>
#include <Timelib.h>

// Replace with your network credentials
const char* ssid = "xxx";
const char* password = "xxx";

// NTP server to request epoch time
const char* ntpServer = "pool.ntp.org";

// Variable to save current epoch time
unsigned long epochTime; 

// Function that gets current epoch time
unsigned long getTime() {
  time_t now;
  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) {
    //Serial.println("Failed to obtain time");
    return(0);
  }
  time(&now);
  return now;
}

// Initialize WiFi
void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

void setup() {
  Serial.begin(115200);
  initWiFi();
  configTime(0, 0, ntpServer);
}

void loop() {
  epochTime = getTime();
  Serial.print("Epoch Time: ");
  Serial.println(epochTime);
  delay(1000);
}

Vielleicht noch die plaformio.ini:

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:az-delivery-devkit-v4]
platform = espressif32
board = az-delivery-devkit-v4
framework = arduino
monitor_speed = 115200

Deinstallation, Rechner Neustart und Neuinstallation brachte keine Änderung.

Vielen Dank und viele Grüße
Werner

Die WiFi.h bezogenen Fehlermeldungen ließen sich beseitigen, nachdem ich in platformio.h folgende Zeile hinzugefügt habe:

lib_deps = arduino-libraries/WiFi@^1.2.7

Bei dem time.h bezogenen Fehlermeldungen habe ich festgestellt, dass ich bei dem anderen Projekt, wo es nicht zu Fehlermeldungen kommt, tatsächlich ctime.h und nicht time.h eingebunden hatte. Das funktioniert über ein #include <ctime.h>, anders als in dem anderen Projekt aber nicht, es kommt:

src\main.cpp:3:19: fatal error: ctime.h: No such file or directory

Mit der time.h Bibliothek scheint es das Problem zu geben, dass VSC unter Windows eine Time.h findet, weil Dateinamen nicht case sensitiv sind. Diese ist aber verkehrt. Lösen läßt sich das über den Eintrag in der platformio.ini

lib_ignore = Time

Siehe dazu auch:
('time' not declared in Platformio but works in Arduino IDE - PlatformIO IDE - PlatformIO Community)

Zusätzlich habe ich die time Bibliothek hinzugefügt, so dass es am Ende so aussieht:

lib_deps = 
	arduino-libraries/WiFi@^1.2.7
	paulstoffregen/Time@^1.6.1
lib_ignore = Time

Die Compilerfehler mit der time.h Lib sind jetzt weg.
Die Compilerfehler, die dieselben sind, als würde die #include <WiFi.h> Zeile fehlen, sind jedoch wieder da, nachdem sie zwischenzeitlich verschwunden waren.

Edit:
Ich habe nun aus den libdeps (s.o.) die WiFi Zeile wieder rausgenommen.
Nun kompiliert es erstmals fehlerfrei. Keine Ahnung...

Du hast ein sehr massives Problem.

In der Arduino.IDE unter Ubuntu muss als erstes die Groß-/Kleinschreibung wieder hergestellt werden.
Die lib heißt: TimeLib

Und dann sieht das insgesamt nicht besser aus.
Irgendwas geht da mächtig schief, wenn Du mehrere gleichnamige libs hast.

kommentiere die time.h aus.
und siehe....

Mehrere Bibliotheken wurden für "WiFi.h" gefunden
 Benutzt: /home/user1/arduino-1.8.19/hardware/expressif/esp32/libraries/WiFi
 Nicht benutzt: /home/user1/arduino-1.8.19/libraries/WiFi
Bibliothek WiFi in Version 2.0.0 im Ordner: /home/user1/arduino-1.8.19/hardware/expressif/esp32/libraries/WiFi  wird verwendet
Bibliothek Time-master in Version 1.6.1 im Ordner: /home/user1/arduino-1.8.19/portable/sketchbook/libraries/Time-master  wird verwendet
/home/user1/arduino-1.8.19/hardware/expressif/esp32/tools/xtensa-esp32-elf/bin/xtensa-esp32-elf-size -A /tmp/arduino_build_882012/sketch_feb10c.ino.elf
Der Sketch verwendet 721009 Bytes (55%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes.
Globale Variablen verwenden 43548 Bytes (13%) des dynamischen Speichers, 284132 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.

Es gibt zwei unterschiedliche time.h. Die, die bei den ESP-Definitionen dabei ist, stört den Rest.

wenn du das für einen ESP32 kompilieren wirst, dann stellt sich mir die Frage, weswegen du du da eine TimeLib überhaupt brauchst.

der ESP32 Core hat alles was es für Zeitberechnungen, NTP und Sommerzeit Umschaltung braucht. Da reicht die time.h aus dem Core!

Hier hab ich einen Beispielsketch:
NTP for the ESP32 including day light saving without 3rd party library

@noiasca, ja, Du hast recht. Die TimeLib.h ist noch ein Überbleibsel aus meinen Versuchen gewesen, das Problem in den Griff zu kriegen. Mit nur der time.h geht es auch.

@my_xy_projekt, ist der Text "Mehrere Bibliotheken..." eine Compilermeldung oder woher stammt der? Du hast also # include time.h auskommentiert, eine Übersetzung angestoßen und dann gab es die Hinweise über mehrere WiFi.h Bibliotheken?
Wenn ja dann probiere ich das später auch aus.

Es werden mehrere Libs gefunden, was auch vollkommen normal ist.
Fürs compilieren wird ann die richtige ausgewählt. Eigentlich.
So auch hier.
Also nix, was Dich stören muss.