Problem mit Ausgabe OLED Display

Hallo,

ich bin der Marco :slight_smile:

Da ich nicht mehr weiter komme muss ich wohl doch mal nachfragen und auf Hilfe hoffen.

Ich versuche mich gerade darin das hier klick mich nachzubauen.

Im Grunde funkioniert alles nur die Ausgabe auf das 0,96er OLED Dispaly nicht.

Mit U8x8 will es irgendwie garnicht Funkionieren.
Mit U8g2 haut es eig. so hin wie ich möchte … aber, wenn der externe Temp. Sensor schlafen geht dann wird keine externe Temperatur angezeigt?
Ich nehm an wenn der Sender nicht mehr sendet ist der Wert leer und wird nicht mehr angezeigt?

Wie könnte ich das hinbekommen. Bin leider nicht so der Programierer, habe es in der Schule gehasst :smiley:

Hier mal “mein” Code von der Seite im Link oben angepasst.

Es wird erst Temperaur angezeigt, dann schickt das andere Modul die Daten, das Display schaltet um auf Tempertur2 und die wird angezeigt. Und dann wieder Temperatur. → “extern geht schlafen”
Aber dann eben nur noch Temperatur bis extern nen neuen Wert schickt.

Ich hätte aber gern das der “alte” Wert weiter angezeigt wird und dann geändert wird wenn extern wieder nen Wert schickt?

/*
 NodeMCU-Server-TFT-Temperatur

 NodeMCU fungiert als Server und empfängt Temperatur per URL
 Temperaturwerte (z.B. Außentemperatur) wird auf angeschlossenem 
 QVGA-Display ausgegeben,
 
 Parameteruebergabe-Syntax:
 http://192.168.2.75/sensor/temperatur/?pw=passwortxyz&idnr=1&wert=20
 
 Verwendetes Display: 2.2 Zoll Serial TFT-Farbdisplay; SPI; Auflösung 240x320 Pixel 
 Bezugsquellen Display:
 Amazon - http://amzn.to/2iNmaXx / Amazon - http://amzn.to/2j1VIXK

 Temperatur wird über angeschlossenen Sensor DS18B20 ausgelesen und auf dem Display angezeigt
 Temperatursensor DS18B20 an Pin D2 
 Bezugsquelle Temperatursensor: Reichelt / Conrad / Amazon - http://amzn.to/2i3WlRX 
 
 Notwendig ist die angepasste Display-Lib: https://github.com/glennirwin/Adafruit_ILI9340
 
 Programm erprobt ab Arduino IDE 1.6.13
 Projektbeschreibung und weitere Beispiele unter http://www.mikrocontroller-elektronik.de/
*/


#include "SPI.h"
//#include "Adafruit_GFX.h"
//#include "Adafruit_ILI9340.h" //verwendete Lib für Display https://github.com/glennirwin/Adafruit_ILI9340
#include <DallasTemperature.h> //Siehe Hinweis oben, verwendet wird https://github.com/milesburton/Arduino-Temperature-Control-Library
#include <Base64.h>
#include <OneWire.h>
#include <Arduino.h>
//#include <U8x8lib.h>
#include <U8g2lib.h>



#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

//U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // OLEDs without Reset of the Display
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display

#define ONE_WIRE_BUS D4

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);

float merketemperatur=0;
float merkeaussentemperatur=0;

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>


const char* ssid = "FRITZ!Box 7430 JY"; //Ihr Wlan,Netz SSID eintragen
const char* pass = "25359890027409309416"; //Ihr Wlan,Netz Passwort eintragen
IPAddress ip(192,168,0,75); //Feste IP des neuen Servers, frei wählbar
IPAddress gateway(192,168,0,1); //Gatway (IP Router eintragen)
IPAddress subnet(255,255,255,0); //Subnet Maske eintragen

ESP8266WebServer server(80);

void handleRoot() {
 //Temperatur auch bei Url-Aufruf zurückgeben
 String message="*** Ueberwachungs Server - Beispiel von www.mikrocontroller-elektronik.de ***\n";
 String tempstr= String(merketemperatur, 2); 
 message += "Temperatur Innen : " + tempstr +"\n";
 tempstr= String(merkeaussentemperatur, 2); 
 message += "Temperatur Aussen: " + tempstr +"\n";
 server.send(200, "text/plain", message);
}


