devices.esphome.io

Waveshare ESP32-S3 Matrix

Waveshare ESP32-S3 Matrix

Device Type: misc
Electrical Standard: global
Board: esp32
Difficulty: Plug-n-flash, 2/5

A module composed of:

  • ESP32 S3 chip
  • QMI8658C accelerometer and gyroscope
  • 8 x 8 LED matrix

Powered by USB-C

Vendor documentation:

GPIO Pinout

PINESP32Description
VCCVCCPower input (3.3V)
GNDGNDGND
QMI SDA11QMI8658 I2C SDA pin
QMI SCL12QMI8658 I2C SCL pin
QMI IRQ110QMI8658 iterrupt 1 (does not work as well as IRQ2)
QMI IRQ213QMI8658 iterrupt 2
WS2811 LED14Controlling the 8x8 LED matrix via neopixel

Product Images

Product Image Product Image

Device Specific Config

NOTE: While enabeling debug-logging works it recommended to disable it once everyhing works a expected if using interrupt updates. This because every update renders a lot of logging and have caused the online logging and even entire Home Assistant to become unresponsive until timeout and refresh.

esphome:
name: "led8x8-qmi8658"
friendly_name: "8x8 pixel matrix"
comment: "ESP32-S3 with 8x8 LED Pixel matrix and QMI8658 accelerometer"
platformio_options:
board_build.flash_mode: dio
libraries:
- "Wire"
- "SPI"
- "SensorLib"
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
external_components:
- source: https://github.com/dala318/esphome-qmi8658
i2c:
sda: GPIO11
scl: GPIO12
sensor:
- platform: qmi8658
address: 0x6B
interrupt_pin_1: GPIO10
acceleration_x:
name: "QMI8658 Acceleration X"
acceleration_y:
name: "QMI8658 Acceleration Y"
acceleration_z:
name: "QMI8658 Acceleration Z"
gyroscope_x:
name: "QMI8658 Gyro X"
gyroscope_y:
name: "QMI8658 Gyro Y"
gyroscope_z:
name: "QMI8658 Gyro Z"
temperature:
name: "QMI8658 Temperature"
filters:
- offset: 34.0
update_interval: 5s
light:
name: "NeoPixel Light"
id: pixel_matrix
type: RGB
variant: WS2811
pin: GPIO14
num_leds: 64
color_correct: [40%, 40%, 40%]
effects:
- addressable_scan:
- addressable_twinkle:
display:
- platform: addressable_light
id: pixel_display
addressable_light_id: pixel_matrix
width: 8
height: 8
pixel_mapper: |-
if (x % 2 == 0) {
return (x * 8) + y;
}
return (x * 8) + (7 - y);
rotation: 180°
update_interval: 1000ms
auto_clear_enabled: true
lambda: |-
Color red = Color(0x5F0000);
Color green = Color(0x005F00);
Color blue = Color(0x00005F);
it.rectangle(0, 0, 8, 8, red);
it.rectangle(1, 1, 6, 6, green);
it.rectangle(2, 2, 4, 4, blue);
it.rectangle(3, 3, 2, 2, red);
Edit this page on GitHub