ESP falsche IDE admin.html Versionsanzeige

Hallo,

weiß jemand warum auf der allseits bekannten fips admin Seite die falsche IDE Version gezeigt wird? Das sollte bei mir eigentlich 2.3.2 (IDE) sein.

image

In der vorletzten Zeile wird das mittels ARDUINO abgefragt.

void handleonce() {
  if (server.arg(0) != "") {
    WiFi.setHostname(server.arg(0).c_str());
    File file = LittleFS.open("/config.json", FILE_WRITE);
    file.printf("[\"%s\"]", WiFi.getHostname());
    file.close();
  }           
  String fname = String(__FILE__).substring( 3, String(__FILE__).lastIndexOf ('\\'));
  String temp = R"({"File":")" + fname.substring(fname.lastIndexOf ('\\') + 1, fname.length()) + R"(", "Build":")" +  (String)__DATE__ + " " + (String)__TIME__ +
                R"(", "SketchSize":")" + formatBytes(ESP.getSketchSize()) + R"(", "SketchSpace":")" + formatBytes(ESP.getFreeSketchSpace()) +
                R"(", "LocalIP":")" +  WiFi.localIP().toString() + R"(", "Hostname":")" + WiFi.getHostname() + R"(", "SSID":")" + WiFi.SSID() +
                R"(", "GatewayIP":")" +  WiFi.gatewayIP().toString() +  R"(", "Channel":")" +  WiFi.channel() + R"(", "MacAddress":")" +  WiFi.macAddress() +
                R"(", "SubnetMask":")" +  WiFi.subnetMask().toString() + R"(", "BSSID":")" +  WiFi.BSSIDstr() + R"(", "ClientIP":")" + server.client().remoteIP().toString() +
                R"(", "DnsIP":")" + WiFi.dnsIP().toString() + R"(", "ChipModel":")" + ESP.getChipModel() + R"(", "Reset1":")" + resetReason[rtc_get_reset_reason(0)] +
                R"(", "Reset2":")" + resetReason[rtc_get_reset_reason(1)] + R"(", "CpuFreqMHz":")" + ESP.getCpuFreqMHz() + R"(", "HeapSize":")" + formatBytes(ESP.getHeapSize()) +
                R"(", "FreeHeap":")" + formatBytes(ESP.getFreeHeap()) + R"(", "MinFreeHeap":")" + formatBytes(ESP.getMinFreeHeap()) +
                R"(", "ChipSize":")" +  formatBytes(ESP.getFlashChipSize()) + R"(", "ChipSpeed":")" + ESP.getFlashChipSpeed() / 1000000 +
                R"(", "ChipMode":")" + flashChipMode[ESP.getFlashChipMode()] + R"(", "IdeVersion":")" + ARDUINO + R"(", "SdkVersion":")" + ESP.getSdkVersion() + R"("})";
  server.send(200, "application/json", temp);     // Json als Objekt
}

Evtl. wird die Variable ARDUINO von der 2.x nicht mehr richtig gefüllt.

DEBUG_F("\nSketchname: %s\nBuild: %s\t\tIDE: %d.%d.%d\n\n", __FILE__, __TIMESTAMP__, ARDUINO / 10000, ARDUINO % 10000 / 100, ARDUINO % 100 / 10 ? ARDUINO % 100 : ARDUINO % 10);

Gruß Tommy

Hallo,

Danke, genauso ist es.

Build: Wed Apr 24 19:43:20 2024		IDE: 1.6.7

Ich habe bisher noch keine IDE, die nicht portable ist, verwendet.
Muss demnächst mal.....

Hallo,

falls das wichtig ist, ich denke hier ist es egal ob Portable oder nicht, meine IDE 2.3.2 ist auch quasi Portable, sprich nicht installiert, ich habe das "IDE .zip" runtergeladen.
Deine Seite mit den vielen Beispielen ist übrigens Gold wert. Vielen Dank an der Stelle. :+1:

Habe ich gemacht.


  Serial.printf("\nSketchname: %s\nBuild: %s\t\tIDE: %d.%d.%d\n%s\n\n",
                (__FILE__), (__TIMESTAMP__), ARDUINO / 10000, ARDUINO % 10000 / 100, ARDUINO % 100 / 10 ? ARDUINO % 100 : ARDUINO % 10, ESP.getFullVersion().c_str());

