Add liloled

This commit is contained in:
void 2025-04-04 04:25:54 +00:00
parent 79baa484c7
commit 41be8b1915
1 changed files with 170 additions and 0 deletions

170
liloled Normal file
View File

@ -0,0 +1,170 @@
esphome:
name: esphome-web-4fc3ec
friendly_name: oled little guy
min_version: 2024.11.0
name_add_mac_suffix: false
esp32:
board: esp32dev
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
platform: esphome
wifi:
ssid: "DNTD"
password: "wifipassword"
# BLE Tracker and Proxy
esp32_ble_tracker:
scan_parameters:
active: false
bluetooth_proxy:
active: true
sensor:
- platform: homeassistant
id: temperature
entity_id: weather.home
attribute: temperature
internal: true
time:
- platform: homeassistant
id: esptime
# Define global variable for the page
globals:
- id: page
type: int
restore_value: no
initial_value: '0'
# I2C Configuration for OLED Display
i2c:
sda: GPIO21
scl: GPIO22
scan: true
# OLED Display Configuration
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
rotation: 0
lambda: |-
if (id(page) == 0) {
std::string weather_text = id(weather_condition).state.c_str();
// Wrap the weather text if it exceeds 16 characters
if (weather_text.length() > 16) {
it.print(0, 0, id(font1), weather_text.substr(0, 16).c_str());
it.print(0, 20, id(font1), weather_text.substr(16).c_str());
} else {
it.print(0, 0, id(font1), weather_text.c_str());
}
// Temperature
char temp_str[20];
snprintf(temp_str, sizeof(temp_str), "%d°F", (int) id(temperature).state);
if (strlen(temp_str) > 16) {
it.print(0, 40, id(font1), temp_str);
} else {
it.print(0, 40, id(font1), temp_str);
}
}
else if (id(page) == 1) {
// Date & Time
std::string time_str = id(esptime).now().strftime("%I:%M %p");
if (time_str.length() > 16) {
it.print(0, 0, id(font1), time_str.substr(0, 16).c_str());
it.print(0, 20, id(font1), time_str.substr(16).c_str());
} else {
it.print(0, 0, id(font1), time_str.c_str());
}
}
else if (id(page) == 2) {
// Date (e.g., "Wed 04/03")
std::string date_str = id(esptime).now().strftime("%a %m/%d");
if (date_str.length() > 16) {
it.print(0, 0, id(font1), date_str.substr(0, 16).c_str());
it.print(0, 20, id(font1), date_str.substr(16).c_str());
} else {
it.print(0, 0, id(font1), date_str.c_str());
}
}
else if (id(page) == 3) {
// If needed, add a new page for custom info (just an example)
std::string custom_text = "More info here";
if (custom_text.length() > 16) {
it.print(0, 0, id(font1), custom_text.substr(0, 16).c_str());
it.print(0, 20, id(font1), custom_text.substr(16).c_str());
} else {
it.print(0, 0, id(font1), custom_text.c_str());
}
}
else if (id(page) == 4) {
// Media Title and Artist
std::string media_title = id(media_title_sensor).state.c_str();
std::string media_artist = id(media_artist_sensor).state.c_str();
// Display media title
if (media_title.length() > 16) {
it.print(0, 0, id(font2), media_title.substr(0, 16).c_str());
it.print(0, 20, id(font2), media_title.substr(16).c_str());
} else {
it.print(0, 0, id(font2), media_title.c_str());
}
// Display media artist
if (media_artist.length() > 16) {
it.print(0, 40, id(font2), media_artist.substr(0, 16).c_str());
it.print(0, 60, id(font2), media_artist.substr(16).c_str());
} else {
it.print(0, 40, id(font2), media_artist.c_str());
}
}
# Define Font for OLED
font:
- file: "gfonts://Roboto"
id: font1
size: 22
- file: "gfonts://Roboto"
id: font2
size: 14
# Text sensors for weather and location information
text_sensor:
- platform: homeassistant
id: weather_condition
entity_id: weather.home
internal: true
- platform: homeassistant
id: media_title_sensor
entity_id: media_player.deepthought
attribute: media_title
- platform: homeassistant
id: media_artist_sensor
entity_id: media_player.deepthought
attribute: media_artist
interval:
- interval: 5s
then:
- lambda: |-
id(page) = (id(page) + 1) % 5;