• Ich möchte die Messdaten eines BME280, die ich an Home Assistant sende, gleichzeitig auf einem 0,96" OLED anzeigen, damit ich nicht immer den PC anmachen, oder auf das Handy schauen muss.

    das mom Sensor.yaml ist:

    i2c:
    sda: D2
    scl: D1
    scan: true

    sensor:

    • platform: bme280
      temperature:
      name: “BME280 Temperatur”
      oversampling: 16x
      filters:
      - offset: -0
      pressure:
      name: “BME280 Luftdruck”
      oversampling: 16x
      filters:
      - offset: -0
      humidity:
      name: “BME280 Feuchtigkeit”
      oversampling: 16x
      address: 0x76
      update_interval: 60s

    font:

    • file: “16020_FUTURAM.ttf”
      id: my_font
      size: 16

    display:

    • platform: ssd1306_i2c
      model: “SSD1306 128x64”
      reset_pin: D4
      address: 0x3C
      lambda: |-
      it.print(0, 0, id(my_font), “Temp.:”);
      it.print(0, 21, id(my_font), “Luftf.:”);
      it.print(0, 40, id(my_font), “hPl. :”);

    Die Daten werden an HA gesendet, und auf dem OLED steht Temp.:, Luftf.: und pPl:,

    Nun habe ich versucht anhand der Anleitung (unten) die Daten in den enstsprechenden Zeilen anzeigen zu lassen, was aber nicht funktioniert,
    da die Anleitung, meiner Meinung nach, nur zum Anzeigen von Messwerten “aus” HA und nicht direkt aus einem Sensor ist.

    https://esphome.io/cookbook/display_time_temp_oled.html

    Habe verschiedes ausprobiert, bin aber immer beim Upload, mit Fehlermeldungen, gescheitert.

    Vieleicht kann mir jemand von Euch weiterhelfen



  • also da vorallem die zeile:

    it.printf(0, 0, id(my_font), "The sensor value is: %.1f", id(my_sensor).state);
    

  • Ja, das dachte ich auch, dass es so geht. Aber dann bekomme ich diese Fehlermeldung:



  • Habe ich das richtig verstanden, du hast aktuell eine Anzeige auf dem OLED aber die Werte kommen nicht vom ESP selber sondern von Homeassistant?
    Nur aus Interesse: Warum genau willst du es direkt über den ESP haben?

    Habe verschiedes ausprobiert, bin aber immer beim Upload, mit Fehlermeldungen, gescheitert.

    Ansonsten wäre es so oder so erstmal hilfreich, wenn du die Fehlermeldung zeigst, so kann man vielleicht schon die Ursache finden.

    Edit: Okay du warst schneller als ich. 😄


  • Die Messdaten, die der ESP vom BME280 bekommt, werden ganz normal an HA gesendet. Ich will aber das ich die Messwerte auch direkt (am gleichen ESP), über ein OLED anzeigen.


  • Fehlermeldung habe ich oben eingestellt


  • Hier nochmal das yaml, mit den Einträgen:


  • i2c:
    sda: D2
    scl: D1
    scan: true

    sensor:

    • platform: bme280
      temperature:
      name: “BME280 Temperatur”
      id: temperatur
      oversampling: 16x
      filters:
      - offset: -0
      pressure:
      name: “BME280 Luftdruck”
      id: luftdruck
      oversampling: 16x
      filters:
      - offset: -0
      humidity:
      name: “BME280 Feuchtigkeit”
      id: feuchtigkeit
      oversampling: 16x
      address: 0x76
      update_interval: 60s

    font:

    • file: “16020_FUTURAM.ttf”
      id: my_font
      size: 16

    display:

    • platform: ssd1306_i2c
      model: “SSD1306 128x64”
      reset_pin: D4
      address: 0x3C
      lambda: |-
      it.print(0, 0, id(my_font), “Temp.:”,id(temperatur).state);
      it.print(0, 21, id(my_font), “Luftf.:”);
      it.print(0, 40, id(my_font), “hPl. :”);

  • Hast du auf die richtige Formatierung geachtet? Gerde nach dem lambda Part?

    Probiere es mal damit:

    display:
       platform: ssd1306_i2c
       model: “SSD1306 128x64”
       reset_pin: D4
       address: 0x3C
       lambda: |-
          it.printf(0, 0, id(my_font), “Temp.: %.1f°”, id(temperatur).state);
          it.printf(0, 21, id(my_font), “Luftf.:”);
          it.printf(0, 40, id(my_font), “hPl. :”);
    

    Habe nur folgendes geändert:

    “Temp.:”, id(temperatur).state
    wird zu:
    “Temp.: %.1f°”, id(temperatur).state

    Wie naspio schon gesagt hat


  • Sorry ich meinte:

    display:
       platform: ssd1306_i2c
       model: “SSD1306 128x64”
       reset_pin: D4
       address: 0x3C
       lambda: |-
          it.printf(0, 0, id(my_font), “Temp.: %.1f°”, id(temperatur).state);
          it.printf(0, 21, id(my_font), “Luftf.:”);
          it.printf(0, 40, id(my_font), “hPl. :”);
    

  • Habe %.1f hinzugefügt, und das Leerzeichen hinter dem Komma vor id hinzugefügt.
    Fehlermeldung:
    src/main.cpp: In lambda function:
    src/main.cpp:290:65: error: no matching function for call to ‘esphome::display::DisplayBuffer::print(int, int, esphome::display::Font*&, const char [14], float&)’
    it.print(0, 0, my_font, “Temp.: %.1f°”, temperatur->state);
    ^
    src/main.cpp:290:65: note: candidates are:
    In file included from src/esphome.h:15:0,
    from src/main.cpp:3:
    src/esphome/components/display/display_buffer.h:139:8: note: void esphome::display::DisplayBuffer::print(int, int, esphome::display::Font*, esphome::Color, esphome::display::TextAlign, const char*)
    void print(int x, int y, Font font, Color color, TextAlign align, const char text);
    ^
    src/esphome/components/display/display_buffer.h:139:8: note: candidate expects 6 arguments, 5 provided
    src/esphome/components/display/display_buffer.h:149:8: note: void esphome::display::DisplayBuffer::print(int, int, esphome::display::Font
    , esphome::Color, const char
    )
    void print(int x, int y, Font font, Color color, const char text);
    ^
    src/esphome/components/display/display_buffer.h:149:8: note: no known conversion for argument 5 from ‘float’ to 'const char

    src/esphome/components/display/display_buffer.h:159:8: note: void esphome::display::DisplayBuffer::print(int, int, esphome::display::Font
    , esphome::display::TextAlign, const char*)
    void print(int x, int y, Font font, TextAlign align, const char text);
    ^
    src/esphome/components/display/display_buffer.h:159:8: note: no known conversion for argument 4 from ‘const char [14]’ to ‘esphome::display::TextAlign’
    src/esphome/components/display/display_buffer.h:168:8: note: void esphome::display::DisplayBuffer::print(int, int, esphome::display::Font
    , const char
    )
    void print(int x, int y, Font *font, const char *text);
    ^
    src/esphome/components/display/display_buffer.h:168:8: note: candidate expects 4 arguments, 5 provided
    *** [/data/d1mini_3_bme280_oled/.pioenvs/d1mini_3_bme280_oled/src/main.cpp.o] Error 1


  • @Juergen_Ka es geht nicht um das Leerzeichen sondern darum, dass du

    printf(....) statt print(...) verwendest. Probier das mal.👍

    Also keine Ahnung worüber oder wovon ihr redet :D, aber ich glaub ich seh all eure Nachrichten. 😄 Vielleicht solltest ihr das eher im PrivatChat klären und nicht in einem öffentlichen Thema. 🤣


  • OH man, genau das war das Problem die ganze Zeit!!! Manchmal sieht man den Wald vor lauter Bäume nicht. Nur das “f” hat gefehlt. 👍 👍 👏 👏


  • Yeah! Super 🙂 👯‍♂️


  • Vielen, vielen Dank dafür!! Hab so viel herumgedockter und schon an mir selbst gezweifelt! Man sollte halt doch öffters copy/paste verwenden! 😉 😂 😂


  • So, jetzt kann das Gehäuse in den Druck gehen!
    PSX_20210417_190732.jpg


  • @shrad sagte in Sensordaten (z.B. Temp., Luftdruck, etc.) am gleichen ESP mittels OLED anzeigen:

    @Juergen_Ka es geht nicht um das Leerzeichen sondern darum, dass du

    printf(....) statt print(...) verwendest. Probier das mal.👍

    Also keine Ahnung worüber oder wovon ihr redet :D, aber ich glaub ich seh all eure Nachrichten. 😄 Vielleicht solltest ihr das eher im PrivatChat klären und nicht in einem öffentlichen Thema. 🤣

    Nein, ist schon ok. Ist so gewollt!


  • @Juergen_Ka schrieb:

    So, jetzt kann das Gehäuse in den Druck gehen!

    Aber die Luftfeuchtigkeit in hPa sieht schon komisch aus 🤭


  • @Danoro73 schrieb:

    Aber die Luftfeuchtigkeit in hPa sieht schon komisch aus 🤭

    Sollte wohl LUFTDRUCK heissen…


  • Sind bestimmt die 2 Werte vertauscht


  • Danke dass ihr aufgepasst habt. habe die Fehler schon behoben und richtig angeordnet. War nur so vom Ergebnis begeistert, dass ich das erst später bemerkte!


  • 😂 😂

Ähnliche Themen

  • 1
  • 1
  • 16
  • 19
  • 1