

Breezy Redesign
My AC controller
- Size
- 85 × 55 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 29
- Nets
- 47
- Pads
- 97
- Tracks, vias
- 141, 20
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 9 Jan 2026
- Updated
- 9 Sep 2026
Overview
Breezy Redesign is an open-source printed circuit board by BackSlasher, from the BackSlasher/breezy repository on GitHub, published under the MIT licence. It is a 2-layer board of 85 × 55 mm with 29 parts on 47 nets, routed with 141 tracks and 20 vias.
It is built around the IRM-10-5, 0ZCG0200AF2B and B72210S0321K551, with the EEEFK1E101P, MMBT2222A and SMAJ5.0A among its other parts. Its parts include 8 resistors, 5 capacitors, 5 connectors, 2 diodes and 1 transistor.
Main components
7IRM-10-5
--、-、-、- 2A 5V、5V、5V 85-305VAC、120-430VDC - Power Module/Power Supply ROHSMWPower Supply Module,Power Supplies0ZCG0200AF2B
1812-40℃~+85℃ 100A 16V 1W 20mΩ 2A 3.5A 5s 85mΩ 1812 Resettable Fuses ROHSBel FuseResettable FusesB72210S0321K551
插件185pF@1kHz 2.5kA 320V 420V 50J 510V 插件 Varistors ROHSTDKVaristorsEEEFK1E101P
SMD,D8xL6.2mm-55℃~+105℃ 100uF 2000hrs@105℃ 225mA@120Hz 25V 6.5mm 8mm Polarized ±20% SMD,D8xL6.2mm Aluminum Electrolytic Capacitors - SMD ROHSPanasonicAluminum Electrolytic Capacitors - SMDMMBT2222A
SOT-23-55℃~+150℃ 1 NPN 100 100nA 1V 300MHz 300mW 40V 600mA 6V NPN Standalone SOT-23 Bipolar (BJT) ROHShongjiachengBipolar (BJT)SMAJ5.0A
DO-214AC(SMA)-65℃~+150℃ 400W@10/1000us 43.5A 5V 7V 800uA 9.2V TVS Unidirectional DO-214AC(SMA) ESD and Surge Protection (TVS/ESD) ROHSMDDESD And Surge Protection (TVS/ESD)SS14
SMA(DO-214AC)-55℃~+150℃ 1A 25A 300uA@40V 40V 550mV@1A Independent SMA(DO-214AC) Schottky Diodes ROHSMDDSchottky Diodes
README
README.mdBreezy
ESP32 smart-home component for my air conditioner, physically sitting between the HVAC controller and its LCD control panel.
The kit here is a USP 5010 — controller plus LCD panel (the panel is marked USP5010BE). If that is what you have, the protocol docs and the ESPHome components in this repo should work as-is.
Smart-home capability achieved with ESPHome (flashed via USB, OTA available).
Reads are done by intercepting SPI updates from the AC to the panel.
Writes are done by emulating IR remote commands.
In this repo
- pcb: Board schematics, JLCPCB-ready
- esphome/components: Custom ESPHome components (example config)
- case: scad files for a small case/box for the pcb
- docs: the protocol specs — the bus and the IR command language — plus the working notes behind them, and some photos.
Wiring
Physical wiring:
- JST 6-wire cable (only 5 actual wires) to AC unit
- JST 6-wire cable (only 5 actual wires) to LCD panel
- 220v in (L/N screw terminals) for powering the ESP32 (5v from SPI is weak)
JST wiring is 5v (5v+, gnd, SPI data, SPI clock, IR)
The ESP32 itself is a socketed 38-pin ESP32-WROOM-32 DevKitC-style module (2×19 headers) — not included on the PCB, plug in your own.