Ausgabe:

Sketchname: Webserver.ino

Build: Fri Apr 26 15:43:06 2024 IDE: 1.6.7

SDK:2.2.2-dev(38a443e)/Core:3.1.2=30102000/lwIP:STABLE-2_1_3_RELEASE/glue:1.2-65-g06164fb/BearSSL:b024386

Die IDE Version steckt in der Konstante "ARDUINO".
In den 1.x.x IDE Versionen funktioniert es.

Aber nicht unabhängig. Wenn Du 2 davon hast, benutzen sie gemeinsame Verzeichnisse. Bei der portablen 1.8.19 habe ich 4 unabhängige IDE mit unterschiedlichen Core-Versionen, die sich nicht gegenseitig ins Gehege kommen.

Gruß Tommy

Hallo,

@ Tommy: Ist mir schon klar, man darf nur eine "Portable" der 2er IDE verwenden.

@ Fips: Also muss sich Arduino dem Fehler annehmen?

Hallo,

das Problem ist schon länger bekannt aber scheinbar zu unwichtig.
Issue #725 Mai-2020

Hallo,

@Derfips
Wenn du möchtest kannst du die Admin Webseite noch erweitern um den Cpp Standard mit dem kompiliert wurde.

unsigned int getCppStandardUse (void)
{
    unsigned int var {0};
    switch(__cplusplus) {
      case 199711: var = 98; break;
      case 201103: var = 11; break;
      case 201402: var = 14; break;
      case 201703: var = 17; break;
      case 202002: var = 20; break;
      case 202302: var = 23; break;
      default: break;
    }
    return var;
}

Wegen der falschen IDE Versionsanzeige habe ich einmal folgendes probiert und etwas mehr. Admin.ino geändert/ergänzt in Funktion handleonce()

R"(", "ChipMode":")" + flashChipMode[ESP.getFlashChipMode()] + R"(", "IdeVersion":")" + ARDUINO_ESP32_IDE_VERSION + R"(", "CoreVersion":")" + ARDUINO_ESP32_CORE_VERSION +
R"(", "SdkVersion":")" + ESP.getSdkVersion() + R"(", "C++ Version":")" + getCppStandardUse() + R"("})";

Admin.html geändert/ergänzt

document.querySelector('#core').innerHTML = obj['CoreVersion'].replace(/(\d)(\d)(\d)(\d)/,obj['CoreVersion'][3]!=0 ? '$1.$3.$4' : '$1.$3.');
document.querySelector('#sdk').innerHTML = obj['SdkVersion'];
document.querySelector('#cppVer').innerHTML = obj['C++ Version'];


<span>Arduino Core Version:</span>
<span>SDK Version:</span>
<span>C++ Version:</span>


<span id="core">0</span>
<span id="sdk">0</span>
<span id="cppVer">0</span>

Die Arduino.h habe ich ergänzt um

#define ARDUINO_ESP32_CORE_VERSION 200013
#define ARDUINO_ESP32_IDE_VERSION 20302

Wo das ursprüngliche ARDUINO define steht habe ich noch nicht gefunden. Man kann in der IDE leider nicht zu deren Definition springen.

Alles in allen sieht es am Ende so aus:
image
Ob die SDK Version stimmt weiß ich noch nicht.

Edit:
Oder man kann die CORE Versionsanzeige für html zusammensetzen aus

#define ESP_ARDUINO_VERSION_MAJOR   2
#define ESP_ARDUINO_VERSION_MINOR   0
#define ESP_ARDUINO_VERSION_PATCH   13

zu finden in der esp_arduino_version.h

In der core_version.h stehen verschiedene Schreibweisen defines der Core Version drin. Vielleicht geht damit auch nochwas.

Das weiß ich zufällig.

-DARDUINO={runtime.ide.version}
Wird hier für C definiert: ArduinoCore-avr/platform.txt at master · arduino/ArduinoCore-avr · GitHub
Und noch einige Male, für C++ und für ASM

Also nach runtime.ide.version weiter suchen.

Hallo,

das ist leider die falsche IDE. In der IDE 2 ist ein falscher Wert hinterlegt, was von Arduino.cc niemanden interessiert, komischerweise.
Das Einzige was ich der IDE entlocken kann ist
image
da müßte doch in irgendeiner Datei genau diese Zeile
#define ARDUINO 10607
stehen. Danach habe ich gesucht. Ich such mal weiter ...

