M5Stack CoreS3 SE with ESPHome - No Power to Grove Port A or MBUS

Aloha All, after a week or two of trying, I have to reach out for help. I am powering the device on USB-C and need 5V power on the Grove Port A and on the MBUS to power PZEMs via the M5Bottom (I am in the process of upgrading from an M5Stack Core Basic). Even with the most basic of yaml configs, I am getting nothing on BUS_OUT or VBUS (Port A and MBUS) I've tried everything I can think of with regards to the AW9523b outputs and I'm at a loss. Any help is greatly appreciated. Yaml below (note the interval is just an attempt to test for voltage at Port A);

esphome:
  name: xxxxxxx
  friendly_name: xxxxxx

external_components:
  - source: github://KinDR007/VictronMPPT-ESPHOME@main 
  - source: github://Fabian-Schmidt/esphome-victron_ble 
  - source: github://m5stack/esphome-yaml/components
    components: [axp2101, aw88298, aw9523b ]

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf

psram:
  mode: quad
  speed: 80MHz        

# Enable logging
logger:
  level: VERY_VERBOSE
  logs:
    aw9523b: VERY_VERBOSE
    output: VERY_VERBOSE

# Enable Home Assistant API
api:
  encryption:
    key: xxxxxxxxxxx

ota:
  - platform: xxxxxx
    password: xxxxxx

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
  xxxxxx

captive_portal:  

i2c:
  - id: bus_internal
    sda: GPIO12
    scl: GPIO11
    
axp2101:
  id: axp2101_pmu
  i2c_id: bus_internal

aw9523b:
  - id: aw9523b_hub
    i2c_id: bus_internal

output:
  - platform: aw9523b
    aw9523b_id: aw9523b_hub
    id: bus_out_en_out
    pin: 1

  - platform: aw9523b
    aw9523b_id: aw9523b_hub
    id: boost_en_out
    pin: 15  

interval:
  - interval: 10s
    then:
      - logger.log: "STEP 1: BOOST ON"
      - output.turn_on: boost_en_out

      - delay: 250ms

      - logger.log: "STEP 2: BUS ENABLE"
      - output.turn_on: bus_out_en_out

      - delay: 5s

      - logger.log: "STEP 3: BUS DISABLE"
      - output.turn_off: bus_out_en_out

      - delay: 250ms

      - logger.log: "STEP 4: BOOST OFF"
      - output.turn_off: boost_en_out

Try with boost disabled since you are on usb-c power.

Thanks for the suggestion, I gave that a try, still no power present. Log is below for information;

