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.
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
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...
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.
@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.