Problem beim kompilieren eines alten Programmes (gelöst)

Hallo,
ich habe ein Problem beim kompilieren eines alten Programmes.
D.h. das ich das Pogramm mit einer älteren Version kompilieren konnte.
Leider weiss ich nicht die entsprechenden Versionen.
Im Moment verwende ich folgende Versionen:
Arduino Version 2.3.2
ESP32-Boards 3.2
Lib’s siehe Programm-Code

// ESP32 WebSocket Server: Display Sensor Readings 
// https://randomnerdtutorials.com/esp32-websocket-server-sensor/

// geaenderte Version: BME680, LittleFS, Original siehe: ESP32_WebSocket_Server_BME680
// Board: ESP32 Dev Module
// Shield ESP32-04 mit ESP32 30-polig
// Schaltplan: ESP32_Shields_6 Blatt 1

#include <Arduino.h>
#include <WiFi.h>
#include <AsyncTCP.h>           // V 1.1.4
#include <ESPAsyncWebServer.h>  // V 3.7.6
#include <FS.h>
#include <LittleFS.h>
#include <Arduino_JSON.h>       // V 0.2.0
#include <Adafruit_BME680.h>    // V 2.0.5
#include <Adafruit_Sensor.h>  

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

#define SEALEVELPRESSURE_HPA (1013.25)

#define FORMAT_LITTLEFS_IF_FAILED true

#define DEBUGGING                     // Einkommentieren für die Serielle Ausgabe

#ifdef DEBUGGING
#define DEBUG_B(...) Serial.begin(__VA_ARGS__)
#define DEBUG_P(...) Serial.println(__VA_ARGS__)
#define DEBUG_F(...) Serial.printf(__VA_ARGS__)
#else
#define DEBUG_B(...)
#define DEBUG_P(...)
#define DEBUG_F(...)
#endif


// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

// Create a WebSocket object
AsyncWebSocket ws("/ws");

// Json Variable to Hold Sensor Readings
JSONVar readings;

// Timer variables
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;

float temperature;
float humidity;
float pressure;
float gasResistance;
float  altitude;

// Create a sensor object
Adafruit_BME680 bme;

// Init BME280
void initBME280(){
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
}

// Init BME680
void initBME680(){
  if (!bme.begin()) {
    Serial.println("Could not find a valid BME680 sensor, check wiring!");
    while (1);
  }
}

// Vorlage: ESP32_BME680_WebServer
void getBME680Readings(){
  // Tell BME680 to begin measurement.
  unsigned long endTime = bme.beginReading();
  if (endTime == 0) {
    Serial.println(F("Failed to begin reading :("));
    return;
  }
  if (!bme.endReading()) {
    Serial.println(F("Failed to complete reading :("));
    return;
  }
  temperature = bme.temperature;
  pressure = bme.pressure / 100.0;
  humidity = bme.humidity;
  gasResistance = bme.gas_resistance / 1000.0;
  altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
}

// Get Sensor Readings and return JSON object
String getSensorReadings(){
  readings["temperature"] = String(bme.readTemperature());
  readings["humidity"] =  String(bme.readHumidity());
  readings["pressure"] = String(bme.readPressure()/100.0F);
  readings["gas"] = String(bme.readGas()/1000.0F);
  readings["alti"] = String(bme.readAltitude(SEALEVELPRESSURE_HPA));
  String jsonString = JSON.stringify(readings);
  return jsonString;
}

// Initialize SPIFFS
/*void initSPIFFS() {
  if (!SPIFFS.begin(true)) {
    Serial.println("An error has occurred while mounting SPIFFS");
  }
  Serial.println("SPIFFS mounted successfully");
} */

// Initialize LittleFS
void initLittleFS() {
  if(!LittleFS.begin(FORMAT_LITTLEFS_IF_FAILED)){
      Serial.println("LittleFS Mount Failed");
      return;
   }
   else{
       Serial.println("Little FS Mounted Successfully");
   }
}

// 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 notifyClients(String sensorReadings) {
  ws.textAll(sensorReadings);
}