The protocol, briefly
Read
The HVAC and its panel talk over a clocked two-wire bus, ~33 ms per cycle. There are exactly two frames on it:
- a 36-bit LCD status poll — the controller opens it and goes quiet, and the panel answers inside the same frame by pulling bits low (the line is wired-AND). I don't decode what the panel says; I have no use for it.
- a 76-bit controller status — the complete unit state, and the one I read: power, mode, set temperature, room temperature, fan speed, and whether the compressor is actually running right now.
Every bit of the controller status is located and its encoding known, so a
frame can be generated from scratch and checked against the two checksums it
carries. Two flag bits are still unexplained — I know where they are and
when they fire, just not what they mean; one is probably the panel's
backlight. Full field map in docs/PROTOCOL_BUS.md.
Write
The controller is receiving IR commands from a remote via the LCD panel. The panel holds an IR receiver, demodulates the output and sends the binary on a dedicated wire to the controller, which we can both intercept and send our own.
The IR protocol is reverse engineered completely: any mode, temperature and
fan speed can be composed from scratch, including power-on, which carries the
target state inside the toggle so the unit wakes straight into it. Full spec
in docs/PROTOCOL_IR.md.
Two things about it are worth knowing before you read anything else:
- The symbol spelling is the code. Three of the four pulse shapes mean
"1", so the same bits can be spelled several ways — and the unit treats
different spellings as different commands.
When encoding / decoding, take care to note the length of each part of the pulse (the "on" and the "off" afterwards). - 24 °C and 25 °C share a temperature byte and are told apart only by the frame being one bit shorter. That one confused me for a while.
Short version history
Bus pirate worked out of the box for reading, and Arduino R4 bitbanging was enough for writing.
When moving to dedicated ESP32+PCB, I had to iterate a bit.
My main pain points were:
- HVAC wiring didn't contain enough current to power the ESP32, so I needed an external supply and converter
- HVAC wiring was 5v, and ESP32 operates on 3.3v, so couldn't connect them directly and had to step voltage up/down
- v1 — BSS138 level shifters with 10K pull-ups. Too slow for the bus; edges rounded off.
- v2 — TXS0104 shifter, and the board's 5V tied to the panel's, either drawing too much current from the panel for it to work, or polluting the data with noise from the converter.
- v3 — 5V properly isolated, but the TXS0104 turned out to be the wrong tool, occasionally misreading the ESP32 as low-driving and pushing that low to the HVAC side, making the panel get garbage data and display nonsense (−9 °C) whenever the ESP32 was powered. It also couldn't read and write IR on the same line.
- v4 — replaced the TXS0104 with plain resistors (high-impedance 100K/180K divider taps for reading), and split IR across two ESP32 pins: one read-only via a tap, one write-only via an open-collector transistor that pulls the line low. For the HVAC components, the board feels like a plain cable.
A recurring pattern was that ESP32 was not a reliable narrator when it had other duties.
I had several mysteries caused by the ESP32 doing something else (IR transmission, verbose logging) that occupied it enough so it missed bits, generating corrupt or odd frames, both making understanding current state much harder.
If the measurement is weird, use a dedicated device (another esp32, BusPirate etc)
⚠ Mains voltage
This board is powered directly from 220 V AC through screw terminals on the PCB. It is a hobby project, not a certified appliance — it has had no safety testing or approval of any kind. In particular, note it has no mains-side fuse: F1 is a resettable PTC on the 5 V output, and the varistor sits unfused across L–N. If you build one, you are responsible for knowing how to work safely with mains, for enclosing it properly, and for whatever your local regulations require. Don't work on it energised.
License
MIT — see LICENSE.
Parts
29| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | 100k | Resistor_SMD:R_0603_1608Metric | R1, R5, R7 |
| 3 | 100pF | Capacitor_SMD:C_0603_1608Metric | C1, C4, C5 |
| 3 | 180k | Resistor_SMD:R_0805_2012Metric | R2, R6, R8 |
| 2 | B6B-XH-A_LF__SN_ | B6B_XH_A:JST_B6B-XH-A_LF__SN_ | J1, J2 |
| 2 | Conn_01x19_Socket | Connector_PinSocket_2.54mm:PinSocket_1x19_P2.54mm_Vertical | J3, J4 |
| 1 | 0ZCG0200AF2B | 0ZCG0200AF2B:FUSER_0ZCG0200AF2B | F1 |
| 1 | 10 KΩ | Resistor_SMD:R_0603_1608Metric | R4 |
| 1 | 100nF | Capacitor_SMD:C_0603_1608Metric | C3 |
| 1 | 1731721 | 1731721:PHOENIX_1731721 | J5 |
| 1 | 1KΩ | Resistor_SMD:R_0603_1608Metric | R3 |
| 1 | B72210S0321K551 | B72210S0321K551:B72210S0321K551 | RV1 |
| 1 | EEEFK1E101P | EEEFK1E101P:CAP_EEEFK1E101P | C6 |
| 1 | IRM-10-5 | Converter_ACDC:Converter_ACDC_MeanWell_IRM-10-xx_THT | PS1 |
| 1 | LOGO | Bree:bree_Final | G*** |
| 1 | MMBT2222A | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | SMAJ5.0A | Diode_SMD:D_SMA | D1 |
| 1 | SS14 | Diode_SMD:D_SMA | D2 |
The 25 most common of 29 parts.
Questions
How big is the Breezy Redesign PCB?
It measures 85 × 55 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Breezy Redesign use?
29 parts, built around the IRM-10-5, 0ZCG0200AF2B, B72210S0321K551 and EEEFK1E101P. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Breezy Redesign KiCad files?
From the BackSlasher/breezy repository on GitHub, at the commit this page was made from: the board is pcb/breezy_v4/Breezy _ Redesign.kicad_pcb and its schematic pcb/breezy_v4/Breezy _ Redesign.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Breezy Redesign design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 2 layers77.5 × 118 mm

- 4 layers100 × 85 mm

Projected negative
hicancan/carbentra-smart-plug
CARBENTRA smart plug: AIoT edge device for campus energy orchestration
105 parts1AGPL-3.0 - 2 layers185 × 106 mm

WiFi Boiler Controller pcb
z1ntus/VRC-CB-Digital-Heating-Controller
Digital replacement controller for the Vaillant VRC-CB heating controller.
36 parts - 2 layers405 × 135 mm

Keyboard
jasperhax0r/CompaqPortableKeyboard
Mechanical Keyboard for the original Compaq Portable XT-Class
188 parts2MIT - 2 layers76 × 61 mm

Gemilaimate compact
rico-x/GemilaiMate
Gemilai 3007Z DIY carrier and standalone firmware. Prototype: hardware not assembled or tested.
110 parts2 - 2 layers80 × 80 mm

- 2 layers50 × 62 mm

Dong ho module
Doantheodoisuckhoe/Thietbitheodoisuckhoe
Bản 1.3 (30/10/2026). Mạch 2 lớp 50 × 62 mm ghép các module có sẵn, toàn bộ linh kiện hàn tay được (điện trở, tụ 0805; SOT-23; SOD-323; SMA; header 2,54 mm).
36 parts - 4 layers49.9 × 56.4 mm

Display pcb
Turboblider55/Project_OpenGauge
Modular Vehicle Telemetry and Infotainment Companion via OBD-II
50 parts