带屏幕版本

户外热点版本
esphome:
  name: scd41-0
  friendly_name: scd41-0

esp32:
  variant: esp32c3
  framework:
    type: esp-idf

logger:

api:
  reboot_timeout: 0s
  encryption:
    key: "LsaHsXsKgR6Cp6NqLuRn37yrTnz3/4qI/5+uc6LZsuo="

ota:
  - platform: esphome

wifi:
  output_power: 8.5dB
  reboot_timeout: 0s

  ap:
    ssid: "SCD41"
    password: "12345678"
    manual_ip:
      static_ip: 192.168.4.1
      gateway: 192.168.4.1
      subnet: 255.255.255.0

i2c:
  sda: GPIO3
  scl: GPIO4
  scan: true
  frequency: 100kHz

sensor:
  - platform: scd4x
    co2:
      id: scd41_co2
      name: "CO2"
    temperature:
      id: scd41_temperature
      name: "Temperature"
    humidity:
      id: scd41_humidity
      name: "Humidity"
    measurement_mode: low_power_periodic
    update_interval: 30s

web_server:
  port: 80
  version: 3
  local: true
  log: false
font:
  - file: "C:/Windows/Fonts/consola.ttf"
    id: oled_co2_font
    size: 10
    glyphs: " -.0123456789CHORpm%"

  - file: "C:/Windows/Fonts/consola.ttf"
    id: oled_small_font
    size: 10
    glyphs: " -.0123456789CHORpm%"

  - file: "C:/Windows/Fonts/consola.ttf"
    id: oled_ip_font
    size: 10
    glyphs: " .0123456789IP"

display:
  - platform: ssd1306_i2c
    id: scd41_oled
    model: "SSD1306 128x32"
    address: 0x3C
    update_interval: 60s
    lambda: |-
      if (std::isfinite(id(scd41_co2).state)) {
        it.printf(0, 0, id(oled_co2_font),
                  "CO2 %.0f ppm", id(scd41_co2).state);
      } else {
        it.print(0, 0, id(oled_co2_font), "CO2 -- ppm");
      }

      if (std::isfinite(id(scd41_temperature).state)) {
        it.printf(0, 11, id(oled_small_font),
                  "%.1fC", id(scd41_temperature).state);
      } else {
        it.print(0, 11, id(oled_small_font), "--C");
      }

      if (std::isfinite(id(scd41_humidity).state)) {
        it.printf(64, 11, id(oled_small_font),
                  "%.0f%%RH", id(scd41_humidity).state);
      } else {
        it.print(64, 11, id(oled_small_font), "--%RH");
      }

      char ip[network::IP_ADDRESS_BUFFER_SIZE] = "192.168.4.1";
      if (wifi::global_wifi_component->is_connected()) {
        wifi::global_wifi_component->get_ip_addresses()[0].str_to(ip);
      }
      it.printf(0, 22, id(oled_ip_font), "IP %s", ip);

external_components:
  - source:
      type: local
      path: "C:/Users/xc/esphome/components"
    components: [history24h]

history24h:
  setup_priority: 200
  co2_id: scd41_co2
  temperature_id: scd41_temperature
  humidity_id: scd41_humidity

# 加到现有 YAML 顶层;已有 switch: 时只合并下面的条目。
# 保留 name: "屏幕",历史主页通过这个名称调用开关。
# 每次重启默认亮屏;运行中关屏不停止传感器或历史记录。
switch:
  - platform: template
    id: oled_screen_power
    name: "屏幕"
    icon: "mdi:monitor"
    # 等显示组件初始化完成,再执行开机亮屏动作。
    setup_priority: -100
    restore_mode: ALWAYS_ON
    lambda: |-
      return id(scd41_oled).is_on();
    turn_on_action:
      - lambda: |-
          id(scd41_oled).turn_on();
      - component.update: scd41_oled
    turn_off_action:
      - lambda: |-
          id(scd41_oled).turn_off();
WIFI版本
esphome:
  name: scd41-0
  friendly_name: scd41-0

esp32:
  variant: esp32c3
  framework:
    type: esp-idf