[18:48:49.261][C][logger:219]: Logger:
[18:48:49.261][C][logger:219]:   Max Level: VERY_VERBOSE
[18:48:49.261][C][logger:219]:   Initial Level: VERY_VERBOSE
[18:48:49.266][C][logger:226]:   Log Baud Rate: 115200
[18:48:49.266][C][logger:226]:   Hardware UART: USB_SERIAL_JTAG
[18:48:49.266][C][logger:235]:   Task Log Buffer Size: 768 bytes
[18:48:49.267][C][logger:241]:   Level for 'aw9523b': VERY_VERBOSE
[18:48:49.267][C][logger:241]:   Level for 'output': VERY_VERBOSE
[18:48:49.268][W][logger:251]: VERY_VERBOSE logging is active — significant performance impact, short-term debugging only
[18:48:49.268][W][logger:251]:   May cause connection instability. Set log level to DEBUG or lower for long-term use.
[18:48:49.271][VV][api.service:013]: send_message list_entities_done_response: ListEntitiesDoneResponse {}
[18:48:49.282][VV][api.service:020]: on_subscribe_states_request: {}
[18:48:49.282][C][i2c.idf:092]: I2C Bus:
[18:48:49.282][C][i2c.idf:093]:   SDA Pin: GPIO12
[18:48:49.282][C][i2c.idf:093]:   SCL Pin: GPIO11
[18:48:49.282][C][i2c.idf:093]:   Frequency: 50000 Hz
[18:48:49.283][C][i2c.idf:103]:   Recovery: bus successfully recovered
[18:48:49.283][C][i2c.idf:113]: Results from bus scan:
[18:48:49.283][C][i2c.idf:119]: Found device at address 0x34
[18:48:49.284][C][i2c.idf:119]: Found device at address 0x40
[18:48:49.292][C][i2c.idf:119]: Found device at address 0x51
[18:48:49.293][C][i2c.idf:119]: Found device at address 0x58
[18:48:49.293][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.293][V][i2c.idf:154]: 0x34 TX 80
[18:48:49.301][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.302][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.302][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.302][V][i2c.idf:154]: 0x34 TX 82
[18:48:49.305][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.306][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.309][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.309][V][i2c.idf:154]: 0x34 TX 80
[18:48:49.312][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.320][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.320][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.321][V][i2c.idf:154]: 0x34 TX 83
[18:48:49.330][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.331][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.331][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.331][V][i2c.idf:154]: 0x34 TX 80
[18:48:49.334][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.334][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.335][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.336][V][i2c.idf:154]: 0x34 TX 84
[18:48:49.339][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.344][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.345][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.345][V][i2c.idf:154]: 0x34 TX 80
[18:48:49.347][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.355][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.355][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.355][V][i2c.idf:154]: 0x34 TX 85
[18:48:49.358][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.358][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.362][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.362][V][i2c.idf:154]: 0x34 TX 80
[18:48:49.372][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.372][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.373][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.373][V][i2c.idf:154]: 0x34 TX 86
[18:48:49.375][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.376][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.389][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.390][V][i2c.idf:154]: 0x34 TX 90
[18:48:49.390][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.390][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.390][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.390][V][i2c.idf:154]: 0x34 TX 92
[18:48:49.392][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.392][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.393][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.395][V][i2c.idf:154]: 0x34 TX 90
[18:48:49.406][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.406][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.407][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.407][V][i2c.idf:154]: 0x34 TX 93
[18:48:49.410][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.410][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.410][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.411][V][i2c.idf:154]: 0x34 TX 90
[18:48:49.417][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.422][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.423][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.423][V][i2c.idf:154]: 0x34 TX 94
[18:48:49.425][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.426][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.432][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.432][V][i2c.idf:154]: 0x34 TX 90
[18:48:49.436][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.436][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.437][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.437][V][i2c.idf:154]: 0x34 TX 95
[18:48:49.443][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.446][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.447][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.447][V][i2c.idf:154]: 0x34 TX 90
[18:48:49.449][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.458][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.458][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.459][V][i2c.idf:154]: 0x34 TX 96
[18:48:49.462][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.462][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.462][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.464][V][i2c.idf:154]: 0x34 TX 90
[18:48:49.473][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.473][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.474][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.474][V][i2c.idf:154]: 0x34 TX 97
[18:48:49.476][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.476][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.497][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.498][V][i2c.idf:154]: 0x34 TX 90
[18:48:49.510][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.511][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.511][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.511][V][i2c.idf:154]: 0x34 TX 98
[18:48:49.512][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.512][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.512][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.512][V][i2c.idf:154]: 0x34 TX 90
[18:48:49.513][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.513][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.513][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.513][V][i2c.idf:154]: 0x34 TX 99
[18:48:49.514][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.514][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.514][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.515][V][i2c.idf:154]: 0x34 TX 91
[18:48:49.515][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.515][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.519][V][i2c.idf:141]: Writing 1 bytes, reading 1 bytes
[18:48:49.519][V][i2c.idf:154]: 0x34 TX 9A
[18:48:49.524][V][i2c.idf:167]: 0x34 RX bytes 1
[18:48:49.528][V][i2c.idf:186]: Sending 7 jobs
[18:48:49.528][C][axp2101:143]: AXP2101:
[18:48:49.528][C][axp2101:143]:   DC1    : +  Voltage: 3300 mV
[18:48:49.528][C][axp2101:143]:   DC2    : -  Voltage: 1200 mV
[18:48:49.528][C][axp2101:143]:   DC3    : +  Voltage: 3300 mV
[18:48:49.528][C][axp2101:143]:   DC4    : -  Voltage: 1800 mV
[18:48:49.528][C][axp2101:143]:   DC5    : -  Voltage: 1400 mV
[18:48:49.528][C][axp2101:143]:   ALDO1  : +  Voltage: 1800 mV
[18:48:49.528][C][axp2101:143]:   ALDO2  : +  Voltage: 3300 mV
[18:48:49.528][C][axp2101:143]:   ALDO3  : +  Voltage: 3300 mV
[18:48:49.528][C][axp2101:143]:   ALDO4  : +  Voltage: 3300 mV
[18:48:49.528][C][axp2101:143]:   BLDO1  : +  Voltage: 2800 mV
[18:48:49.528][C][axp2101:143]:   BLDO2  : +  Voltage: 1500 mV
[18:48:49.528][C][axp2101:143]:   CPUSLDO: -  Voltage: 1200 mV
[18:48:49.528][C][axp2101:143]:   DLDO1  : -  Voltage: 3300 mV
[18:48:49.528][C][axp2101:143]:   DLDO2  : -  Voltage: 1900 mV
[18:48:49.532][D][main:459]: STEP 2: BUS ENABLE
[18:48:49.534][V][i2c.idf:141]: Writing 2 bytes, reading 0 bytes
[18:48:49.537][V][i2c.idf:154]: 0x58 TX 25:FF
[18:48:49.538][V][i2c.idf:186]: Sending 4 jobs
[18:48:49.538][C][aw9523b:148]: AW9523B: 
[18:48:49.538][C][aw9523b:148]:   P0 drive mode: OPEN_DRAIN
[18:48:49.538][C][aw9523b:148]:   LED Max Current: 37mA
[18:48:49.541][C][aw9523b:153]:   Address: 0x58
[18:48:49.560][C][psram:016]: PSRAM:
[18:48:49.560][C][psram:019]:   Available: YES
[18:48:49.561][C][psram:021]:   Size: 8192 KB
[18:48:49.590][C][aw9523b.output:015]: AW9523B Float Output:
[18:48:49.590][C][aw9523b.output:015]:   Pin: 1
[18:48:49.610][C][captive_portal:134]: Captive Portal:
[18:48:49.610][C][wifi:1505]: WiFi:
[18:48:49.610][C][wifi:1505]:   Local MAC: xxxx
[18:48:49.610][C][wifi:1505]:   Connected: YES
[18:48:49.611][C][wifi:1216]:   IP Address: xxxx
[18:48:49.613][C][wifi:1227]:   SSID: [redacted]
[18:48:49.613][C][wifi:1227]:   BSSID: [redacted]
[18:48:49.613][C][wifi:1227]:   Hostname: 'm5stackdiscocores3se'
[18:48:49.613][C][wifi:1227]:   Signal strength: -65 dB ▂▄▆█
[18:48:49.613][C][wifi:1227]:   Channel: 6
[18:48:49.613][C][wifi:1227]:   Subnet: 255.255.252.0
[18:48:49.613][C][wifi:1227]:   Gateway: xxxx
[18:48:49.613][C][wifi:1227]:   DNS1: xxxx
[18:48:49.613][C][wifi:1227]:   DNS2: 0.0.0.0
[18:48:49.630][C][esphome.ota:071]: Over-The-Air updates:
[18:48:49.630][C][esphome.ota:071]:   Address: m5stackdiscocores3se.local:3232
[18:48:49.630][C][esphome.ota:071]:   Version: 2
[18:48:49.631][C][esphome.ota:078]:   Password configured
[18:48:49.632][C][safe_mode:026]: Safe Mode:
[18:48:49.632][C][safe_mode:026]:   Successful after: 60s
[18:48:49.632][C][safe_mode:026]:   Invoke after: 10 attempts
[18:48:49.632][C][safe_mode:026]:   Duration: 300s
[18:48:49.637][C][safe_mode:043]:   Bootloader rollback: supported
[18:48:49.650][C][web_server.ota:256]: Web Server OTA
[18:48:49.651][C][api:235]: Server:
[18:48:49.651][C][api:235]:   Address: m5stackdiscocores3se.local:6053
[18:48:49.651][C][api:235]:   Listen backlog: 4
[18:48:49.651][C][api:235]:   Max connections: 8
[18:48:49.652][C][api:242]:   Noise encryption: YES
[18:48:49.658][C][mdns:194]: mDNS:
[18:48:49.658][C][mdns:194]:   Hostname: m5stackdiscocores3se
[18:48:49.662][V][mdns:199]:   Services:
[18:48:49.662][V][mdns:201]:   - _esphomelib, _tcp, 6053
[18:48:49.662][V][mdns:204]:     TXT: friendly_name = M5StackDiscoCoreS3SE
[18:48:49.664][V][mdns:204]:     TXT: version = 2026.4.5
[18:48:49.670][V][mdns:204]:     TXT: mac = xxxx
[18:48:49.671][V][mdns:204]:     TXT: platform = ESP32
[18:48:49.671][V][mdns:204]:     TXT: board = esp32-s3-devkitc-1
[18:48:49.674][V][mdns:204]:     TXT: network = wifi
[18:48:49.674][V][mdns:204]:     TXT: api_encryption = Noise_NNpsk0_25519_ChaChaPoly_SHA256
[18:48:54.537][D][main:469]: STEP 3: BUS DISABLE
[18:48:54.542][V][i2c.idf:141]: Writing 2 bytes, reading 0 bytes
[18:48:54.545][V][i2c.idf:154]: 0x58 TX 25:00
[18:48:54.545][V][i2c.idf:186]: Sending 4 jobs
[18:48:59.532][D][main:459]: STEP 2: BUS ENABLE
[18:48:59.534][V][i2c.idf:141]: Writing 2 bytes, reading 0 bytes
[18:48:59.541][V][i2c.idf:154]: 0x58 TX 25:FF
[18:48:59.542][V][i2c.idf:186]: Sending 4 jobs
[18:49:04.544][D][main:469]: STEP 3: BUS DISABLE
[18:49:04.545][V][i2c.idf:141]: Writing 2 bytes, reading 0 bytes
[18:49:04.548][V][i2c.idf:154]: 0x58 TX 25:00
[18:49:04.549][V][i2c.idf:186]: Sending 4 jobs
[18:49:09.562][D][main:459]: STEP 2: BUS ENABLE
[18:49:09.562][V][i2c.idf:141]: Writing 2 bytes, reading 0 bytes
[18:49:09.613][V][i2c.idf:154]: 0x58 TX 25:FF
[18:49:09.613][V][i2c.idf:186]: Sending 4 jobs