Nein!
Ich habe dir gezeigt wo es definiert ist.
Kannst du glauben, oder nicht. Deine Wahl.
Und die Definition ist für beide IDE identisch, da sie zur Boarddefinition gehört und nicht zur IDE

Nein!
Das define wird mit dem Kommandozeilenparameter -D eingeleitet.
Nach #define ARDUINO 10607 kannst du Jahre suchen. Das gibt es nicht.

Wie schon gesagt: Suche nach runtime.ide.version wenn du Erfolg haben möchtest.
Der Wert muss aus der IDE kommen.

Hallo,

hmmm okay.

Hier: arduino-cli/commands/compile/compile.go at 50918b49184f2596b38d747d148090d0f8ba612e · arduino/arduino-cli · GitHub

???

Hallo,

so richtig klar komme ich damit nicht. Dort steht zwar die gleiche Zahl wie sie meine IDE mir anzeigt, aber ich finde die Datei nicht. Wenn diese demnach nicht vorhanden ist, woher kommt dann diese Versionsangabe? Noch ein Gedanke. Wenn ich weiter überlege hat die Angabe 10607 >> "1.06.07" so gar nichts mit einer IDE Version zu tun. Meine Annahme ist, weil die IDE 2 auf einem komplett neuen Sockel aufbaut, dass die alten defines noch irgendwo rumgeistern aber nichts mehr zu bedeuten haben, irgendwo stand Deprecated dabei.

Ich lasse das mit dem IDE Version Problem erstmal sein.

Meine Arduino.h habe ich wieder bereinigt.
Habe diese Zeile im Sketch stehen.
#define USED_ARDUINO_IDE_VERSION 20302 // IDE 2.3.2
und entsprechen die Admin.ino geändert

Die verwendete Core Version kann man sich mit bestehenden defines zusammenbasteln.
constexpr unsigned long USED_ESP_VERSION { (ESP_ARDUINO_VERSION_MAJOR*10000UL) + (ESP_ARDUINO_VERSION_MINOR*100) + ESP_ARDUINO_VERSION_PATCH };

Auch entsprechend in der Admin.ino in handleonce() geändert.

R"(", "ChipMode":")" + flashChipMode[ESP.getFlashChipMode()] + R"(", "IdeVersion":")" + USED_ARDUINO_IDE_VERSION + R"(", "CoreVersion":")" + USED_ESP_VERSION +
R"(", "SdkVersion":")" + ESP.getSdkVersion() + R"(", "C++ Version":")" + getCppStandardUse() + R"("})";

Die SDK Angabe stimmt übrigens. Das ist gleich zu setzen mit der ESP IDF Version. Hierfür gibt es gefühlt Tausend Begriffe für eine Versionsangabe. Aktuell ist Arduino ESP Core 2.0.16 mit SDK 4.4.7. Irgendwie bekomme ich aber keine Updates in meiner IDE2 zur Verfügung gestellt. Sind ja schon 3 Versionen weiter. Ich bin mit der "Gesamtsituation" irgendwo unzufrieden. :wink:

Danke, für die Hinweise.
Ich werde mich demnächst damit beschäftigen.

Hallo,

wegen falscher IDE Version habe ich "eine" Lösung gefunden.
Man kann bspw. in einer platform.local.txt folgende Zeilen reinschreiben.

compiler.cpp.extra_flags=-DARDUINO=50388
compiler.c.extra_flags=-DARDUINO=50388

Dann gibt Serial.println(ARDUINO) diese 50388 aus. Allerdings hagelt es Warnungen ohne Ende beim kompilieren. Meine Einstellung Compiler-Meldungen ist auf Alle eingestellt.

<command-line>: warning: "ARDUINO" redefined
<command-line>: note: this is the location of the previous definition

Den praktischen Nutzen halte ich deswegen suboptimal.

Noch eine Anmerkung. :thinking:. Eigentlich ist die Version der IDE doch egal. Oder? Wichtiger ist zu wissen, wenn man es wissen möchte, mit welcher Core Version und ggf. Cpp Standard kompiliert wurde. Die IDE ist ja nur die äußere Hülle mit der alles "bedient" wird. :thinking:

Hallo,