logger:

api:
  reboot_timeout: 0s
  encryption:
    key: "LsaHsXsKgR6Cp6NqLuRn37yrTnz3/4qI/5+uc6LZsuo="

ota:
  - platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  output_power: 8.5dB
  reboot_timeout: 0s

  ap:
    ssid: "SCD41-1"
    password: "12345678"
    ap_timeout: 90s
    manual_ip:
      static_ip: 192.168.4.1
      gateway: 192.168.4.1
      subnet: 255.255.255.0


i2c:
  sda: GPIO3
  scl: GPIO4
  scan: true
  frequency: 100kHz

sensor:
  - platform: scd4x
    co2:
      id: scd41_co2
      name: "CO2"
    temperature:
      id: scd41_temperature
      name: "Temperature"
    humidity:
      id: scd41_humidity
      name: "Humidity"
    measurement_mode: low_power_periodic
    update_interval: 30s

web_server:
  port: 80
  version: 3
  local: true
  log: false
font:
  - file: "C:/Windows/Fonts/consola.ttf"
    id: oled_co2_font
    size: 10
    glyphs: " -.0123456789CHORpm%"

  - file: "C:/Windows/Fonts/consola.ttf"
    id: oled_small_font
    size: 10
    glyphs: " -.0123456789CHORpm%"

  - file: "C:/Windows/Fonts/consola.ttf"
    id: oled_ip_font
    size: 10
    glyphs: " .0123456789IP"

display:
  - platform: ssd1306_i2c
    id: scd41_oled
    model: "SSD1306 128x32"
    address: 0x3C
    update_interval: 60s
    lambda: |-
      if (std::isfinite(id(scd41_co2).state)) {
        it.printf(0, 0, id(oled_co2_font),
                  "CO2 %.0f ppm", id(scd41_co2).state);
      } else {
        it.print(0, 0, id(oled_co2_font), "CO2 -- ppm");
      }

      if (std::isfinite(id(scd41_temperature).state)) {
        it.printf(0, 11, id(oled_small_font),
                  "%.1fC", id(scd41_temperature).state);
      } else {
        it.print(0, 11, id(oled_small_font), "--C");
      }

      if (std::isfinite(id(scd41_humidity).state)) {
        it.printf(64, 11, id(oled_small_font),
                  "%.0f%%RH", id(scd41_humidity).state);
      } else {
        it.print(64, 11, id(oled_small_font), "--%RH");
      }

      char ip[network::IP_ADDRESS_BUFFER_SIZE] = "192.168.4.1";
      if (wifi::global_wifi_component->is_connected()) {
        wifi::global_wifi_component->get_ip_addresses()[0].str_to(ip);
      }
      it.printf(0, 22, id(oled_ip_font), "IP %s", ip);

external_components:
  - source:
      type: local
      path: "C:/Users/xc/esphome/components"
    components: [history24h]

history24h:
  setup_priority: 200
  co2_id: scd41_co2
  temperature_id: scd41_temperature
  humidity_id: scd41_humidity

# 加到现有 YAML 顶层;已有 switch: 时只合并下面的条目。
# 保留 name: "屏幕",历史主页通过这个名称调用开关。
# 每次重启默认亮屏;运行中关屏不停止传感器或历史记录。
switch:
  - platform: template
    id: oled_screen_power
    name: "屏幕"
    icon: "mdi:monitor"
    # 等显示组件初始化完成,再执行开机亮屏动作。
    setup_priority: -100
    restore_mode: ALWAYS_ON
    lambda: |-
      return id(scd41_oled).is_on();
    turn_on_action:
      - lambda: |-
          id(scd41_oled).turn_on();
      - component.update: scd41_oled
    turn_off_action:
      - lambda: |-
          id(scd41_oled).turn_off();
打赏支持

支付宝扫一扫

支付宝打赏二维码

感谢您的支持!让我有持续更新的动力

© 版权声明
THE END
点赞0 分享
评论 抢沙发
头像-小陈折腾日记
欢迎您留下宝贵的见解!
提交
头像-小陈折腾日记

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容