IPAddress ist eine Klasse die ein Byte Array enthält:
class IPAddress : public Printable {
private:
union {
uint8_t bytes[4]; // IPv4 address
uint32_t dword;
} _address;
....
Der Subkript Operator [] ist überladen so dass man das wie ein Array verwenden kann
Durch das Printable Interface sollte es aber direkt druckbar sein. Lasse also den Quatsch mit der String Klasse weg (wie so oft macht die nur alles schlimmer) und mache einfach das:
lcd.print(WiFi.localIP());
Das geht wenn deine OLED Klasse von der Arduino Print Klasse abgeleitet ist. Es ist auch vielleicht möglich dass das eine eigene Methode hat die nur zufällig println() heißt. Dann geht es nicht.
Und um ein IPAdress Objekt an eine Funktion zu übergeben (die Dinger heißen Funktionen. Nicht Unterprogramme) nimmst du einfach IPAddress& oder Printable& als Parameter. Also eine Referenz darauf.
Und um ein IPAdress Objekt an eine Funktion zu übergeben (die Dinger heißen Funktionen. Nicht Unterprogramme - ja, sorry) nimmst du einfach IPAddress& oder Printable& als Parameter. Also eine Referenz darauf.
Hat jemand einen link für mich wo das mit der Referenz erklärt wird?
Ich weiß nicht so recht was ich bei google eingeben soll...
Du kannst, wenn deine Lcd lib das
lcd.print(WiFi.localIP());
nicht unterstützt, in einen PString (16 char groß) streamen und dann das zugrundeliegende char array aufs Display schicken.
Wobei ich da sowieso etwas auf dem falschen Weg war. Ich hatte übersehen dass es nicht nur darum geht ein IPAddress Objekt anzuzeigen. Sondern es soll auch Zwecks Scrollen als String dauerhaft gespeichert werden. Egal ob String Objekt oder C String/char Array.
Dazu will man dann doch kein IPAddress Objekt an eine Funktion übergeben. Sondern dessen String Darstellung.
Für char Arrays wäre dann die PString Library recht nützlich. Man kann es aber auch mit s(n)printf() und [] für die einzelnen Bytes machen.
Bei der String Klasse kann man einfach mit + konkatenieren.
IPAddress ip = WiFi.localIP() für die Adresse. Und dann ip[0], ip[1], etc. für die einzelnen Bytes
ElEspanol:
Du kannst, wenn deine Lcd lib das
lcd.print(WiFi.localIP());
nicht unterstützt, in einen PString (16 char groß) streamen und dann das zugrundeliegende char array aufs Display schicken.
Suchst du Streaming Lib, PString Lib
So wie ich das verstehe wird statt auf's Display in ein String geprintet und dies kann ich weiterverarbeiten?!
Muss ich auch noch mal näher betrachten...
Wenn ich #include <PString.h) wrede ich schon angemeckert. Ohne PString zu verwenden...
Build-Optionen wurden verändert, alles wird neu gebaut
In file included from SprengerZentraleESPnodeMCU_OLED128x64-26.ino:16:0:
C:\Users\CarstenTower\Documents\Arduino\libraries\PString/PString.h:31:16: error: conflicting return type specified for 'virtual void PString::write(uint8_t)'
virtual void write(uint8_t);
^
In file included from C:\Users\CarstenTower\Documents\Arduino\libraries\PString/PString.h:20:0,
from SprengerZentraleESPnodeMCU_OLED128x64-26.ino:16:
C:\Users\CarstenTower\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\1.6.5-947-g39819f0\cores\esp8266/Print.h:55:24: error: overriding 'virtual size_t Print::write(uint8_t)'
virtual size_t write(uint8_t) = 0;
^
Fehler beim Kompilieren.
Hab mich hier orientiert. Arbeite mit dem ESP nodeMCU.
stoni99:
So wie ich das verstehe wird statt auf's Display in ein String geprintet und dies kann ich weiterverarbeiten?!
Genau. Der PString hat einen eigenen Namen unter dem man ein "dahinterliegendes" char Array bearbeiten kann. Allerdings muss man aufpassen, da die Größe auf die Größe des Array beschränkt ist.
Alles was mehr als 23 Zeichen reingestreamt wird, wird verworfen. Ich benutze einen größeren Buffer immer wieder zum reinstreamen, dann muss man am Anfang
PmyIpString="";
machen, um den String zu leeren. Weil beim streaming wird eben allen hinten angehängt.