开发环境
主控:ESP12-F
屏幕:0.96寸OLED,I2C接口
ESPHOME版本:v2023.6.4
参考资料
- ESPHOME ssd1306_i2c驱动支持SSD1306、SSD1305、SH1106主控的屏幕。
- 该组件必须使用普通I2C总线接口连接屏幕。
- 如果使用SPI接口连接屏幕,可参考Over SPI。
编写配置文件
font:
- file: # 创建一个字库
type: gfonts
family: Roboto
weight: 900
id: my_gfont
size: 16
i2c: # 配置I2C接口信息
sda: GPIO2
scl: GPIO14
frequency: 400k
display: # 配置屏幕
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
lambda: |-
it.print(0, 0, id(font), "Hello World!");
display 参数说明
- platform: 显示器型号
- SSD1306 128x32 - SSD1306 128列 32行
- SSD1306 128x64
- SSD1306 96x16
- SSD1306 72x40
- SSD1306 64x48
- SH1106 128x32
- SH1106 128x64
- SH1106 96x16
- SH1106 64x48
- SH1107 128x64
- SSD1305 128x32
- SSD1305 128x64
- reset_pin (可选参数): Reset引脚
- address (可选参数, int): 屏幕I2C地址, 默认为0x3C
- rotation (可选参数): 设置屏幕选转,默认为0°,可选:90°, 180°, 270°。
- contrast (可选参数, %): 设置对比度,默认为100%。
- brightness (可选参数, %): 设置显示亮度,默认100% ,仅SSD1305可用。
- external_vcc (可选参数, boolean): 是否使用了外部电源, 如果是,设置为true,默认为false。
- flip_x (可选参数, boolean): 翻转屏幕上的水平轴。默认为true。
- flip_y (可选参数, boolean): 翻转屏幕上的垂直轴。默认为true。
- offset_x (可选参数, int): 如果某个水平像素丢失,设置此选项。数字只允许在-32~32之间。默认为0。
- offset_y (可选参数, int): 如果缺少一些垂直像素,请设置此选项。数字只允许在-32~32之间。默认为0。
- invert (可选参数, boolean): 反转显示器上的所有像素状态。默认为false。
- lambda (可选参数, lambda): 用于在显示器上呈现内容的lambda。有关更多信息,请参阅 Display Rendering Engine。
- update_interval (可选参数, Time): 重新绘制屏幕的间隔时间。默认为1秒。
- pages (可选参数, list): 显示页面而不是单个lambda。参见Display Pages。
- id (可选参数, ID): 手动指定用于代码生成的ID。
为了加快显示更新过程,可以选择更高的I²C频率。
编写时间组件
时间组件相关说明请参考ESPHOME Time组件
time:
- platform: sntp
id: sntp_time
timezone: Asia/Shanghai
on_time:
- seconds: "*"
then:
lambda: |-
auto time = id(sntp_time).now();
ESP_LOGW("time", "%d-%d-%d %d:%d:%d", time.year, time.month, time.day_of_month, time.hour, time.minute, time.second);
全部配置代码
esphome:
name: olcd-demo
friendly_name: OLCD_demo
esp8266:
board: esp12e
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "********************************"
ota:
password: "*****************************"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Olcd-Demo Fallback Hotspot"
password: "**********************"
captive_portal:
font:
- file:
type: gfonts
family: Roboto
weight: 900
id: my_gfont
size: 16
i2c: # 配置I2C接口信息
sda: GPIO2
scl: GPIO14
frequency: 400k
display:
- platform: ssd1306_i2c
id: my_oled
model: "SSD1306 128x64"
address: 0x3C
lambda: |-
if (id(sntp_time).now().is_valid()) {
auto time = id(sntp_time).now();
it.printf(0, 16, id(my_gfont), "%04d:%02d:%02d", time.year, time.month, time.day_of_month);
it.printf(0, 32, id(my_gfont), "%02d:%02d:%02d", time.hour, time.minute, time.second);
} else {
it.print(0, 0, id(my_gfont), "NTP...");
}
time:
- platform: sntp
id: sntp_time
timezone: Asia/Shanghai
on_time:
- seconds: "*"
then:
lambda: |-
auto time = id(sntp_time).now();
ESP_LOGW("time", "%d-%d-%d %d:%d:%d", time.year, time.month, time.day_of_month, time.hour, time.minute, time.second);