[Gelöst] WiFi.localIP() lässt sich nicht in String umwandeln

LÖSUNG: SIEHE POST #6

Hallo Zusammen!
Mein Problem sollte leicht zu lösen sein. Leider stehe ich mit meinen Kenntnissen über chars und Strings noch recht am Anfang. Und zwar verbinde ich einen ESP8266 12E mit meinem WLAN Router und lasse mir die zugewiesene lokale IP in meiner Konsole ausgeben.

Folgender Code gibt mir diese IP aus: 192.168.0.19

Serial.println(WiFi.localIP());

Nun möchte ich meine IP aber noch auf einem 128x64 OLED Display anzeigen lassen.
Hier bekomme ich über folgenden Code leider diese Ausgabe: 318810304

display.drawString(64, 25, String(WiFi.localIP()));

Ich vermute das der Code String(...) hier nicht das macht, was ich gehofft habe. Weiß jemand Abhilfe?

Mein gesamter Code bis zum Loop:

#include <ESP8266WiFi.h>
#include "SSD1306.h" 

// Initialize the OLED display using Wire library
SSD1306  display(0x3c, D3, D5); // (I2C Adress, Display SCK Pin, Display SDA Pin)

const char* ssid = "Airport Extreme";
const char* password = "PASSWORT";

// Create an instance of the server
// specify the port to listen on as an argument

WiFiServer server(80);

void setup() {

  // Initialising the UI will init the display too.
  display.init();
  display.flipScreenVertically();
  display.setFont(ArialMT_Plain_10);
  
  Serial.begin(115200);
  delay(10);
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Verbinde mit ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("mit WLAN verbunden");
  
  // Start the server
  server.begin();
  Serial.println("Server gestartet. IP Adresse:");

  // Print the IP address
  Serial.println(WiFi.localIP());
  showIPadress();
}

void showIPadress() {
  display.clear();
  
  display.setFont(ArialMT_Plain_10);
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
  display.drawString(128, 0, "Online"); 

  display.setFont(ArialMT_Plain_16);
  display.setTextAlignment(TEXT_ALIGN_CENTER);
  display.drawString(64, 25, String(WiFi.localIP())); 

  display.display();
  
}

Ich verwende zwar das gleiche Display, aber mit einer anderen Library (U8glib) - deshalb kann ich nur Mutmaßungen anstellen (du könntest übrigens einen Link zu der Library, die du verwendest, angeben).

Bei der U8glib gibt es neben der "drawString-Funktion" auch die Möglichkeit das mit "print" zu lösen - das ist oft deutlich praktischer. Möglicherweise geht das bei der Library die du benutzt auch (irgendwie)... :slight_smile:

Dann könntest du statt

display.drawString(64, 25, String(WiFi.localIP()));

eventuell so etwas wie

display.setPrintPos(64,25);
display.print(WiFi.localIP());

versuchen - falls das geht.

Generell ist die Arduino String-Klasse "ziemlich eigen" und deckt leider nicht sehr viele Funktionen ab. Die Standard C Strings sind dagegen recht vielseitig - ich benutze deshalb die Arduino-String-Klasse eigentlich nicht.

Ich würde ungern nochmal die Library wechseln. Ich bin eigentlich ganz zufrieden mit dieser hier:
GitHub Link

Der Code ist sehr schmal und nicht all zu viel schnick schnack :slight_smile:
Hat jemand vielleicht noch eine andere Idee?

Vielleicht hilft es ja schonmal wenn ich wüsste was für eine Art die Ausgabe von folgendem Code hat.

WiFi.localIP()

Ein String wird es schonmal nicht sein. Habe rausgefunden, das die Zahlenfolge "318810304" die Ausgabe ist, wenn man die Art in einen Integer wandelt.

Aha, die Adafruit-Library verwendest du also - die kenne ich auch.

Da fühle ich mich jetzt aber ziemlich missverstanden. :slight_smile:
Hab doch mit keinem Wort erwähnt, dass du eine andere Library benutzen sollst. :o

Auch in Verbindung mit der Adafruit-Library kann man die Print-Klasse benutzen. Wird ja auch in den Beispielen verwendet.

Ich würde mal statt

display.drawString(64, 25, String(WiFi.localIP()));

mal das versuchen

display.setCursor(64,25);
display.print(WiFi.localIP());

Sorry, dann habe ich das falsch verstanden :smiley: Danke für deine erneute Antwort.
Bekomme leider einen Fehler

Projekt:120: error: 'SSD1306' has no member named 'setCursor'

display.setCursor(64,25);

^

exit status 1
'SSD1306' has no member named 'setCursor'

Und wenn ich das Setzen des Cursers weglasse, bekomme ich gar keine Reaktion,
das Display bleibt also bis auf die anderen Texte Schwarz :frowning:

Hab dir auch den falschen Link geschickt, sehe ich gerade. Sorry:

Das ganze läuft bei mir auf dem ESP8266 12E. In der Beschreibung auf GitHub sieht man ja auch, das mein Code "drawString" einen String erwartet. Frage wäre also, wie ich die IP der WiFi Library in einen String konvertieren kann? Die Serial versteht es ja auch irgendwie :slight_smile:

Ich bekomm zu viel :smiley: Hab gelöst!
Hier war die Antwort zu finden! Link

Heisst das hier klappt NICHT:

String(WiFi.localIP());

das hier schon:

WiFi.localIP().toString();

Naja, so ist das mit den Strings :smiley: Danke für die Hilfe!

2 Likes