I have 2 I2C Grove devices and the display working. You do have to specify the correct address for all 3 or they won’t work. I’ve got a temperature/humidity sensor hooked up to one and a barometric pressure sensor hooked up to the other with output to the OLED display using Home Assistant and ESPHome. You should be able to find the correct addresses on ESPHomes documentation although I noticed the default addresses were listed on the sensor packages but I can confirm it works with a ESP32-C3 XiAO. Below is most of my configuration file is ESPHome and it all works. They are all using the same 2 pins.
i2c:
sda: 6
scl: 7
sensor:
-
platform: wifi_signal
name: seeed-hk47 WiFi signal
update_interval: 10s -
platform: uptime
name: seeed-hk47 uptime -
platform: sht3xd
temperature:
name: “hk47 temperature”
id: temperature_hk47
filters:
- lambda: return x * (9.0/5.0) + 32.0;
unit_of_measurement: “°F”
humidity:
name: “hk47 humidity”
id: humidity_hk47
address: 0x45
update_interval: 30s -
platform: dps310
temperature:
name: “hk47 pressure temp”
id: temp_hk47
pressure:
name: “hk47 pressure”
id: pressure_hk47
address: 0x77
update_interval: 30s
font:
- file: “fonts/arial.ttf”
id: tnr1
size: 12 - file: “fonts/Roboto-Bold.ttf”
id: tnr2
size: 52 - file: “fonts/Insominia.ttf”
id: tnr3
size: 64 - file: “fonts/Times New Roman.ttf”
id: tnr4
size: 51 - file: “fonts/Insominia.ttf”
id: tnr7
size: 60 - file: “fonts/Roboto-Bold.ttf”
id: tnr5
size: 48 - file: “fonts/arial.ttf”
id: tnr6
size: 18 - file: “fonts/Roboto-Bold.ttf”
id: tnr8
size: 28 - file: “fonts/arial.ttf”
id: tnr9
size: 40 - file: “fonts/Roboto-Bold.ttf”
id: tnr10
size: 34 - file: “fonts/arial.ttf”
id: tnr11
size: 28
display:
- platform: ssd1306_i2c
model: “SSD1306 128x64”
id: my_display
address: 0x3C
invert: true
rotation: 0°
pages:- id: page1
lambda: |-
if (id(temperature_hk47).has_state()) {
it.printf(64, 50, id(tnr2), TextAlign::BASELINE_CENTER, “%.1f°”, id(temperature_hk47).state);
} - id: page2
lambda: |-
if (id(humidity_hk47).has_state()) {
it.printf(64, 56, id(tnr3), TextAlign::BASELINE_CENTER, “%.1fH”, id(humidity_hk47).state);
} - id: page3
lambda: |-
if (id(pressure_hk47).has_state()) {
it.printf(6, 40, id(tnr5), TextAlign::BASELINE_LEFT, “%.0f”, id(pressure_hk47).state);
it.print(6, 56, id(tnr1), TextAlign::BASELINE_LEFT, “barometric pressure”);
} - id: page4
lambda: |-
if (id(pir_hk47).state) {
it.print(60, 16, id(tnr6), TextAlign::BASELINE_CENTER, “I SEE”);
it.print(64, 60, id(tnr9), TextAlign::BASELINE_CENTER, “YOU!”);
} else {
it.print(0, 26, id(tnr11), TextAlign::BASELINE_LEFT, “HEY!”);
it.print(72, 58, id(tnr10), TextAlign::BASELINE_CENTER, “LOOK”);
} - id: page5
lambda: |-
if (id(temperature_hk47).has_state()) {
it.strftime(64, 50, id(tnr5), TextAlign::BASELINE_CENTER, “%H:%M”, id(estime).now());
}
- id: page1
For example cycle through pages on a timer
interval:
- interval: 5s
then:- display.page.show_next: my_display
- component.update: my_display