WiFi Local IP weergeven op display

IK probeer mijn local_IP nummer op een OLED display weer te geven.
Het is onderdeel van een klein project/sketch dat op een standalone ESP8266 draait die vanuit Arduino IDE direct geflashed wordt. Het is nu eigenlijk een nieuwe Arduino geworden, net zoals een DUE of ATtiny direct geflashed kunnen worden.

Via Serial gaat het printen van het local IP in principe heel eenvoudig met Serial.println(WiFi.localIP()) maar op de display lukt dat dus niet op die manier.
Om de 4 bytes van het IP in IDE monitor een voor een te printen gebruik ik:

  Serial.print("SSID : ");                        // prints SSID in monitor
  Serial.println(SSID);                           // to monitor             
  sendStrXY("SSID :" ,0,0);  sendStrXY(SSID,0,7); // prints SSID on OLED
    // *********** on the monitor ************************
    for (byte thisByte = 0; thisByte < 4; thisByte++) {
       unsigned char IPbyte = (WiFi.localIP()[thisByte]); // 0-255
       Serial.print(IPbyte);                                            // in monitor prints byte 0-255
       Serial.println(".");
    }

Eerst een regel met het SSID en dan het localIP.
Het zijn unsigned chars, dus getallen van 0-255 en het resultaat is zoiets als : 192.168.178.30.

De routines die ik bij de OLED gebruik, kunnen ofwel een String ofwel een Char weergeven. Ik krijg het niet voorelkaar om met b.v. een eenvoudige type_conversie dit te displayen.
Om het op een display te krijgen moet ik deze lelijke code uitvoeren, het moet volgens mij veel eleganter en eenvoudiger kunnen, maar ik ben geen doorgewinterde C programmeur.

Nu gebruik ik dit:

    // ************ on the OLED display *****************************
    for (byte thisByte = 0; thisByte < 4; thisByte++) {
      unsigned char IPbyte = (WiFi.localIP()[thisByte]); // 0-255
      for (int place = 0; place<3; place++)           // can probably be done better but i did't see how to.
      {
          //3 parameters, 1=character, 2=row_number, 3-(place+thisByte*4) = column_number
        if (place == 0) sendCharXY(char(int(IPbyte/100)        +48), 2, (place)+thisByte*4);
        if (place == 1) sendCharXY(char(int((IPbyte/10)%10) +48), 2, (place)+thisByte*4);
        if (place == 2) sendCharXY(char(int(IPbyte%10)        +48), 2, (place)+thisByte*4);
      }
    sendCharXY('.', 2, (3+thisByte*4));                                // prints the dot
    }
  Serial.println("WebServer ready!   ");                               // ready message
  sendStrXY("WebServer ready!",4,0);                               // OLED message 
  Serial.println(WiFi.localIP());                                           // Serial monitor prints localIP

Is er iemand die dit eenvoudig,(zonder library) kan fixen? , mij lukt het niet.

De gehele code (inclusief font en diplay routines) is eigenlijk te lang om hier te plaatsen. De volledige code en beschrijving van mijn project zijn onder de links te vinden.

werken de gewone printf en sprintf niet meer onder IDE?

Ik schreef al: " maar ik ben geen doorgewinterde C programmeur."
Enkel met de commando's zoals beschreven in de referentie manual kan ik me redelijk redden.

printf en sprintf worden daar niet beschreven en ik doorgrond ze ook niet helemaal en kan ze dus , vooralsnog, niet gebruiken .

Maar als jij weet hoe ik voor dit probleem die commando's kan gebruiken hou ik mij aanbevolen voor wat meer concrete hulp.

ik zou zelf zoiets proberen:

char resultaat[16];
sprintf(resultaat, "%d.%d.%d.%d", WiFi.localIP()[0], WiFi.localIP()[1], WiFi.localIP()[2], WiFi.localIP()[3]);});

Nu zullen de cijfers tussen de punten de lengte aannemen van de waarden. Mocht je een vaste lengte willen hebben dan vervang je de %d voor %3d en als je ook nog voorloop nullen wilt maak je er %03d van. Niet de volledige formatted string worden in de compiler ondersteund. Floats in ieder geval niet.

Verbazingwekkend elegant en eenvoudig.
Waar ik moeilijk doe met een loop in een loop, staat het er nu met een enkele simpele constructie. :relaxed:
Ik wist wel dat het eenvoudiger kon.

dankjewel Nico (karma added).

Kan simpeler (dan maak je een for loop van die variabelen) maar de compiler pikt dat niet...

cartoonist:
Enkel met de commando's zoals beschreven in de referentie manual kan ik me redelijk redden.

printf en sprintf worden daar niet beschreven en ik doorgrond ze ook niet helemaal en kan ze dus , vooralsnog, niet gebruiken .

Nico heeft al de code voor je geantwoord, dus heb je dat niet meer nodig.
Maar wellicht wil je zelf ook het formatten van output begrijpen en dan is dit vermoedelijk een heel heldere uitleg.

Helaas alleen in Engels, maar volgens mij heb jij daar geen moeite mee.