Waveshare ESP32-S3 Matrix

esp32 global Comes with ESPHome misc
Waveshare ESP32-S3 Matrix - esp32-s3-matrix-1.jpg
Waveshare ESP32-S3 Matrix - esp32-s3-matrix-2.jpg

Overview

A module composed of:

  • ESP32 S3 chip
  • QMI8658C accelerometer and gyroscope
  • 8 x 8 LED matrix Powered by USB-C Vendor documentation:
  • Product page
  • Wiki

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

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);