void handleWebSocketMessage(void *arg, uint8_t *data, size_t len) {
  AwsFrameInfo *info = (AwsFrameInfo*)arg;
  if (info->final && info->index == 0 && info->len == len && info->opcode == WS_TEXT) {
    //data[len] = 0;
    //String message = (char*)data;
    // Check if the message is "getReadings"
    //if (strcmp((char*)data, "getReadings") == 0) {
      //if it is, send current sensor readings
      String sensorReadings = getSensorReadings();
      Serial.println(sensorReadings);
      notifyClients(sensorReadings);
    //}
  }
}

void onEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) {
  switch (type) {
    case WS_EVT_CONNECT:
      Serial.printf("WebSocket client #%u connected from %s\n", client->id(), client->remoteIP().toString().c_str());
      break;
    case WS_EVT_DISCONNECT:
      Serial.printf("WebSocket client #%u disconnected\n", client->id());
      break;
    case WS_EVT_DATA:
      handleWebSocketMessage(arg, data, len);
      break;
    case WS_EVT_PONG:
    case WS_EVT_ERROR:
      break;
  }
}

void initWebSocket() {
  ws.onEvent(onEvent);
  server.addHandler(&ws);
}

void setup() {
  /*Serial.begin(115200);
  delay(500);
  Serial.println("");
  Serial.println("***********************************************");
  Serial.println("ESP32_Sensor_Readings_WebSocket_BME680_LittleFS");
  Serial.println("***********************************************");
  */
  DEBUG_B(115200);
  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);
  
  initBME680();
  initWiFi();
  initLittleFS();
  initWebSocket();

  // Web Server Root URL
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(LittleFS, "/index.html", "text/html");
  });

  server.serveStatic("/", LittleFS, "/");

  // Start server
  server.begin();
}

void loop() {
  if ((millis() - lastTime) > timerDelay) {
    String sensorReadings = getSensorReadings();
    Serial.print(sensorReadings);
    notifyClients(sensorReadings);

  lastTime = millis();

  }
  ws.cleanupClients();
}

Damit erhalte ich die Fehlermeldungen:

In file included from E:\MeineProgramme\Arduino_Uno\ESP32_Programme\WebServer\ESPAsyncWebServer_h\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS.ino:19:
e:\MeineProgramme\Arduino_Uno\libraries\ESP_Async_WebServer\src/ESPAsyncWebServer.h: In member function 'tcp_state AsyncWebServer::state() const':
e:\MeineProgramme\Arduino_Uno\libraries\ESP_Async_WebServer\src/ESPAsyncWebServer.h:1107:49: error: passing 'const AsyncServer' as 'this' argument discards qualifiers [-fpermissive]
 1107 |     return static_cast<tcp_state>(_server.status());
      |                                   ~~~~~~~~~~~~~~^~
In file included from E:\MeineProgramme\Arduino_Uno\ESP32_Programme\WebServer\ESPAsyncWebServer_h\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS.ino:18:
e:\MeineProgramme\Arduino_Uno\libraries\AsyncTCP\src/AsyncTCP.h:198:13: note:   in call to 'uint8_t AsyncServer::status()'
  198 |     uint8_t status();
      |             ^~~~~~
E:\MeineProgramme\Arduino_Uno\ESP32_Programme\WebServer\ESPAsyncWebServer_h\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS.ino: In function 'void onEvent(AsyncWebSocket*, AsyncWebSocketClient*, AwsEventType, void*, uint8_t*, size_t)':
E:\MeineProgramme\Arduino_Uno\ESP32_Programme\WebServer\ESPAsyncWebServer_h\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS.ino:168:21: warning: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'} [-Wformat=]
  168 |       Serial.printf("WebSocket client #%u connected from %s\n", client->id(), client->remoteIP().toString().c_str());
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~
      |                                                                           |
      |                                                                           uint32_t {aka long unsigned int}
E:\MeineProgramme\Arduino_Uno\ESP32_Programme\WebServer\ESPAsyncWebServer_h\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS.ino:171:21: warning: format '%u' expects argument of type 'unsigned int', but argument 3 has type 'uint32_t' {aka 'long unsigned int'} [-Wformat=]
  171 |       Serial.printf("WebSocket client #%u disconnected\n", client->id());
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~
      |                                                                      |
      |                                                                      uint32_t {aka long unsigned int}
