ESPHome is learning to ask a USB-C charger for more than 5 V. The new fusb302b component by Remco van Essen drives onsemi's FUSB302B USB-C controller from an ESP32 over I2C and negotiates a USB Power Delivery contract as a sink. It was merged into the development branch in three parts between 14 and 15 October 2026, with documentation on 15 October. For a project whose load needs 9, 12, 15 or 20 V, that means one USB-C charger can power both the load and the ESP32.
How the voltage is chosen
In the configuration you set request_voltage between 5 and 20 V. A PD charger offers a list of fixed voltages, chosen from 5, 9, 12, 15 and 20 V, and the component requests the highest one that does not exceed your setting. The documentation gives an example: ask for 12 V from a charger that offers 5, 9, 15 and 20 V, and you get 9 V.
The board stays at the 5 V USB-C default when the charger does not support Power Delivery, does not send its capabilities even after the component asks for them and sends a soft reset, rejects the request, or does not report the new supply as ready in time.
The negotiation runs in a dedicated FreeRTOS task woken by the chip's interrupt pin, so replies to the charger meet the PD timing limits even when ESPHome's main loop is busy. That is also why only the ESP32 is supported. The FUSB302B can share an I2C bus with other devices, but a long transfer by another device delays the PD task, so the author recommends a dedicated bus or 400 kHz. The first measurement of the CC lines happens 2 seconds after boot, to give the charger time to settle.
Sensors and automations
The last part (#20796) makes the component usable from automations. It adds optional diagnostic voltage and current sensors with the values of the active contract, and a contract text sensor that reads, for example, 3.00A @ 20V or Detached. Those numbers are what was negotiated, not what the circuit actually draws.
There are four triggers: on_connect, on_disconnect, on_power_ready (negotiation finished, either with a new contract or because the charger has no PD) and on_error (communication with the chip failed). The fusb302b.request_voltage action renegotiates with a new voltage while a charger is connected, or stores it for the next connection, and the fusb302b.is_connected condition checks whether a source is attached.
Check what sits on VBUS
The documentation carries a warning worth taking literally: the requested voltage appears on VBUS. Everything connected to VBUS, including the regulator that powers the ESP32, must be rated for the highest voltage that request_voltage allows.
ESPHome's development branch is at 2026.11.0-dev, so the component should ship with ESPHome 2026.11.