최초 세팅후 esp32에만 전원넣은 상태
숫자 폰트만 따로 만들어 세팅하고 매트릭스와 esp32 모두 전원 넣은 상태
수동으로 시간을 맞춰야 하는 기존 매트릭스 시계의 불편함때문에 네트워크 동기화 시계를 DIY.
처음 아두이노와 mqtt를 이용해 구현했다가 마침 HUB75-MatrixPanel-DMA를 wrapper로 씌운 외부컴포넌트가 있어 esphome으로 이동. HA 통합과 편의성, 유지관리면에서 esphome이 확실히 유리.
20px이상 크기에는 ttf폰트에 대부분 비트맵 폰트가 포함되지 않아 매트릭스처럼 저해상도에서는 거칠게 표현돼 fontforge를 이용해 콜론과 숫자만 따로 만들어 시간을 표시하는 폰트로 이용.
esphome에선 폰트를 처리하는 방식도 아두이노처럼 일일이 .h로 변환을 거치지 않고 그대로 쓰고 로컬뿐 아니라 웹폰트까지 지정해 컴파일 가능. 전체 펌웨어 용량을 줄이려면 glyph항목에 필요한 기호만 추가 필요.
esp32와 hub75를 연결할 때 pin은 재지정할 수 있고 동봉된 리본케이블을 반으로 잘라 한쪽은 hub75에 연결하고 한쪽은 몰렉스 작업후 esp32에 연결.
**핀배열대로 꽂으면 G와 B가 색깔이 바뀌어 표현돼 G,B핀을 서로 상대 핀헤더에 꽂거나 원래대로 꽂고 yaml파일의 핀넘버에 G,B를 바꿔 입력. 칩셋에 따라 핀헤더 위치가 다른 경우가 있다고 함.
**esphome에서 고정ip를 사용할 때는 dns서비스가 필요한 겨우 수동으로 입력해야 함. 당연하겠지만 공유기에 세팅된 dns는 dhcp로 구성했을 때만 자동으로 가져옴.
** 5v 2a 어댑터를 사용하면 부팅시 필요한 소비전력이 높아 실패할 수 있어 5v 3a이상 어댑터 추천. 일단 전원이 들어온 후에는 최소밝기에서 소비전력이 0.8W, 최대밝기에서 1.7W
** 고용량 어댑터에서도 문제 발생해 굵은 DC케이블(AWG 24)을 USB입력으로 제작해 테스트해보니 안정적. 기존 사용하던 케이블을 잘라보니 AWG 26
ESPHome-HUB75-MatrixDisplayWrapper:
https://github.com/TillFleisch/ESPHome-HUB75-MatrixDisplayWrapper
https://github.com/TillFleisch/ESPHome-HUB75-MatrixDisplayWrapper
name: esp32-clock
esphome:
name: ${name}
area: Bedroom
esp32:
board: esp32doit-devkit-v1
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "${name} hotspot"
password: !secret wifi_password
captive_portal:
logger:
api:
ota:
- platform: esphome
password: !secret ota_password
external_components:
- source: github://TillFleisch/ESPHome-HUB75-MatrixDisplayWrapper@main
font:
- file: "fonts/78.bdf"
id: di
size: 18
- file: "fonts/7segish.bdf"
id: digi
size: 12
- file: "fonts/MatrixChunky8X.ttf"
id: mono
size: 8
glyphs: "0123456789:;<=>?@^_abcdefghijklmnopqrstuvwxyz°"
color:
- id: teal
hex: 00CED1
- id: blue
hex: 7B68EE
- id: brown
hex: D2691E
- id: orange
hex: FFA500
- id: green
hex: 008000
- id: pink
hex: FF69B4
- id: purple
hex: 9400D3
- id: red
hex: FF0000
- id: yellow
hex: FFFF00
display:
- platform: hub75_matrix_display
id: matrix
width: 64
height: 32
R1_pin: 15
G1_pin: 2
B1_pin: 4
R2_pin: 16
G2_pin: 17
B2_pin: 5
A_pin: 18
B_pin: 19
C_pin: 12
D_pin: 14
CLK_pin: 27
LAT_pin: 26
OE_pin: 13
lambda: |-
char temp[15];
snprintf(temp, sizeof(temp), "%.1f°C", id(outdoor).state);
it.print(4, 1, id(mono), id(red), temp);
auto time = id(clock_time).now();
if (time.is_valid()) {
char str[6];
snprintf(str, sizeof(str), "%02d:%02d", time.hour, time.minute);
it.print(2, 12, id(di), id(teal), str);
} else {
it.print(3, 20, id(mono), "Connecting...");
}
sun:
latitude: 35.8722
longitude: 128.6025
time:
- platform: sntp
id: clock_time
timezone: UTC-9
servers:
- 0.pool.ntp.org
number:
- platform: hub75_matrix_display
matrix_id: matrix
name: "Brightness"
switch:
- platform: hub75_matrix_display
matrix_id: matrix
name: "Power"
id: power
restore_mode: ALWAYS_ON
- platform: restart
name: "Restart"
sensor:
- platform: homeassistant
id: outdoor
entity_id: sensor.outdoor_thmeter_temperature
internal: true