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.