11 KiB
11 KiB
Custom PCB Design Specification: Midea AC Controller with BLE Beacon
Recommended ESP Module
🏆 Best Choice: ESP32-WROOM-32E or ESP32-WROOM-32
Why ESP32 (not ESP8266 or ESP32-C6)?
- ✅ Bluetooth BLE Support: Required for beacon functionality
- ✅ Midea Component Compatibility: Works with Arduino framework (ESP32-C6 uses ESP-IDF, incompatible)
- ✅ Excellent ESPHome Support: Most mature and well-documented
- ✅ Dual Core: Can handle WiFi + BLE + Midea communication simultaneously
- ✅ Multiple UARTs: Can use hardware UART for Midea, software UART for debugging
- ✅ Good Memory: 520KB SRAM, sufficient for both features
Module Options
| Module | Size | Flash | RAM | Price | Recommendation |
|---|---|---|---|---|---|
| ESP32-WROOM-32E | 18×25.5mm | 4MB | 520KB | $$ | ⭐ Best for custom PCB |
| ESP32-WROOM-32 | 18×25.5mm | 4MB | 520KB | $$ | ⭐ Good alternative |
| ESP32-MINI-1 | 13.2×16.6mm | 4MB | 520KB | $$ | Compact option |
| ESP32-C3 | 18×25.5mm | 4MB | 400KB | $ | RISC-V, less support |
| ESP32-C6 | 18×25.5mm | 4MB | 512KB | $$ | ESP-IDF only, no Midea |
Recommended: ESP32-WROOM-32E (most common, best support)
PCB Design Requirements
Core Components
-
ESP32-WROOM-32E Module
- 38 pins (19 per side)
- Requires 3.3V power
- Built-in antenna
-
Logic Level Shifter (3.3V ↔ 5V)
- TXB0104 (4-channel) or 74LVC245 (8-channel)
- Required for Midea AC communication (5V logic)
- Bidirectional for TX/RX
-
Power Supply
- AMS1117-3.3 or LD1117-3.3 (3.3V regulator)
- Input: 5V (USB or external)
- Output: 3.3V @ 1A (ESP32 needs ~500mA peak)
- Decoupling capacitors: 10µF + 100nF
-
USB-to-Serial (Optional but Recommended)
- CP2102 or CH340C for programming/debugging
- Allows OTA updates via USB
- Auto-reset circuit for easy flashing
-
Midea AC Connector
- JST-XH 4-pin or USB Type-A (depending on AC dongle)
- Pins: VCC (5V), GND, TX, RX
-
Status LEDs
- Power LED (3.3V)
- WiFi status LED
- BLE status LED (optional)
- Midea communication LED (optional)
-
Reset Button
- Reset ESP32
- Boot button (GPIO0) for flashing
Pin Assignment
ESP32-WROOM-32E Pinout
Power:
VDD (Pin 1, 3, 14, 21, 22, 27, 28, 33, 42) → 3.3V
GND (Pin 2, 4, 13, 15, 20, 23, 26, 29, 34, 38, 40) → GND
Midea UART (via Level Shifter):
GPIO17 (TX) → Level Shifter LV1 → HV1 → AC Dongle RX
GPIO16 (RX) → Level Shifter LV2 → HV2 → AC Dongle TX
GND → AC Dongle GND
USB-to-Serial (if included):
GPIO1 (TX) → CP2102 RX
GPIO3 (RX) → CP2102 TX
GPIO0 (Boot) → CP2102 DTR (auto-reset)
Status LEDs:
GPIO2 → WiFi Status LED
GPIO4 → BLE Status LED (optional)
GPIO5 → Midea Communication LED (optional)
Buttons:
GPIO0 → Boot/Flash Button
EN → Reset Button
Bluetooth:
Built-in (no external pins needed)
Schematic Design
Power Section
USB 5V → AMS1117-3.3 → 3.3V → ESP32 VDD
↓
GND → Common Ground
Midea Communication Section
ESP32 GPIO17 (TX) → TXB0104 LV1 → HV1 → AC Dongle RX
ESP32 GPIO16 (RX) → TXB0104 LV2 → HV2 → AC Dongle TX
ESP32 GND → TXB0104 GND → AC Dongle GND
ESP32 3.3V → TXB0104 LV
External 5V → TXB0104 HV → AC Dongle VCC (if needed)
Level Shifter Configuration (TXB0104)
- VCCA (LV): 3.3V from ESP32
- VCCB (HV): 5V from USB or external
- OE (Output Enable): Connect to 3.3V (always enabled)
- A1 (LV1): ESP32 GPIO17 (TX)
- B1 (HV1): AC Dongle RX
- A2 (LV2): ESP32 GPIO16 (RX)
- B2 (HV2): AC Dongle TX
PCB Layout Considerations
Layer Stackup (2-layer minimum, 4-layer recommended)
2-Layer:
- Top: Components, signal traces
- Bottom: Ground plane, power traces
4-Layer (Recommended):
- Top: Components, signal traces
- Layer 2: Ground plane
- Layer 3: Power plane (3.3V)
- Bottom: Ground plane, remaining signals
Design Rules
-
Power Traces
- 3.3V: Minimum 0.5mm (20mil) width
- 5V: Minimum 0.5mm (20mil) width
- GND: Use ground planes where possible
-
Signal Traces
- UART: 0.2mm (8mil) minimum
- Keep UART traces short (<50mm)
- Avoid crossing power traces
-
Component Placement
- ESP32 module: Center of board
- Level shifter: Close to ESP32 and AC connector
- Power regulator: Near USB input
- Decoupling caps: Close to power pins (<5mm)
-
Antenna Clearance
- Keep 15mm clearance around ESP32 antenna area
- No ground plane under antenna
- No components or traces near antenna
-
Thermal Considerations
- Add thermal vias under power regulator
- Ensure adequate copper for heat dissipation
Board Size Recommendation
- Minimum: 40mm × 50mm (fits ESP32 + essential components)
- Recommended: 50mm × 60mm (comfortable spacing, room for connectors)
- With USB: 50mm × 70mm (includes USB connector)
Bill of Materials (BOM)
Essential Components
| Component | Part Number | Quantity | Notes |
|---|---|---|---|
| ESP32 Module | ESP32-WROOM-32E | 1 | 4MB flash, built-in antenna |
| Level Shifter | TXB0104PWR | 1 | 4-channel, TSSOP-14 |
| 3.3V Regulator | AMS1117-3.3 | 1 | SOT-223 or SOT-89 |
| USB-to-Serial | CP2102N | 1 | Optional, QFN-24 |
| USB Connector | USB-B Micro | 1 | Optional, for programming |
| AC Connector | JST-XH 4-pin | 1 | Or USB Type-A female |
| Reset Button | Tactile Switch | 1 | 6×6mm |
| Boot Button | Tactile Switch | 1 | 6×6mm (optional) |
| Status LED | LED 0603 | 2-3 | Red/Green/Blue |
| Resistors | 10kΩ 0603 | 2 | Pull-up for buttons |
| Resistors | 220Ω 0603 | 2-3 | LED current limiting |
| Capacitors | 10µF 0805 | 2 | Power decoupling |
| Capacitors | 100nF 0603 | 5-10 | Decoupling |
Optional Components
- BLE Status LED: Additional LED for Bluetooth status
- Midea Status LED: LED to show AC communication
- Crystal: 32.768kHz (if using RTC features)
- EEPROM: For storing settings (ESP32 has built-in)
ESPHome Configuration Template
esphome:
name: midea-ac-controller
friendly_name: Midea AC Controller
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging (can use software serial or disable)
logger:
baud_rate: 115200 # Or 0 to disable
# Enable Home Assistant API
api:
encryption:
key: !secret api_encryption_key
ota:
- platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
min_auth_mode: WPA2
ap:
ssid: "Midea AC Controller"
password: !secret fallback_password
captive_portal:
# Status LEDs
binary_sensor:
- platform: status
name: "WiFi Status"
output:
- platform: gpio
pin: GPIO2
id: wifi_led
- platform: gpio
pin: GPIO4
id: ble_led
light:
- platform: monochromatic
output: wifi_led
name: "WiFi Status LED"
- platform: monochromatic
output: ble_led
name: "BLE Status LED"
# UART for Midea AC communication
uart:
id: uart_midea
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 9600
stop_bits: 1
data_bits: 8
parity: NONE
# Midea AC Control
climate:
- platform: midea
name: "AC Controller"
uart_id: uart_midea
autoconf: true
beeper: false
period: 2s
timeout: 5s
num_attempts: 3
supported_modes:
- COOL
- HEAT
- DRY
- FAN_ONLY
supported_swing_modes:
- VERTICAL
- HORIZONTAL
- BOTH
supported_presets:
- ECO
- BOOST
- SLEEP
visual:
min_temperature: 17 °C
max_temperature: 30 °C
temperature_step: 0.5 °C
# Bluetooth Low Energy Beacon
esp32_ble_beacon:
type: iBeacon
uuid: 'c29ce823-e67a-4e71-bff2-abaa32e77a98' # Change to unique UUID
major: 1
minor: 1
tx_power: 0dBm
# Beeper control switch
switch:
- platform: template
name: "AC Beeper"
icon: "mdi:volume-source"
optimistic: true
turn_on_action:
- midea_ac.beeper_on:
turn_off_action:
- midea_ac.beeper_off:
Design Checklist
Schematic Design
- ESP32-WROOM-32E module placed
- Power supply circuit (5V → 3.3V)
- Logic level shifter (TXB0104) connected
- Midea AC connector (JST-XH or USB)
- USB-to-Serial (optional but recommended)
- Status LEDs with current limiting resistors
- Reset and Boot buttons
- Decoupling capacitors (10µF + 100nF per power pin)
- Pull-up resistors for buttons
PCB Layout
- ESP32 antenna clearance (15mm no-ground zone)
- Power traces adequate width (0.5mm minimum)
- Ground planes on bottom layer
- UART traces kept short and away from power
- Decoupling caps close to power pins
- Thermal vias under regulator
- Component labels and reference designators
- Test points for debugging
Testing
- Power supply verification (3.3V stable)
- ESP32 boot and WiFi connection
- UART communication test
- Logic level shifter functionality (3.3V ↔ 5V)
- Midea AC communication
- BLE beacon transmission
- OTA update capability
Manufacturing Notes
PCB Specifications
- Layers: 2-layer minimum, 4-layer recommended
- Thickness: 1.6mm standard
- Copper Weight: 1oz (35µm)
- Surface Finish: HASL or ENIG (ENIG for better quality)
- Solder Mask: Green (standard) or custom color
- Silkscreen: White or black
Assembly
- Component Package: 0603 or 0805 (hand-solderable)
- ESP32 Module: Can be hand-soldered or reflow
- Level Shifter: TSSOP-14 (requires careful soldering or stencil)
Recommended PCB Manufacturers
- JLCPCB: Good for prototypes, low cost
- PCBWay: Good quality, reasonable price
- OSHPark: US-based, good for small batches
Cost Estimation
PCB Only (10 pieces)
- 2-layer 50×60mm: ~$5-10
- 4-layer 50×60mm: ~$20-30
Components (per unit)
- ESP32-WROOM-32E: $2-3
- TXB0104: $0.50
- AMS1117-3.3: $0.20
- CP2102N: $1-2 (optional)
- Other components: $1-2
- Total per unit: ~$5-8
Total Cost (10 units)
- PCB: $10-30
- Components: $50-80
- Total: ~$60-110 for 10 units
Next Steps
-
Create KiCad Schematic
- Add ESP32-WROOM-32E module
- Design power supply
- Add level shifter circuit
- Connect all components
-
Design PCB Layout
- Place components
- Route traces
- Add ground planes
- Verify design rules
-
Order Prototype
- Generate Gerber files
- Order PCBs (start with 5-10 pieces)
- Order components
- Assemble and test
-
Test and Iterate
- Test power supply
- Test ESP32 functionality
- Test Midea communication
- Test BLE beacon
- Fix any issues
References
- ESP32-WROOM-32E Datasheet
- TXB0104 Datasheet
- ESPHome Midea Component
- ESPHome BLE Beacon
- KiCad ESP32 Footprints
Last Updated: December 2025
Design Status: Specification Complete - Ready for Schematic Design