Skip to the content
PCBKitNew board
2 layers85 × 55 mmBreezy Redesign, the printed circuit board in 3D

Breezy Redesign

BackSlasher/breezy

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

7

README

README.md

Breezy

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

  1. pcb: Board schematics, JLCPCB-ready
  2. esphome/components: Custom ESPHome components (example config)
  3. case: scad files for a small case/box for the pcb
  4. docs: the protocol specs — the bus and the IR command language — plus the working notes behind them, and some photos.

Wiring

Physical wiring:

  1. JST 6-wire cable (only 5 actual wires) to AC unit
  2. JST 6-wire cable (only 5 actual wires) to LCD panel
  3. 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.

board top

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:

  1. HVAC wiring didn't contain enough current to power the ESP32, so I needed an external supply and converter
  2. 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
QtyValueFootprintReferences
3100kResistor_SMD:R_0603_1608MetricR1, R5, R7
3100pFCapacitor_SMD:C_0603_1608MetricC1, C4, C5
3180kResistor_SMD:R_0805_2012MetricR2, R6, R8
2B6B-XH-A_LF__SN_B6B_XH_A:JST_B6B-XH-A_LF__SN_J1, J2
2Conn_01x19_SocketConnector_PinSocket_2.54mm:PinSocket_1x19_P2.54mm_VerticalJ3, J4
10ZCG0200AF2B0ZCG0200AF2B:FUSER_0ZCG0200AF2BF1
110 KΩResistor_SMD:R_0603_1608MetricR4
1100nFCapacitor_SMD:C_0603_1608MetricC3
117317211731721:PHOENIX_1731721J5
11KΩResistor_SMD:R_0603_1608MetricR3
1B72210S0321K551B72210S0321K551:B72210S0321K551RV1
1EEEFK1E101PEEEFK1E101P:CAP_EEEFK1E101PC6
1IRM-10-5Converter_ACDC:Converter_ACDC_MeanWell_IRM-10-xx_THTPS1
1LOGOBree:bree_FinalG***
1MMBT2222APackage_TO_SOT_SMD:SOT-23Q1
1SMAJ5.0ADiode_SMD:D_SMAD1
1SS14Diode_SMD:D_SMAD2

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 mmBessy c, the printed circuit board in 3D

    Bessy c

    burundiocibu/esphome-prod

    63 parts
  • 4 layers100 × 85 mmProjected negative, the printed circuit board in 3D

    Projected negative

    hicancan/carbentra-smart-plug

    CARBENTRA smart plug: AIoT edge device for campus energy orchestration

    105 parts1AGPL-3.0
  • 2 layers185 × 106 mmWiFi Boiler Controller pcb, the printed circuit board in 3D

    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 mmKeyboard, the printed circuit board in 3D

    Keyboard

    jasperhax0r/CompaqPortableKeyboard

    Mechanical Keyboard for the original Compaq Portable XT-Class

    188 parts2MIT
  • 2 layers76 × 61 mmGemilaimate compact, the printed circuit board in 3D

    Gemilaimate compact

    rico-x/GemilaiMate

    Gemilai 3007Z DIY carrier and standalone firmware. Prototype: hardware not assembled or tested.

    110 parts2
  • 2 layers80 × 80 mmProject Zeta, the printed circuit board in 3D

    Project Zeta

    OatMealXXII/Project_Zeta

    Project Zeta

    28 parts1MIT
  • 2 layers50 × 62 mmDong ho module, the printed circuit board in 3D

    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 mmDisplay pcb, the printed circuit board in 3D

    Display pcb

    Turboblider55/Project_OpenGauge

    Modular Vehicle Telemetry and Infotainment Companion via OBD-II

    50 parts