Ich weiß nicht ob das hier ein Thema ist. Ich habe gelesen und festgestellt das man verketten mit += statt + Operator viel RAM spart. Nebenbei soll noch Fragmentierung vermieden werden, weil nicht jedesmal durch den + Operator neuer RAM angefordert wird.

mit + Operator:
Der Sketch verwendet 930289 Bytes

mit += Operator:
Der Sketch verwendet 929681 Bytes

Macht satte 608 Bytes. Für den ESP vielleicht fast nicht wichtig, aber auch er kann "geflutet" werden. Kleinere ATmegas könnte das ihr Laufzeit Überleben retten. Extremfall ich weiß, wollte ich dennoch kundt tun.

Erfordert am Ende nur eine andere "Formatierung".

  ausgabeAdmin = R"({"File":")";
  ausgabeAdmin += fname.substring(fname.lastIndexOf ('\\') + 1, fname.length());
  ausgabeAdmin += R"(", "Build":")";
  ausgabeAdmin += (String)__DATE__;
  ausgabeAdmin += " ";
  ausgabeAdmin += (String)__TIME__;
  ausgabeAdmin += R"(", "SketchSize":")";
  ausgabeAdmin += formatBytes(ESP.getSketchSize());
  ausgabeAdmin += R"(", "SketchSpace":")";
  ausgabeAdmin += formatBytes(ESP.getFreeSketchSpace());
  ausgabeAdmin += R"(", "LocalIP":")";
  ausgabeAdmin += WiFi.localIP().toString();
  ausgabeAdmin += R"(", "Hostname":")";
  ausgabeAdmin += WiFi.getHostname();
  ausgabeAdmin += R"(", "SSID":")";
  ausgabeAdmin += WiFi.SSID();
  ausgabeAdmin += R"(", "GatewayIP":")";
  ausgabeAdmin += WiFi.gatewayIP().toString();
  ausgabeAdmin += R"(", "Channel":")";
  ausgabeAdmin += WiFi.channel();
  ausgabeAdmin += R"(", "MacAddress":")";
  ausgabeAdmin += WiFi.macAddress();
  ausgabeAdmin += R"(", "SubnetMask":")";
  ausgabeAdmin += WiFi.subnetMask().toString();
  ausgabeAdmin += R"(", "BSSID":")";
  ausgabeAdmin +=  WiFi.BSSIDstr();
  ausgabeAdmin += R"(", "ClientIP":")";
  ausgabeAdmin += server.client().remoteIP().toString();
  ausgabeAdmin += R"(", "DnsIP":")";
  ausgabeAdmin += WiFi.dnsIP().toString();
  ausgabeAdmin += R"(", "ChipModel":")";
  ausgabeAdmin += ESP.getChipModel();
  ausgabeAdmin += R"(", "Reset1":")";
  ausgabeAdmin += resetReason[rtc_get_reset_reason(0)];
  ausgabeAdmin += R"(", "Reset2":")";
  ausgabeAdmin += resetReason[rtc_get_reset_reason(1)];
  ausgabeAdmin += R"(", "CpuFreqMHz":")";
  ausgabeAdmin += ESP.getCpuFreqMHz();
  ausgabeAdmin += R"(", "HeapSize":")";
  ausgabeAdmin += formatBytes(ESP.getHeapSize());
  ausgabeAdmin += R"(", "FreeHeap":")";
  ausgabeAdmin += formatBytes(ESP.getFreeHeap());
  ausgabeAdmin += R"(", "MinFreeHeap":")";
  ausgabeAdmin += formatBytes(ESP.getMinFreeHeap());
  ausgabeAdmin += R"(", "ChipSize":")";
  ausgabeAdmin += formatBytes(ESP.getFlashChipSize());
  ausgabeAdmin += R"(", "ChipSpeed":")";
  ausgabeAdmin += ESP.getFlashChipSpeed() / 1000000;
  ausgabeAdmin += R"(", "ChipMode":")";
  ausgabeAdmin += flashChipMode[ESP.getFlashChipMode()];
  ausgabeAdmin += R"(", "IdeVersion":")";
  ausgabeAdmin += ARDUINO;
  ausgabeAdmin += R"(", "SdkVersion":")";
  ausgabeAdmin += ESP.getSdkVersion();
  ausgabeAdmin += R"("})";

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.