USBC on the other side or worked out how to use the same port to flash the ESP?
Also - I was trying to get ChatGPT to work it out, failing to create the board design at the moment but these ‘plans’ might help (or might just be slop..)
ESP32 Service Interface Board — Design Brief (Upload Pack)
This pack contains a complete design specification for a compact ESP32-based board that:
Powers from a custom 12 V “service port” (physically USB-shaped but not USB), or from USB‑C when the service port is absent
Provides UART (TX/RX) connection to the service device
Uses a 2‑channel level translator for 3.3 V ↔ 5 V UART with a bypass switch (default = level shifted)
Includes an on‑board USB‑to‑UART bridge (CP2102N) so firmware can be flashed/debugged via USB‑C
Implements automatic 5 V source OR‑ing (buck 5 V and USB‑C 5 V) using Schottky diodes for simplicity/reliability
This pack includes a BOM, netlist, fabrication/assembly notes, harness pinout, power budget, block diagram SVG, and a bring‑up checklist.
It is ready for a PCB designer to create a KiCad layout and generate Gerbers for PCBWay.
Major ICs / Modules
MCU: ESP32‑WROOM‑32E (ESP32‑D0WD) module
USB‑UART: CP2102N (QFN‑24) with auto‑reset (EN/IO0)
5 V supply (from 12 V): Recom R‑78E5.0‑1.0 (switching regulator, 1 A) — simple, low‑ripple, minimal parts
Level translator (UART): SN74LVC2T45 (dual‑bit, direction‑controlled) — robust for UART
Power ORing: Dual SS34 Schottky diodes (USB‑C 5 V and Service 5 V into 5V_SYS)
USB‑C device port: TYPE‑C receptacle with 5.1 kΩ pulldowns on CC1/CC2
Protection: TVS diodes on 12 V and 5 V, ESD array on USB D+/D‑, inline fuse on 12 V
Why these choices?
The R‑78E5.0‑1.0 avoids designing a buck from scratch and is efficient vs. linear regulators.
Schottky‑OR keeps the design simple. Voltage drop (~0.3‑0.4 V) is acceptable for ESP32 VIN path.
SN74LVC2T45 is more reliable for UART than “I²C MOSFET” level shifters.
USB‑C with CP2102N gives plug‑and‑flash convenience with auto reset.
I designed it with two buck converters, 12 → 5 → 3.3.
USB-C is not included. First programming will be with external usb programmer via exposed pins, for updates - library supports OTA
Noticed the hvac/controls in Home Assistant dont’ do what they would typically do with other devices - i.e when you set a mode, it usually turns the AC on. At the moment the power is a separate toggle - thinking of automating the AC on as a trigger condition (i.e ac changed & switch not already on then turn on) but would be nice if it could do it out the box.
Update – the automation worked but only to turn on (triggers on any HVAC mode being set). Unfortunately ‘off’ isn’t a mode exposed so there isn’t a way to turn of the AC without using that separate toggle/power switch.
It is possible to include “off” between modes, but then last mode will not be remembered. I dont know if such behaviour with last state gives a lot of value, but it is just such additional feature of these dongles
I know a case designer on fiverr that does great work for very decent prices. I think EasyEDA can export 3d files, if you can get me a 3d file of the PCB I will have her make a case for it.
Do you have an estimate for what a PCB+Assembly would cost from PCBWay?
edit: for clarity: I would pay for the design, the resulting file can be shared freely.
I don’t think it needs a case though, it sits in a pretty enclosed area and theres a transparent plastic cover you can open/close too, so i think it should be fine just the PCB alone. At least for the USB connector version.
I mean, nobody “needs” a wifi dongle for their airco, yet here we are.
I prefer the case. It’s a minor cost to give it a finished feel, and the outfit who services our airco will freak out if they see a bare board dangling from the connector, but likely won’t give it a 2nd thought when it’s encased. But you can of course run it without a case if you prefer that.
Sure, makes sense. I can also help with this if needed, i have some experience in enclosures(see for example), but i can see on Github that @Benas already made some enclosure for it(so i assume he can handle it:))
Hi @Nekmo ! I’m planning to build an ESP32-based dongle to control my heat pump. I’m glad to have found others who are trying the same thing!
My two wall units are ASUH07KPAS and ASUH12KPAS. Those have a USB-A male connector for the wifi dongle (UTY-TFSXH4).
When researching the subject, colleagues suggested being careful about voltage. One comment was about how much current the 12V pin can provide. An ESP32 can consume 350 mA when using the wifi (4 or 5 W)…
Something that I couldn’t find anywhere is a disassembly of the original wifi adapter. Inspecting this could reveal a lot of useful information. Would you mind opening the plastic case and uploading pictures? Thanks!!
@Benas I want to assemble an ESP32-based dongle to control my heat pump. I have two wall units: a ASUH12KPAS and a ASUH07KPAS, which use a USB-A male connector to connect the wifi dongle.
I have an ESP32-C6 supermini on hand. It’s quite nice because it’s really small. A colleague suggested adding a fuse to prevent problem in case of a component failing. Here’s the diagram I had in mind (inspired by one on your git repo and from this post FujitsuAC Integration - #46 by kiwizznz): Cirkit Designer IDE
The questions I have are:
I’m not sure if my TX/RX connection are correct or inverted. I believe they do match what you describe in your git repo.
How much current can the 12V pin provide? The ESP32-C6 supermini can consume 350 mA when transferring data to over wifi. Can the pin provide this? How can this be tested?
A colleague told me a horror story about a similar device “failing closed”, meaning that a component burned and closed the circuit, short-circuiting and letting 8 amps go through. This resulted in a burning hot USB connection. I though that a fuse could be added to my diagram to prevent such an issue. I guess a 0.5 Amp fuse would be sufficient. What do you think?
On the diagrams, the 5V pin of the buck converter is connected to both the ESP32 and HV of the logic level shifter. But there is also a connection between the ESP32’s 3.3V output to the logic level shifter’s LV pin. So the logic level shifter will receive 5V from one pin and 3.3V from the other. Is that correct/expected?
I’m still waiting for my components to arrive, but here’s the list:
While this list contains a female USB connector, I think it might more useful to have a USB cable but I’m having trouble finding one.
I’m trying to be extra careful as I don’t want to break the wall unit (I depend on it for heating and it’s getting cold here!) Let me know if you see anything that doesn’t sound right… Thanks!
Possible, that your units use different protocol, need to check first:
I dont have unit with usb-type connection, so for now i can not assure that it is 100% correct, I will check one more time pinouts given by other users.
I did not measure, but according datasheet, esp dont need that much
Dc/dc converter based on MP1584 should have thermal shutdown, overcurrent protection, but external fuse is a good idea
@Nekmo Were you able to obtain any more information from your UTY-TFSXH3? Packets, voltages, pictures, etc.
@Benas I assembled something similar to the diagram you have on your github but for a USB-A connection and using an ESP32-C6 SuperMini (see Cirkit Designer IDE). Before plugin it in, I measured the voltage across the 4 different pins of the wall unit’s “usb” connector. For this I used a USB A 4 pins female cable to access the pins. Note that the plastic casing is too large and I had to shave some of it so that it would fit in the wall unit.
Black-White: 0.002 V
Black-Red: 13.55 V
Black-Green: 4.981 V
White-Red: 13.54 V
White-Green: 4.978 V
Red-Green: 8.56 V
Using the same orientation as your diagram, the colors are:
Pin 1: Red (Top)
Pin 2: White
Pin 3: Green
Pin 4: Black (Bottom)
Why is there 5V between Black and Green or White and Green? It’s as if Green provided 5V, Red 12V and both Black and White 0V/Ground. Is that the same for your setup?
Also, I see that you are working on KiCad (or other software) PCB. Would you mind sharing it, even if it’s not done? The 10 mm wide hole for the USB dongle is quite small, and the components I assembled are too think to fit! Just the perf board with the ESP32-C6 SuperMini on top is barely fitting… I think that I would like to see if I can do a PCB too, but starting from scratch is quite a challenge. It would be really helpful to start from some base.
Hi, I can not measure at this moment, but here are @patvdleer measurements, I believe they should be the same for me:
“From left to right, 14V+, GND, data?, 5V+”
Pinout I wrote in repository is the same.
1 → +12V (voltage should drop with load)
2 → GND
3 → AC_TX (data from AC to ESP)
4 → AC_RX (data from ESP to AC)
So your pinout should be:
Pin 1: Red (top) → +12V
Pin 2: White AC_TX (0V between GND)
Pin 3: Green AC_RX (5V between GND and this pin, also like in PIN 4 in JST connector)
Pin 4: Black (Bottom) → GND
Why there is 5V between Pin 4 and pin 3 (AX_RX), I can not answer technically, but i think that Pin 3 has a weak pull up and it stabilizes at 5V when no dongle is connected.
As I dont have unit with USB-type connector, I can not check pins myself, and there was a lot of disussions which pin is RX and witch is TX, but by comparing your given voltages with voltages with JST connector I see that USB pinout in repository is correct:
I have tried with multiple different setups and not gotten hardware uart working. I have now ordered the same parts as what’s in the git repo and will try those soon.
I asked ChatGPT what it the different voltages could me. That’s part of its response:
Why a TX/RX line might be 5 V
The device’s serial interface is likely TTL-level UART using 5 V logic (not RS-232). TTL UART idle state is a high voltage (logic 1), so measured DC level ≈ Vcc (here ~5 V).
Older or lower-cost embedded devices often use 5 V TTL UART rather than 3.3 V.
Alternatives you should consider: it could be open-collector, pulled up to 5 V, or a different protocol that uses 5 V idle levels.
To test which connector is RX and which one is TX, it suggested this:
Use a USB–TTL adapter (set to 5 V) temporarily
With adapter RX connected to Green (and GND common), open a serial terminal at the device baudrate. If you see readable data, Green is device TX. If not, try White.
So basically, connect GND and one of the TX or RX to a USB-TTL, and try to read data. I don’t know if the wall unit is chatty though if there’s nothing connected to it…