Hallo,
ich bin der Marco ![]()
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 ![]()
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 ![]()
Gruss
Marco