Skip to content

Instantly share code, notes, and snippets.

@MadonnaMat
Created May 29, 2026 04:52
Show Gist options
  • Select an option

  • Save MadonnaMat/7997d2e358b5762b48c0aee44f986ac0 to your computer and use it in GitHub Desktop.

Select an option

Save MadonnaMat/7997d2e358b5762b48c0aee44f986ac0 to your computer and use it in GitHub Desktop.
esphome-web-6f61b4-fix.yaml
esphome:
name: esphome-web-6f61b4
friendly_name: test-esp
min_version: 2025.11.0
name_add_mac_suffix: false
on_boot:
priority: -100
then:
- safe_mode.mark_successful
- delay: 500ms
- lambda: id(my_display).turn_on();
- delay: 50ms
- component.update: battery_voltage_raw
- component.update: my_display
esp32:
variant: esp32
framework:
type: arduino
globals:
- id: last_keypress
type: std::string
initial_value: '"None"'
font:
- file: "gfonts://Roboto"
id: font_large
size: 32
- file: "gfonts://Roboto"
id: font_small
size: 14
i2s_audio:
i2s_bclk_pin: GPIO25
i2s_lrclk_pin: GPIO26
speaker:
- platform: i2s_audio
id: my_speaker
i2s_dout_pin: GPIO27
dac_type: external
rtttl:
- id: rtttl_player
speaker: my_speaker
i2c:
sda: GPIO21
scl: GPIO22
scan: true
frequency: 100kHz
display:
- platform: ssd1306_i2c
model: "SH1106 128x64"
address: 0x3C
id: my_display
update_interval: never
lambda: |-
it.printf(0, 0, id(font_small), "Last Key Pressed:");
it.printf(64, 25, id(font_large), TextAlign::TOP_CENTER, "%s", id(last_keypress).c_str());
pcf8574:
- id: 'pcf8574_hub'
address: 0x20
matrix_keypad:
- id: my_keypad
rows:
- pin:
pcf8574: pcf8574_hub
number: 7
mode: OUTPUT
- pin:
pcf8574: pcf8574_hub
number: 6
mode: OUTPUT
- pin:
pcf8574: pcf8574_hub
number: 5
mode: OUTPUT
- pin:
pcf8574: pcf8574_hub
number: 4
mode: OUTPUT
columns:
- pin:
pcf8574: pcf8574_hub
number: 3
mode: INPUT
- pin:
pcf8574: pcf8574_hub
number: 2
mode: INPUT
- pin:
pcf8574: pcf8574_hub
number: 1
mode: INPUT
- pin:
pcf8574: pcf8574_hub
number: 0
mode: INPUT
keys: "123A456B789C*0#D"
on_key:
- logger.log:
format: "Key pressed: %c"
args: [ 'x' ]
- lambda: |-
id(last_keypress) = std::string(1, x);
- rtttl.play:
id: rtttl_player
rtttl: "boop:d=32,o=6,b=160:b"
- component.update: my_display
sensor:
- platform: adc
pin: GPIO34
name: "Battery Voltage Raw"
id: battery_voltage_raw
attenuation: 12db
update_interval: never
accuracy_decimals: 2
filters:
- multiply: 2.0
- platform: template
name: "Battery Capacity"
id: battery_capacity
device_class: battery
unit_of_measurement: "%"
accuracy_decimals: 0
lambda: |-
if (!id(battery_voltage_raw).has_state()) return {};
float voltage = id(battery_voltage_raw).state;
float max_voltage = 4.2;
float min_voltage = 3.2;
if (std::isnan(voltage)) return {};
if (voltage >= max_voltage) return 100.0;
if (voltage <= min_voltage) return 0.0;
return ((voltage - min_voltage) / (max_voltage - min_voltage)) * 100.0;
deep_sleep:
id: my_deep_sleep
wakeup_pin:
number: GPIO32
mode: INPUT_PULLUP
inverted: false
allow_other_uses: True
binary_sensor:
- platform: gpio
pin:
number: GPIO32
mode: INPUT_PULLUP
inverted: false
allow_other_uses: True
name: "Door Reed Switch"
filters:
- delayed_on: 50ms
id: door_switch
on_release:
- logger.log: "Door Closed! Entering deep sleep."
- lambda: |-
ESP_LOGD("display", "in shutdown lambda");
id(my_display).fill(Color::BLACK); // Clear the buffer
id(my_display).update(); // Push the black screen to the display
ESP_LOGD("display", "shutdown complete");
- logger.log: "Preparing for sleep"
- delay: 50ms
- lambda: id(my_display).turn_off();
- wait_until:
condition:
api.connected:
timeout: 10s
- delay: 500ms
- logger.log: "Now entering Sleep"
- deep_sleep.enter: my_deep_sleep
on_press:
- logger.log: "Door Opened! Waking up..."
logger:
api:
ota:
- platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment