Quero adicionar o display no homeassistant que retorna a temperatura no print

Estou tendo dificuldade em colocar o retorno da temperatura no display, sempre retorna erro na
lambda, e quando consigo com o hello world, ainda tenho erro na instalação.

recebo esse erro:
Unexpected error: The firmware binary is invalid (magic byte=FF, should be E9)

Meu sck do display está na porta 22 e o SDA na 21

substitutions:
  esphome_name: esp32_ssd1306

esphome:
  name: "${esphome_name}"
  friendly_name: Esp1

esp32:
  board: esp32dev
  framework:
    type: arduino

logger:

api:
  encryption:
    key: "74DyYNMsRqP/KnbCC90/nsbUfpHdx/8ruhphmCaX1Js="

ota:
  password: "4c2bc4519a2c8d18c96b7765303be11b"

wifi:
  ssid: "MyNet"
  password: "22221313"

  ap:
    ssid: "Esp1 Fallback Hotspot"
    password: "WBd6JI5tBEzO"

captive_portal:

i2c:
  - id: bus_a
    sda: 21
    scl: 22
    scan: true

sensor:
  - platform: dht
    pin: GPIO13
    model: dht11
    temperature:
      name: "office_temperature"
    humidity:
      name: "office_humidity"
    update_interval: 20s
  - platform: bmp280
    temperature:
      name: "Outside Temperature"
      oversampling: 16x
    pressure:
      name: "Outside Pressure"
    address: 0x76
  - platform: uptime
    name: "${esphome_name} - Uptime Sensor"
  - platform: wifi_signal
    name: "${esphome_name} - WiFi Signal"
    update_interval: 60s

font:
  - file: "/config/esphome/fonts/Elronmonospace.ttf"
    id: my_font
    size: 14

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    lambda: |-
      it.print(0, 0, id(my_font), "Hello World!");

switch:
  - platform: template
    name: "${esphome_name} - Onboard LED"
    id: onboard_led
    turn_on_action:
      - logger.log: "LED Ligado"
    turn_off_action:
      - logger.log: "LED Desligado"

Para display de variáveis, é necessário usar a função printf.
Um exemplo que está funcionando para mim:

    pages:
      - id: page1
        lambda: |-
          it.printf(0, 20, id(my_font_small), "Target: %.0f°C", id(hottub).target_temperature_low);
          it.printf(0, 0, id(my_font_small), "Current: %.1f°C", id(current_temp).state);
          it.printf(0, 40, id(my_font_small), "%.i", id(hottub).mode);

O link da documentação:

edit:

Olhei seu código com mais calma. Está faltando ID para as variáveis que você quer usar. Toda vez que você vai referenciar algo dentro do seu código, este algo precisa ter um id associado.
Como exemplo:

  - platform: dht
    pin: GPIO13
    model: dht11
    temperature:
      name: "office_temperature"
      id: office_temperature
    humidity:
      name: "office_humidity"
      id: office_humidity
    update_interval: 20s
  - platform: bmp280
    temperature:
      name: "Outside Temperature"
      id: outside_temperature
      oversampling: 16x
    pressure:
      name: "Outside Pressure"
      id: outside_pressure
    address: 0x76
  - platform: uptime
    name: "${esphome_name} - Uptime Sensor"
  - platform: wifi_signal
    name: "${esphome_name} - WiFi Signal"
    update_interval: 60s

E para o display, você poderia fazer assim:

it.printf(0, 0, id(my_font), "Office: %.1f°C", id(office_temperature).state);
1 Like

Muito obrigado, consegui

Quando puder, marca como resolvido, que outras pessoas que tiverem o mesmo problema vão ter mais facilidade em em encontrar a solução. Happy making!