E:\MeineProgramme\Arduino_Uno\ESP32_Programme\WebServer\ESPAsyncWebServer_h\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS\ESP32_Sensor_Readings_WebSocket_BME680_LittleFS.ino:166:10: warning: enumeration value 'WS_EVT_PING' not handled in switch [-Wswitch]
  166 |   switch (type) {
      |          ^

Juergen

Deine Fehler sind doch angegeben. Die solltest du beheben.

Oder eben auf die "alte" IDE-Version sowie ESP-core zurück gehen.
Und zukünftig die Versionnummern in den Sketch schreiben.

Z.B. Dein %u entspricht nicht dem Typ der Variablen, die damit dargestellt werden soll.
Schau mal hier rein.
Modernere Compiler sind kritischer geworden, ein alter hat Dir das noch durch gehen lassen.

Gruß Tommy

Hallo,
vielen Dank für Eure Hinweise.
Das mit den Versionen ist ein guter Hinweis, leider habe ich den bis jetzt noch nicht verwendet, werde ich aber in der Zukunft berücksichtigen.
Den Hinweis von Thommy56 konnte ich mit "%lu" beseitigen.
Der eigentliche Fehler liegt aber in den ersten 8 Zeilen betreff den beiden Libs: "ESPAsyncWebServer.h: Zeile 1107" und "AsyncTCP.h: Zeile 198".
Da weiss ich leider nicht was das bedeuten kann.
Juergen

Dann solltest du auch die neuste ESP-Core Version installieren.

Hallo,
aber das habe ich doch: ESP32 von Espressif Version 3.2.0.

Juergen

Dann musst du wohl diese beiden Libraries noch aktualisieren.
Wäre jetzt die Frage, wozu du die benötigst ?
Der "Standard" Server tuts auch, und die "Standard" TCP ist in WiFi.h vorhanden.

Ich verstehe auch nicht, wieso massenweise der Async benutzt wird, obwohl kein Grund dazu besteht.
Aber wahrscheinlich hat das einer mal angefangen und alle Anderen kopieren nur noch davon.

Gruß Tommy

Ja, meist wird dem Zitat "Warum einfach wenns auch umständlich geht" gefolgt und man darf noch zusätzliche Libraries installieren.
Ich wüsste da auch keinen echten Grund, die einzusetzen.
Aber evtl. lesen wir ja noch einen. :wink:

Dabei kann alles so einfach sein, wenn man die schon vorhandenen Standard Libraries einsetzt.

Unabhängig von den zuvor genannten Problemen, verstehe ich das komplette durcheinander der Sensoren BME280 und BME680 nicht.
Das muss doch schief gehen.

Der einzig mögliche Grund wäre eine hohe Anzahl gleichzeitiger Zugriffe durch verschiedene Clients. Dann könnte man aber bereits die grundlegende Design-Entscheidung für einen MC als falsch einschätzen. Dann doch besser einen RasPi (nicht den MC davon) oder einen richtigen Server (auch auf einem NAS)

Gruß Tommy

Hast du eine Erfahrung, welche Anzahl da kritisch werden könnte. Nur so als Info, bei mir kommen da keine Probleme, auch mit aktuell ca. 18 Clients. Aber die gehen eh nie auf die gleiche Adresse.

Ich meine Clients (wie z.B. Browser), die gleichzeitig auf einen ESP zugreifen wollen.

Gruß Tommy

Ahhh, ok. Da müssen wir nicht drüber reden.
Dann macht das def. keinen Sinn den umständlichen Weg zu wählen.

Hallo,
so ich kann das Programm wieder kompilieren.
Mit:
Arduino IDE 2.3.2
ESP32 3.2.0
AsyncTCP 3.4.0
ESPAsyncWebserver 3.7.7

Juergen

Gerne nochmal die Frage:
Wozu brauchst du AsyncTCP und ESPAsyncWebserver ?

Hallo,
die Frage zu den beiden Libs (AsyncTCP und ESPAsyncWebserver) kann ich leider noch nicht beantworten, da der gezeigte Sketch nicht von mir stammt.
Würde aber gerne mehr darüber wissen welche Libs man z.B bei dem gezeigten Sketch anwenden sollte (z.B. Wifi.h, WebServer.h)

Juergen

Schau Dir mal die Seite von Fips an. Hier eine Einführung von @agmue dazu.

Gruß Tommy

Danke für den Hinweise, werde ich machen.

Juergen

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