Did you try turning off pin 4 (OTG EN)?

Interestingly enough, if I define the OTG pin (I think pin 5 right?) as an output (and don't even turn it on or off), the update fails during boot after OTA and rolls back. Would it help to see a log of that?

Sounds tricky. M5Stack example cores3-satellite-base has pin 5 defined as output though.
Try to add this parameter to aw9523b config:
p0_drive_mode: PUSH_PULL

Thanks for the suggestion. I have already messed around with that parameter to no avail. I did try again, and unfortunately still no 5v. I think it has something to do with the external components, as the syntax that is specified here M5Stack CoreS3 - ESPHome Devices , no longer works, and I had to figure that out myself. In my setup, I have an M5Tab connected to Port A for UART data only, no power. I may just pull power from the Tab5 and power the CoreS3 SE through Port A (and hopefully M5Bottom through the MBUS) and have a working solution.

Those external components seems to be regularly maintained. Problem is likely on the syntax how physical pin is linked. Library example uses gpio-switch. Try the cores3 example there, it does use PUSH_PULL and gives you switches for pins interested. Or just copy the code for aw9523b and gpio switches

# IO Expander
aw9523b:
  id: aw9523b_hub
  i2c_id: bsp_bus
  p0_drive_mode: PUSH_PULL


switch:
  - platform: gpio
    name: "BUS_OUT_EN"
    pin:
      aw9523b_id: aw9523b_hub
      number: 1
    # BUS_OUT_EN = 0
    restore_mode: RESTORE_DEFAULT_OFF

  - platform: gpio
    name: "USB_OTG_EN"
    pin:
      aw9523b_id: aw9523b_hub
      number: 5
    # USB_OTG_EN = 0
    restore_mode: RESTORE_DEFAULT_OFF

  - platform: gpio
    name: "BOOST_EN"
    pin:
      aw9523b_id: aw9523b_hub
      number: 15
    # BOOST_EN
    restore_mode: RESTORE_DEFAULT_ON

Thanks again for taking the time to try and help me with this. I removed all of the previous 'Output' commands and replaced them with the 'Switch' example code you provided. It successfully compiled and updated. Unfortunately, still no 5v on Port A or MBus. Am I the only guy with this issue, or is everyone else running the CoreS3 (SE) without 5v on Port A and MBus? Where did you find the sample code you provided? Thanks again.

From the link on your code for external component.

Try the whole example for voice assistant there, just like it is.

Aloha all, I have found another solution in the meantime. The CoreS3 SE Port A is UART TX and RX data to/from a Tab5. By adding a wire and powering Port A 5v from the Tab5, the 5v on the MBus comes alive, allowing a RS485 TTL converter and other components to be powered via the M5Bus from the M5Bottom (from the Core Basic) as intended. The CoreS3 SE is also powered by USB-C, as per one of the advertised power configurations on the M5 Docs page. I'll keep my eyes open for an update on the External Components to allow power via USB-C only. Thanks