ESP8266 mit oled 128x64 als Wetteranzeige

Begonnen von machnetz, 19 April 2016, 10:06:55

Vorheriges Thema - Nächstes Thema

kumue

Ich habe ein Problem mit der Helligkeit.
Die Station sollte heute in ihr Gehäuse umziehen.
Nur wenn ich hinten dann den Deckel draufmache, wird das Display dunkler.
Wo muss ich da was  ändern ?

juergs

Hast Du die Variante mit LDR?
Dann ist dieser abgedeckt, und meldet "Nacht"  ;)

locutus

#107
Hallo zusammen,
anbei das Hardwareupgrade mit Helligkeitssteuerung und BME280-Sensor für die Wetterstation (Color).
Siehe auch: https://github.com/ThingPulse/esp8266-weather-station-color/issues/24

Stückliste:
- 2.8" ILI9341 SPI TFT LCD 320x240 Modul mit Touch Panel
- Wemos D1 Mini Pro
- BME280
- SMD Widerstände Bauform 1206 (R2* und R3* optional)
- Fotowiderstand oder TEMT6000
- NPN-Transistor (T1* optional)
- Buchsen- und Stiftleisten
- Taster (Reset)
- Trägerplatine (Gerberdaten im Anhang)

*Diese Bauteile sind optional erforderlich! Nur wenn der Transistor Q1 und die Widerstände R5 und R6 auf der orig. LC-Displayplatine fehlen sollten.
Ich empfehle den Sensor nicht wie hier abgebildet, sondern kabelgebunden und ausreichend entfernt von der Elektronik einzubauen. Die Wärmeentwicklung verfälscht nämlich das Messergebnis.
Die Lötbrücke JP1 muss geschlossen werden.


Ich habe die abgestufte Regelung der Hintergrundbeleuchtung aus dem Sketch entfernt und durch einem simplen Smoothing Algorithmus ersetzt. Damit ist nahezu eine stufenlose Dimmung gegeben.

//ADC_MODE(ADC_VCC);
#define LDR_PIN A0 // analog input for LDR or TEMT6000 illuminance sensor
int LDRReading = 0; // LDR value is stored on LDR reading
int smoothedVal = 0;
int samples = 8;

...

//void ldr(); // ambient illuminance measurement routine

...

