Last active
December 19, 2024 22:05
-
-
Save tkroo/9664227d2ff2203588087164e81ddc5e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
substitutions: | |
name: esphome-web-012583 | |
internal_name: ESPHOME_012583 | |
friendly_name: epaper clock | |
board_name: esp32dev | |
comment: "E-paper" | |
esphome: | |
name: ${name} | |
friendly_name: ${friendly_name} | |
comment: "${board_name} - ${comment}" | |
min_version: 2024.6.0 | |
name_add_mac_suffix: false | |
project: | |
name: esphome.web | |
version: dev | |
includes: | |
- time_functions.h | |
# on_boot: | |
# priority: -100.0 | |
# then: | |
# - component.update: epaper | |
esp32: | |
board: esp32dev | |
framework: | |
type: esp-idf | |
packages: | |
common: !include ../common/common.yaml | |
font: | |
- file: | |
type: gfonts | |
family: "Ubuntu Mono" | |
weight: 700 | |
id: font1 | |
size: 18 | |
- file: | |
type: gfonts | |
family: "Arvo" | |
weight: 700 | |
id: font_num | |
size: 12 | |
spi: | |
mosi_pin: GPIO21 | |
clk_pin: GPIO22 | |
time: | |
- platform: sntp | |
id: sntp_time | |
display: | |
- platform: waveshare_epaper | |
id: epaper | |
model: 2.90inv2 | |
rotation: 270 | |
full_update_every: 21600 | |
cs_pin: | |
number: 16 | |
dc_pin: | |
number: 17 | |
busy_pin: | |
number: 18 | |
reset_pin: | |
number: 5 | |
lambda: |- | |
auto my_time = id(sntp_time).now(); | |
if (my_time.is_valid()) { | |
int offset_angle = 90; | |
int center_x = (it.get_width()) / 2; | |
int center_y = (it.get_height()) / 2; | |
int r = center_y - 4; | |
float hour_angle_D = calculate_hour_angle(my_time.hour, my_time.minute, offset_angle); | |
float minute_angle_D = calculate_minute_angle(my_time.minute, offset_angle); | |
float second_angle_D = calculate_second_angle(my_time.second, offset_angle); | |
it.strftime(0, 0, id(font1), "%I:%M:%S %p", my_time); | |
// outer ring | |
it.filled_ring(center_x, center_y, r, r + 2); | |
// center dot | |
it.filled_circle(center_x, center_y, 3); | |
// clock numbers | |
for (int i = 0; i < 12; i++) { | |
float angle = ((i * 30) - offset_angle) * PI / 180; | |
float x = (r - 14) * cos(angle) + center_x; | |
float y = (r - 14) * sin(angle) + center_y; | |
it.printf(x, y, id(font_num), TextAlign::CENTER, i == 0 ? "12" : "%.0d", i); | |
} | |
// tick marks | |
for (int i = 0; i < 60; i++) { | |
float angle = ((i * 6) - offset_angle); | |
bool is_major_tick = (i % 5 == 0); | |
int inner_r = is_major_tick ? r - 3 : r - 5; | |
int outer_r = is_major_tick ? r : r - 3; | |
if (is_major_tick) { | |
it.line_at_angle(center_x, center_y, angle - 1, inner_r, outer_r); | |
it.line_at_angle(center_x, center_y, angle, inner_r - 1, outer_r); | |
it.line_at_angle(center_x, center_y, angle + 1, inner_r, outer_r); | |
} else { | |
it.line_at_angle(center_x, center_y, angle, inner_r, outer_r); | |
} | |
} | |
// clock hands | |
it.line_at_angle(center_x, center_y, hour_angle_D, 2, r - 30); | |
it.line_at_angle(center_x, center_y, minute_angle_D, 2, r - 18); | |
it.line_at_angle(center_x, center_y, second_angle_D, 2, r - 8); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
float calculate_hour_angle(int hour, int minute, int offset_angle) { | |
return (hour * 30) + (minute * 0.5f) - offset_angle; | |
} | |
float calculate_minute_angle(int minute, int offset_angle) { | |
return (minute * 6.0f) - offset_angle; | |
} | |
float calculate_second_angle(int second, int offset_angle) { | |
return (second * 6.0f) - offset_angle; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment