← Takaisin ohjeisiin

D1 Mini + Dallas + OLED lämpömittari ESPHomella

Tässä ohjeessa rakennetaan yksinkertainen WiFi-lämpömittari, jossa D1 Mini lukee Dallas DS18B20 -anturia ja näyttää lämpötilan pienellä I²C OLED -näytöllä. Samalla tieto näkyy myös Home Assistantissa ESPHomen kautta.

Tämä on hyvä ensimmäinen ESPHome-projekti, koska osia tarvitaan vähän, kytkentä on helppo ja lopputulos on oikeasti hyödyllinen.

Mitä tällä tehdään?

Projektin lopputuloksena saat laitteen, joka:

Tätä voi käyttää esimerkiksi:

Tarvittavat osat

Kytkentä

OLED-näyttö

Dallas DS18B20

Dallas toimii tässä ohjeessa pinniin D4 kytkettynä, jotta aiempaa kytkentää ei tarvitse muuttaa.

ESPHome YAML

Käytä alla olevaa konfiguraatiota ESPHomessa:



esphome:
  name: lampoanturi

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:
 
ota:
  - platform: esphome
   

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  min_auth_mode: WPA2

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Dallas Fallback Hotspot"
    password: "123456789"

captive_portal:

i2c:
  sda: D2
  scl: D1
  scan: true

one_wire:
  - platform: gpio
    pin: D4

sensor:
  - platform: dallas_temp
    id: lampotila
    address: 0xcc943a5709646128
    name: "Lämpötila"
  - platform: dallas_temp
    id: ulko_lampotila
    address: 0xb1300a5309646128
    name: "Ulko Lämpötila"

font:
  - file: "gfonts://Roboto"
    id: font_iso
    size: 14

  - file: "gfonts://Roboto"
    id: font_big
    size: 28

  - file: "gfonts://Roboto"
    id: font_mid
    size: 18

display:
  - platform: ssd1306_i2c
    id: oled_naytto
    model: "SSD1306 128x64"
    address: 0x3C
    pages:
      - id: sivu1
        lambda: |-
          it.printf(0, 0, id(font_iso), "ProtoBoksi");
          if (id(lampotila).has_state()) {
            it.printf(0, 20, id(font_mid), "Sisa: %.1f C", id(lampotila).state);
          } else {
            it.printf(0, 20, id(font_mid), "Sisa: --.- C");
          }

          if (id(ulko_lampotila).has_state()) {
            it.printf(0, 42, id(font_mid), "Ulko: %.1f C", id(ulko_lampotila).state);
          } else {
            it.printf(0, 42, id(font_mid), "Ulko: --.- C");
          }

      - id: sivu2
        lambda: |-
          it.printf(0, 0, id(font_iso), "Sisalla");
          if (id(lampotila).has_state()) {
            it.printf(0, 28, id(font_big), "%.1f C", id(lampotila).state);
          } else {
            it.printf(0, 28, id(font_big), "--.- C");
          }

interval:
  - interval: 5s
    then:
      - display.page.show_next: oled_naytto
      - component.update: oled_naytto    

Jos näyttö ei toimi heti

Usein syy on jompikumpi näistä:

  1. näytön I²C-osoite ei ole 0x3C

  2. näyttö käyttää SH1106-ohjainta eikä SSD1306:ta

Koska YAMLissa on scan: true, voit katsoa ESPHomen logista löytyykö näytön osoite. Jos osoite on jokin muu, vaihda address oikeaksi.

Jos näyttö ei silti näytä mitään, kokeile vaihtaa tämä:

display:
  - platform: sh1106_i2c

Home Assistantiin liittäminen

Kun firmware on asennettu ja laite verkossa, Home Assistant löytää ESPHome-laitteen yleensä automaattisesti. Lisää laite ESPHome-integraation kautta, niin lämpötila ilmestyy entiteettinä Home Assistantiin.

Samalla saat sekä paikallisen näytön että Home Assistant -seurannan yhdellä laitteella.

Vinkkejä jatkoon

Kun tämä toimii, projektia voi jatkaa helposti eteenpäin. Esimerkiksi:

Yhteenveto

Tässä projektissa yhdistyy kolme hyvää asiaa:

Jos haluat aloittaa ESPHome-harrastuksen jostain yksinkertaisesta mutta hyödyllisestä, tämä on siihen erittäin hyvä ensimmäinen askel.


ProtoBoksi

Rakentelen, testailen, kehittelen ja välillä myös mokailen – mutta valmista syntyy silti. Lisää projekteja ja ohjeita löydät sivulta protoboksi.fi.

Video