void setup() {
  ldr();

...

void loop() {
  ldr(); // LCD backlight brightness adjustment routine depending on the ambient illuminance
  //Serial.println(smoothedVal); // see the measurement result on monitor

...

void ldr() {
    LDRReading = analogRead(LDR_PIN);
    smoothedVal = smoothedVal + ((LDRReading - smoothedVal)/samples);
    //analogWrite(TFT_LED, LDRReading);
    analogWrite(TFT_LED, smoothedVal);
}

...

drawLabelValue(12, "LDR value: ", String(smoothedVal));


Im Setup, während der Touchscreen-Kalibrierung leuchtet das Display in der höchsten Helligkeitsstufe:
  if (SPIFFS.begin()) {
    digitalWrite(TFT_LED, HIGH); // value HIGH or LOW
    //analogWrite(TFT_LED, 127); // values from 0 to 255
  } else
    pinMode(TFT_LED, OUTPUT);


Außerdem Taupunkt (devPoint Funktion) und als Option Pressure-NN für BME280 hinzugefügt:
#define ALTITUDE 94.0 // Altitude of my location
...
pressure = bme.seaLevelForAltitude(ALTITUDE, pressure);



Arduino-Sketch im Anhang oder JoWiemann's mit Modifikationen:
https://forum.fhem.de/index.php/topic,52403.msg920260.html#msg920260

Vorgängerversion mit 2.4" LCD:
https://forum.fhem.de/index.php/topic,52403.msg763978.html#msg763978

ESP8266 FHEM Display:
https://forum.fhem.de/index.php?topic=93795.0


Die Verwendung der Daten für kommerzielle Zwecke, gewerbliche Herstellung oder Vertrieb ist untersagt.


juergs

#108
Hallo locutus,

die BME680-Sensoren sind mittlerweile preislich nach unten abgedriftet: Beispiel

kumue

Zitat von: juergs am 16 Juni 2019, 16:11:09
Hast Du die Variante mit LDR?
Dann ist dieser abgedeckt, und meldet "Nacht"  ;)

Ich denke ja...
Jedenfalls ist in der esp8266-weather-station-color.ino eine ldr-Routine.
void ldr() {
    LDRReading = analogRead(LDR_PIN);
   
    if (LDRReading < 50) {
    analogWrite(TFT_LED, 1000); // the most dark screen
...usw

Alles mit ldr auskommentieren und gut is oder gibt es einen anderne Ansatz ?

juergs

#110
Was spricht dagegen, den LDR zu verlängern und in eine Bohrung des Gehäuses kleben,
also nach außen zu verlängern?

kumue

... meine zwei linken Hände...  ;D
Nee hast recht, ist auch eine Variante...

mumpitzstuff

Hat schon mal jemand versucht die Wetterdaten aus FHEM auszulesen anstatt von OpenWeatherMap? Hätte den Vorteil, das man verschiedene Wettermodule anbinden könnte.

juergs

Kannst Du das :
ZitatWetterdaten aus FHEM auszulesen
genauer bzw. konkreter definieren?

Starsurfer

Habe ich so ähnlich gemacht, ich lasse mir die Temperatur und Luftfeuchtigkeit von den Lacross Sensoren im Garten anzeigen über mqtt.
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com

mumpitzstuff

Ich habe bereits Wetterdaten in FHEM vorliegen z.B. über das Wetter Modul, Proplanta oder ähnliches. Ich bin also von FHEM her ziemlich frei darin, von wo ich mir die Wetterdaten her hole. Deshalb wäre es naheliegend, diese auch gleich direkt von dort an die Wetteranzeige durchzureichen.

Zitat von: juergs am 17 Juni 2019, 11:34:11
Kannst Du das :genauer bzw. konkreter definieren?

SusisStrolch

@locutus würde ein Set nehmen, falls noch verfügbar.
Synology DS1515+, 16GB RAM, 4x 6TB WD-Red
- Docker (FHEM), MariaDB, MariaDB10, Surveillance Station
Gateways: LCG miniCUL433, LCG miniCUL868, AVR-X4000, VU-Solo SE, Kodi
ESP8266: ESPEasy (S0-Counter, Temp/Hum), Sonoff TH, Sonoff 4ch

mumpitzstuff


mumpitzstuff

Ich habe aktuell das Problem, das wenn ich im Boardverwalter von meiner esp8266 lib v2.50 auf v2.52 update, danach mein Sketch permanent abstürzt, sobald die Wifi Connection aufgebaut wurde. Hat dafür jemand schon eine Lösung gefunden? Muss ich irgendwas anderes auch noch aktualisieren?

Ich habe inzwischen eine weitere Funktion mit eingebunden, die mir oben links im Fenster einen Lüftungsindex darstellt. Für mich ist an der Stelle interessant, ob die Feuchtigkeit in meiner Wohnung nach dem Lüften höher oder niedriger als vor dem Lüften sein wird.

void drawWindow() {
  String innen = "0";
  String aussen = "0";
  float diff = 0.0;
  char diffStr[7];
 
  http.begin("http://192.168.178.112:8088/fhem?cmd=list%20DHT22A%20feuchteNachLueften&XHR=1");
  if (HTTP_CODE_OK == http.GET())
  {
    String response = http.getString();
    Serial.println(response);

    aussen = response.substring(response.lastIndexOf(" "));
    Serial.println(aussen);
  }
  http.end();
 
  http.begin("http://192.168.178.112:8088/fhem?cmd=list%20DHT22A%20corrHumidity&XHR=1");
  if (HTTP_CODE_OK == http.GET())
  {
    String response = http.getString();
    Serial.println(response);

    innen = response.substring(response.lastIndexOf(" "));
    Serial.println(innen);
  }
  http.end();

  diff = innen.toFloat() - aussen.toFloat();
  dtostrf(diff, 1, 1, diffStr);

  gfx.setTextAlignment(TEXT_ALIGN_LEFT);
  gfx.setFont(ArialRoundedMTBold_14);
  if (diff <= 0.0)
  {
    gfx.setColor(MINI_BLUE);
  }
  else if (diff <= 3.0)
  {
    gfx.setColor(MINI_WHITE);
  }
  else
  {
    gfx.setColor(MINI_YELLOW);   
  }
 
  gfx.drawString(0, 6, diffStr);
}

SusisStrolch

Und hier noch ein kleiner Nachtrag, falls jemand die aktuellste ESP8266 Core-Version verwendet und die Kiste ständig neu bootet:


Any ESP8266 with Arduino core 2.5.1 or up; I used a WeMOS D1 mini Pro.
...
It will fail with "ISR not in IRAM!"


https://github.com/PaulStoffregen/XPT2046_Touchscreen/issues/25
Synology DS1515+, 16GB RAM, 4x 6TB WD-Red
- Docker (FHEM), MariaDB, MariaDB10, Surveillance Station
Gateways: LCG miniCUL433, LCG miniCUL868, AVR-X4000, VU-Solo SE, Kodi
ESP8266: ESPEasy (S0-Counter, Temp/Hum), Sonoff TH, Sonoff 4ch