Struggling to get usb uart working with esp32s3

Am using ESP32-S3-DevKitC-1 v1.1 and can’t get usb uart to enumerate on the linux pc host.

The usb uart works fine with the bootloader. I load code by resetting with BOOT held down and load code via ttyACM0 just fine. - the usb wiring etc is fine.

When I use this config

esphome:
  name: esphome-workshop

esp32:
  variant: esp32s3
  framework:
    type: esp-idf

usb_uart:
 - type: cdc_acm
   vid: 0x1234
   pid: 0x5678
   channels:
   - id: cdc_acm0
     buffer_size: 1024
     baud_rate: 115200

logger:
    baud_rate: 115200
    hardware_uart: uart0

I don’t see the USB enumerate after reset. The code loads fine over ttyACM0, the device disconnects on reset but never re-enumerates on the usb bus.

Does anyone have CDC uart working as per USB UART Interface - ESPHome - Smart Home Made Simple ?

Here are the logs from the hardware uart. Using the cdc for logging doesn’t make a difference, I added the hardware_uart line to capture this.

[14:52:50.387]ESP-ROM:esp32s3-20210327
[14:52:50.394]Build:Mar 27 2021
[14:52:50.399]rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
[14:52:50.399]SPIWP:0xee
[14:52:50.399]Octal Flash Mode Enabled
[14:52:50.404]For OPI Flash, Use Default Flash Boot Mode
[14:52:50.405]mode:SLOW_RD, clock div:1
[14:52:50.410]load:0x3fce2810,len:0x1564
[14:52:50.410]load:0x403c8700,len:0x4
[14:52:50.416]load:0x403c8704,len:0xd24
[14:52:50.416]load:0x403cb700,len:0x2ed4
[14:52:50.417]entry 0x403c8920
[14:52:50.422]I (33) boot: ESP-IDF 5.4.2 2nd stage bootloader
[14:52:50.427]I (33) boot: compile time Nov 16 2025 14:29:11
[14:52:50.427]I (33) boot: Multicore bootloader
[14:52:50.433]I (33) boot: chip revision: v0.1
[14:52:50.433]I (36) boot: efuse block revision: v1.2
[14:52:50.439]I (40) boot.esp32s3: Boot SPI Speed : 80MHz
[14:52:50.444]I (44) boot.esp32s3: SPI Mode       : SLOW READ
[14:52:50.450]I (48) boot.esp32s3: SPI Flash Size : 32MB
[14:52:50.450]I (52) boot: Enabling RNG early entropy source...
[14:52:50.455]I (56) boot: Partition Table:
[14:52:50.461]I (59) boot: ## Label            Usage          Type ST Offset   Length
[14:52:50.466]I (65) boot:  0 otadata          OTA data         01 00 00009000 00002000
[14:52:50.472]I (72) boot:  1 phy_init         RF data          01 01 0000b000 00001000
[14:52:50.483]I (78) boot:  2 app0             OTA app          00 10 00010000 001c0000
[14:52:50.489]I (85) boot:  3 app1             OTA app          00 11 001d0000 001c0000
[14:52:50.494]I (91) boot:  4 nvs              WiFi data        01 02 00390000 0006d000
[14:52:50.494]I (98) boot: End of partition table
[14:52:50.503]I (101) esp_image: segment 0: paddr=00010020 vaddr=3c030020 size=0edb4h ( 60852) map
[14:52:50.516]I (123) esp_image: segment 1: paddr=0001eddc vaddr=3fc92b00 size=0123ch (  4668) load
[14:52:50.522]I (124) esp_image: segment 2: paddr=00020020 vaddr=42000020 size=2c7d4h (182228) map
[14:52:50.562]I (169) esp_image: segment 3: paddr=0004c7fc vaddr=3fc93d3c size=01778h (  6008) load
[14:52:50.568]I (171) esp_image: segment 4: paddr=0004df7c vaddr=40374000 size=0ea78h ( 60024) load
[14:52:50.583]I (190) esp_image: segment 5: paddr=0005c9fc vaddr=600fe000 size=0001ch (    28) load
[14:52:50.588]I (196) boot: Loaded app from partition at offset 0x10000
[14:52:50.591]I (196) boot: Disabling RNG early entropy source...
[14:52:50.707][I][logger:121]: Log initialized
[14:52:50.713][I][app:073]: Running through setup()
[14:52:50.717][C][component:173]: Setup preferences took 0ms
[14:52:50.738][C][component:173]: Setup usb_host took 30ms
[14:52:50.743][C][component:173]: Setup usb_host took 0ms
[14:52:50.749][I][app:120]: setup() finished successfully!
[14:52:50.755][I][app:185]: ESPHome version 2025.10.5 compiled on Nov 16 2025, 14:51:17
[14:52:50.760][C][logger:261]: Logger:
[14:52:50.760][C][logger:261]:   Max Level: DEBUG
[14:52:50.765][C][logger:261]:   Initial Level: DEBUG
[14:52:50.766][C][logger:267]:   Log Baud Rate: 115200
[14:52:50.771][C][logger:267]:   Hardware UART: UART0
[14:52:50.776][C][logger:274]:   Task Log Buffer Size: 768
[14:52:50.777][C][usb_host:497]: USBClient
[14:52:50.782][C][usb_host:497]:   Vendor id 1234
[14:52:50.782][C][usb_host:497]:   Product id 5678
[14:52:50.788][C][usb_uart:204]:   UART Channel 0
[14:52:50.788][C][usb_uart:204]:     Baud Rate: 115200 baud
[14:52:50.788][C][usb_uart:204]:     Data Bits: 8
[14:52:50.788][C][usb_uart:204]:     Parity: NONE
[14:52:50.795][C][usb_uart:204]:     Stop bits: 1
[14:52:50.795][C][usb_uart:204]:     Debug: NO
[14:52:50.795][C][usb_uart:204]:     Dummy receiver: NO

Thanks.

Hi Tom,
I don’t suppose that I can help very much but I am interested in this topic after many, many hours trying to get the USB enumerating on the ESP32-S2s - without success!
So I moved to the S3. And my limited investigations have been positive. So…

I’m wondering if there is a hardware component involved? I have been using the Waveshare ESP32S3 (Zero & Tiny) without any problems getting a /dev/ttyACMx port on my Kubuntu 24.04 for hardware debugging etc.

Example working yaml below:

esphome:
  name: esp32-s3-zero

esp32:
  board: esp32-s3-devkitc-1
  #variant: esp32s3 #Also works...
  framework:
    type: esp-idf

# Enable logging
logger:
  level: DEBUG
  
# Enable Home Assistant API
api:
  
ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  networks:
  - ssid: !secret wifi1
    password: !secret wifi1_password 
  - ssid: !secret wifi2
    password: !secret wifi2_password
      
web_server:
  port: 80

text_sensor:
  - platform: wifi_info
    ip_address:
      name: "My IP Address" 

Regards, Martin

The usb_uart won’t communicate with another host, as it is a host itself. See this PR for the functionality you are presumably looking for.

2 Likes

@clydebarrow thank you kindly. Now I feel very silly for expecting two hosts to interoperate. I’m going to do a small PR on the docs to make this a little clearer.

I really appreciate your answer, I’ll try the PR as an external component.

1 Like

That ESP32-S3-devkitC is one with 2 USB sockets ?
If you consider the aerial at the “top” of the board, are you connecting your USB cable to the socket on the left or right ?

I found that connecting my USB to the right socket works fine with ESPHome and minicom on my linux PC. Mind you I bought mine from aliexpress, so there could be any number of unbranded look-alike devices.