void handleTemperatur() {
 //printUrlArg(); //fuer Debugz Zwecke

 String stemp =server.arg("wert");
 float temperatur = stemp.toFloat();
 if (merkeaussentemperatur!=temperatur) {
 zeigeAussenTemperatur(temperatur);
 merkeaussentemperatur=temperatur;
 float z = temperatur;
 }

 //Temperatur auch bei Url-Aufruf zurückgeben
 String message="*** Ueberwachungs Server - Beispiel von www.mikrocontroller-elektronik.de ***\n";
 String tempstr= String(merketemperatur, 2); 
 message += "Temperatur Innen : " + tempstr +"\n";
 tempstr= String(merkeaussentemperatur, 2); 
 message += "Temperatur Aussen: " + tempstr +"\n";
 server.send(200, "text/plain", message);
}


void printUrlArg() {
 //Alle Parameter seriell ausgeben
 String message="";
 for (uint8_t i=0; i<server.args(); i++){
 message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
 }
 server.send(200, "text/plain", message);
 Serial.println(message);
}


 
void setup() {
 u8g2.begin();
//u8x8.begin();
 DS18B20.begin(); //lokale Temperaturmessung
 
 Serial.begin(115200);
 Serial.println(" \r\nINIT \r\n") ;

 WiFi.begin(ssid, pass);
 WiFi.config(ip, gateway, subnet);
 while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");
 } 
 Serial.println("");
 Serial.print("Verbunden mit ");
 Serial.println(ssid);
 Serial.print("IP address: ");
 Serial.println(WiFi.localIP());
 
 server.on("/",handleRoot) ;
 server.on("/sensor/temperatur/", handleTemperatur);
 server.begin();
 
 Serial.println("HTTP Server wurde gestartet!");
  
}

float getTemperatur() {
 float temp;
 do {
 DS18B20.requestTemperatures(); 
 temp = DS18B20.getTempCByIndex(0);
 delay(1000);
 } while (temp == 85.0 || temp == (-127.0));
 return temp;
}


void zeigeTemperatur(float temperatur)
{
    char temperaturStr[6];
    dtostrf(temperatur, 2, 2, temperaturStr);
    Serial.print("Temperatur: "); 
    Serial.println(temperaturStr); 
 
   //u8x8.setFont(u8x8_font_pressstart2p_f);
   //u8x8.drawString(20,30,temperaturStr);
   
   /*u8g2.setFont(u8g2_font_7x14B_tf);
  u8g2.firstPage();
  do {
      u8g2.setCursor(20, 30);
      u8g2.print("Wetterstation ");
     } while ( u8g2.nextPage() );
     delay(3000);
  */
  
    u8g2.setFont(u8g2_font_7x14_tf);
    u8g2.firstPage();
    do {      
      u8g2.setCursor(30, 30);
      u8g2.print("Temperatur");
      u8g2.setCursor(40, 50);
      u8g2.print(temperatur);
      u8g2.print("\260C");
    } while ( u8g2.nextPage() );
    delay(2500);
}

void zeigeAussenTemperatur(float temperatur)
{
    char temperaturStr[6];
    dtostrf(temperatur, 2, 2, temperaturStr);
    Serial.print("AussenTemperatur: "); 
    Serial.println(temperaturStr); 
    float z = temperatur;
    
    //u8x8.setFont(u8x8_font_torussansbold8_u);
    //u8x8.drawString(0,20,temperaturStr);
    
    u8g2.setFont(u8g2_font_7x14_tf);
    u8g2.firstPage();
    do {      
      u8g2.setCursor(30, 30);
      u8g2.print("Temperatur2");
      u8g2.setCursor(40, 60);
      u8g2.print(temperatur);
      u8g2.print("\260C");
     } while ( u8g2.nextPage() );
    delay(3000);
}

 
void loop(void)
{
 server.handleClient();
 
 delay(500); 

 float temperatur = getTemperatur();
 if (merketemperatur!=temperatur) {
 zeigeTemperatur(temperatur);
 merketemperatur=temperatur;
 }
}

edit:
Ja das habe ich vorhin gesucht aber nicht gefunden :smiley:

Gruss
Marco

Hi

Bitte setze Deinen Code in Code-Tags - im Edit-Fenster der </> Button (Code markieren und dann den Button klicken).
Du kannst Deinen Post jeder Zeit editieren (unter 100 Posts aber nur alle 5 Minuten).

MfG