Wemos Lolin S3 MINI PRO Config

Hey folks,

So after getting one of these Wemos S3 Mini Pro, I had to install ESPHome!
This is a really cool board with lots of peripherals, a nice price and an interesting full-color silkscreen.

For those looking to do the same, here is a starting point that I’m using…

There are a few problems however:

  • Initially I had it working with ESP-IDF, however I started having some weird compile issues, and didn’t spend too much time investigating.
  • The matching lolin_s3_mini doesn’t seem to be supported with Arduino framework. Just using a generic ESP32-S3 for now… (though I guess it’s missing PSRAM?)
  • It’s not using the IMU (QMI8658C), since I didn’t find an example of it working with esphome.
  • Also not using the IR Led, though this would be easy to do.
esphome:
  name: "s3-mini-pro"
  friendly_name: S3_Mini_Pro
  platformio_options:
    board_build.flash_mode: dio
  on_boot:
    then:
      # Turn on backlight and power to neopixel
      - output.turn_on: backlight_output
      - output.turn_on: neopixel_power

esp32:
  board: esp32-s3-devkitc-1
  # board: lolin_s3_mini
  variant: esp32s3
  framework:
    type: arduino
    # type: esp-idf
    # version: 5.2.1
    # platform_version: 6.8.1

logger:
api:

wifi:
  ap: {}

ota:
- platform: esphome

# Buttons
binary_sensor:

  - platform: gpio
    name: "Button - Left"
    pin:
      number: GPIO0
      inverted: true
      mode:
          input: true
          pullup: true
    on_press:
      then:
        - light.turn_on:
            id: neopixel              
            red: 1
            green: 0
            blue: 0

  - platform: gpio
    name: "Button - Middle"
    pin:
      number: GPIO47
      inverted: true
      mode:
          input: true
          pullup: true
    on_press:
      then:
        - light.turn_on:
            id: neopixel              
            red: 0
            green: 1
            blue: 0
          
  - platform: gpio
    name: "Button - Right"
    pin:
      number: GPIO48
      inverted: true
      mode:
          input: true
          pullup: true
    on_press:
      then:
        - light.turn_on:
            id: neopixel              
            red: 0
            green: 0
            blue: 1
    
# WS2812 LED
# PIN GPIO07 needs to be HIGH so it gets power
light:
  - platform: esp32_rmt_led_strip
    rgb_order: RGB
    id: neopixel
    pin: GPIO08
    num_leds: 1
    rmt_channel: 0
    chipset: ws2812
    name: "Neopixel"

# Backlight and WS2812 Power Supply
output:
  - platform: gpio
    pin: GPIO07
    id: neopixel_power
  - platform: gpio
    pin: GPIO33
    id: backlight_output

spi:
  clk_pin: GPIO40
  mosi_pin: GPIO38

display:
  - platform: ili9xxx
    id: disp
    dimensions:
      height: 128
      width: 128
      offset_height: 1
      offset_width: 2
    model: st7789v
    data_rate: 80MHz
    cs_pin: GPIO35
    dc_pin: GPIO36
    reset_pin: GPIO34
    invert_colors: true
    transform:
      mirror_x: true
      mirror_y: true
    show_test_card: true

If anybody got a better config with esp-idf fully working, let me know!

References:

3 Likes

Thanks for sharing!
https://github.com/velijv/WEMOS_S3_MINI_PRO-ESPHome?tab=readme-ov-file
This person has it working with the ESP-IDF too - I tested and yours and that config both work.

I did get LVGL working too, you need the dev version of esphome.

display:
  - platform: ili9xxx
    id: disp
    dimensions:
      height: 128
      width: 128
      offset_height: 1
      offset_width: 2
    model: st7789v
    data_rate: 80MHz
    cs_pin: GPIO35
    dc_pin: GPIO36
    reset_pin: GPIO34
    invert_colors: true
    transform:
      mirror_x: true
      mirror_y: true
    update_interval: never
    auto_clear_enabled: false

lvgl:
    log_level: INFO
    color_depth: 16
    bg_color: 0
    border_width: 0
    outline_width: 0
    #shadow_width: 0
    text_font: unscii_16
    align: center
    style_definitions:
      - id: font_style
        text_font: MONTSERRAT_12
        #text_font: unscii_16
        align: center
        text_color: 0xFFFFFF
        #bg_opa: cover
        bg_opa: TRANSP
        bg_color: 0
        radius: 4
        pad_all: 2 
      - id: details_style
        text_font: MONTSERRAT_16
        align: center
        text_color: 0xFFFFFF
        #bg_opa: cover
        bg_opa: TRANSP
        bg_color: 0
        radius: 4
        pad_all: 2 
    page_wrap: true
    pages:
      - id: main_page
        widgets:
          - obj: # Meter
              height: 128 # needed to be explicitily defined for my round display to not have weird border line overlapping gauge
              width: 128
              align: center
              bg_color: 0
              #bg_opa: TRANSP
              border_width: 0
              outline_width: 0
              #shadow_width: 0
              pad_all: 0
              scrollbar_mode: "off"
              #clip_corner: true
              #radius: 120
              widgets:
                - label:
                    styles: font_style
                    #text_font: MONTSERRAT_32 # override font size
                    id: label_battery_soc
                    y: -38
                    x: 0 #positive = to the right of center
                - label:
                    styles: font_style
                    id: label_house_power
                    text_color: 0xffffff
                    y: -6 #positive = below center
                    x: 0 #positive = to the right of center

Hi there,

Thx for sharing - so I‘m confident I‘ll be able to implement my intended application (remote control of my Jaga hybrid radiators)…

Is someone aware of a little housing for this nice tiny module (or even an STL file)?

Cheers!
Renato