Skip to the content
2 layers39 × 59.5 mmTemp probe zigbee, the printed circuit board in 3D

Temp probe zigbee

brucejcooper/brewery

contains firmwares and PCB layouts for my own homebrew homebrew setup. Mirror of git.8bitcloud.com/bruce/brewery (read-only; changes go to Forgejo)

Size
39 × 59.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
2
Nets
22
Pads
36
Tracks, vias
17, 0
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
26 Oct 2026
Updated
26 Oct 2026

Overview

Temp probe zigbee is an open-source printed circuit board by brucejcooper, from the brucejcooper/brewery repository on GitHub. It is a 2-layer board of 39 × 59.5 mm with 2 parts on 22 nets, routed with 17 tracks and 0 vias.

Its parts include 1 IC and 1 connector. It belongs with the sensors and measurement and radio and wireless boards and the ESP32 and RISC-V boards of this library.

README

README.md

Brewery control system

Monorepo of firmware and hardware for an automated HERMS brewery, built around a small fleet of networked temperature probes feeding a central heating controller — all coordinated over MQTT (with Home Assistant discovery, so the whole rig shows up in HA automatically).

Layout: stand_alone_temp_probe/ (RTD probe firmware), boil_controller/ (HERMS/boil controller firmware), brewery_common/ (shared ESP-IDF component: OTA, firmware version-check, network log tap — used by both firmwares via a component-manager path dependency), old/ (reference designs + the original KiCad schematic), tools/ (build helper), homeassistant/ (operator dashboard, brew phases and the fermenter dose controller), recipes/ (BeerXML exports), tilt_sensor/ (BLE hydrometer — nRF52840, Arduino toolchain, in progress).

text
            ┌──────────────────────┐
   HLT  ───▶│ temp probe (RTD)     │──┐
   mash ───▶│ temp probe (RTD)     │──┤   mechination/<id>/temperature
   boil ───▶│ temp probe (RTD)     │──┤      (WiFi, retained, >=1 Hz)
   …    ───▶│ temp probe (RTD)     │──┤
            └──────────────────────┘  │
                                      ▼
                             ┌─────────────────┐
                             │   MQTT broker   │  (+ Home Assistant)
                             └─────────────────┘
                                      │ subscribes to the probe temps
                                      ▼
                       ┌────────────────────────────┐
                       │  boil / HERMS controller   │  ESP32-WROVER
                       │  PID ──▶ ULN2003A ──▶ SSRs │
                       └────────────────────────────┘
                               │            │
                           HLT element   Boil-kettle
                          (heats HERMS)    element

The firmwares we host here

1. stand_alone_temp_probe/ — temperature probe

Seeed XIAO ESP32-C6 + Adafruit MAX31865 RTD amplifier. Reads a PT100/PT1000 RTD, joins WiFi, and publishes its temperature to MQTT (retained, ≥ 1 Hz) with Home Assistant discovery and RTD-fault reporting. One probe per measured point — give each a distinct device id (hlt, herms_out, boil_kettle, …) so they share the MQTT tree without colliding.

Note: the firmware is WiFi + MQTT (see main/temp_probe.h, idf_component.yml). The probe's own README.md still describes an earlier Zigbee revision and is being updated — trust the WiFi/MQTT build.

2. boil_controller/ — boil / HERMS controller

ESP32-WROVER + ULN2003A + 2× mains SSR. Subscribes to the probes' MQTT temperatures, runs a PID loop per heated vessel, and drives the SSRs with time-proportional output:

  • HERMS channel — modulates the HLT element to hold the mash temperature (wort recirculating out of the HERMS coil), with an HLT over-temp cutout.
  • Boil channel — drives the boil-kettle element to a setpoint.

The first two ULN2003A channels drive the SSRs; the other five are broken out for future use (pumps, alarm, …). It supports OTA updates over MQTT so we can iterate without touching the hardware. See boil_controller/README.md.

3. tilt_sensor/ — BLE hydrometer (in progress)

Seeed XIAO nRF52840 Sense. A homebrew Tilt clone: a sealed float in the fermenter that derives specific gravity from its inclination (LSM6DS3TR-C IMU) and BLE-broadcasts gravity plus temperature.

The odd one out in this repo — Arduino / arduino-cli, not ESP-IDF, and BLE, not WiFi/MQTT, so it does not use brewery_common. Bridging its beacon into MQTT/HA is a later job for the HA side. Right now it holds one bring-up sketch, battery_test, for validating the cell and the BQ25101 charge path. See tilt_sensor/README.md.

Temperature sensors

Each is an independent standalone probe publishing to MQTT. Planned points:

Probe device idMeasuresUsed by the controller for
hltHot Liquor TankHERMS over-temp cutout
herms_outMLT output / mash temp off the HERMS coilHERMS PID process variable
boil_kettleBoil kettleBoil PID process variable
(more)e.g. mash-in, ambientfuture channels / logging

Topic convention (shared prefix): mechination/<device_id>/temperature, with availability at mechination/<device_id>/status and a per-reading …/temperature/status that goes offline on an RTD fault (so the controller can fail-safe).

old/ — previous designs (reference only)

The earlier brewery was Bluetooth-based and is superseded by the WiFi/MQTT design above. Kept for reference:

  • old/brewery-circuit/ — the original controller schematic + PCB (Brewery.kicad_pcb, KiCad/2019): ESP32-WROVER + ULN2003A + LTC2986. This is where the boil-controller pinout came from.
  • old/ssr/ — BLE-central SSR firmware (an ESP-IDF BLE example, not the real app)
  • old/hw/SSR/ — single-channel SSR PCB (PN2222A driver + opto) — still useful HW
  • old/hw/Temp_probe/ — temp-probe PCB
  • old/temp_sensor/ — MicroPython MAX31865 driver
  • old/zephyr_temp/ — Zephyr RTOS temperature app
  • old/web/ — the old Web-Bluetooth brewery dashboard

The old boil-controller firmware was not recovered (nothing referencing the LTC2986 exists under ~/dev, and the old system was Bluetooth-based), so boil_controller/ is a clean rebuild. The hardware schematic survives in old/brewery-circuit/, and the controller pinout is taken from it:

FunctionGPIO
SSR — HERMS/HLT (ULN OUT6)GPIO26
SSR — Boil (ULN OUT7)GPIO27
Spare ULN outputs (OUT3–5)GPIO32/33/25
LTC2986 SPI (unused)MOSI 23, MISO 19, SCLK 18, CS 5, DRDY 4

⚠️ The board's first two ULN channels (DO1/DO2) land on GPIO34/35, which are input-only — they can't drive outputs. The unit as built wires the SSRs to OUT6/OUT7 (GPIO26/27); any of DO3..DO7 would do. The LTC2986 is dropped from the design (temps come over MQTT) but is held quiescent in firmware since it's still populated on the board. Details in boil_controller/README.md.

Building

Both firmwares are independent ESP-IDF projects (ESP-IDF ≥ 5.3; tested with the installed ~/esp/esp-idf). Build each from its own directory:

sh
. ~/esp/esp-idf/export.sh

# Temperature probe (XIAO ESP32-C6)
cd stand_alone_temp_probe
idf.py set-target esp32c6
idf.py menuconfig          # WiFi, MQTT, device id, RTD type/pins
idf.py -p <PORT> flash monitor

# Boil controller (ESP32-WROVER)
cd ../boil_controller
idf.py set-target esp32
idf.py menuconfig          # WiFi, MQTT, sensor topics, ULN GPIOs, PID gains
idf.py -p <PORT> flash monitor

The two boards target different chips (esp32c6 vs esp32), so keep their build trees separate (each has its own sdkconfig). A convenience script is at tools/build.sh:

sh
./tools/build.sh both        # build both
./tools/build.sh probe       # just the temp probe
./tools/build.sh boil flash  # build + flash the controller (auto-detects port)

After the controller's first USB flash, subsequent updates can go over the air — see boil_controller/README.md.

Parts

2
QtyValueFootprintReferences
1Conn_01x08Connector_PinSocket_2.54mm:PinSocket_1x08_P2.54mm_VerticalJ1
1XIAO-ESP32-C6Seeed Studio XIAO Series Library:XIAO-ESP32C6-DIPU1

More from brucejcooper/brewery

4
  • 2 layers58.4 × 52.1 mmBrewery, the printed circuit board in 3D

    Brewery

    brucejcooper/brewery

    contains firmwares and PCB layouts for my own homebrew homebrew setup. Mirror of git.8bitcloud.com/bruce/brewery (read-only; changes go to Forgejo)

    34 parts
  • 2 layers63 × 45 mmSSR, the printed circuit board in 3D

    SSR

    brucejcooper/brewery

    contains firmwares and PCB layouts for my own homebrew homebrew setup. Mirror of git.8bitcloud.com/bruce/brewery (read-only; changes go to Forgejo)

    11 parts
  • 2 layers36.8 × 22.2 mmTemp probe, the printed circuit board in 3D

    Temp probe

    brucejcooper/brewery

    contains firmwares and PCB layouts for my own homebrew homebrew setup. Mirror of git.8bitcloud.com/bruce/brewery (read-only; changes go to Forgejo)

    8 parts
  • 2 layers9.2 × 15.5 mmPinMultiplexer, the printed circuit board in 3D

    PinMultiplexer

    brucejcooper/brewery

    contains firmwares and PCB layouts for my own homebrew homebrew setup. Mirror of git.8bitcloud.com/bruce/brewery (read-only; changes go to Forgejo)

    2 parts

Similar boards

  • 2 layers37 × 19 mmPassive rpi hub75-adapter, the printed circuit board in 3D

    Passive rpi hub75-adapter

    hzeller/rpi-rgb-led-matrix

    Controlling up to three chains of 64x64, 32x32, 16x32 or similar RGB LED displays using Raspberry Pi GPIO

    2 parts4.4kGPL-2.0
  • 2 layersDiode template, the printed circuit board in 3D

    Diode template

    adamws/kicad-kbplacer

    KiCad plugin for automatic keyboard's key placement and routing

    2 parts547GPL-3.0
  • 2 layers20.3 × 15.2 mmL0 button, the printed circuit board in 3D

    L0 button

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    2 parts546MIT
  • 2 layers35.1 × 46.8 mmSDEX2M2 Breakout Board, the printed circuit board in 3D

    SDEX2M2 Breakout Board

    NVNTLabs/switch2-SDEX2M2

    Micro SD Express to M.2 NVME Adapter for Nintendo Switch 2

    2 parts542GPL-3.0
  • 2 layers59.3 × 36.6 mmExpansionBoardTemplate, the printed circuit board in 3D

    ExpansionBoardTemplate

    BlueSCSI/BlueSCSI-v2

    BlueSCSI v2/Ultra - an open source, open hardware, SCSI emulator using the Pi Pico PR2040 and Pico 2 RP2350

    2 parts459GPL-3.0
  • 2 layersAlpha.9mm.wire, the printed circuit board in 3D

    Alpha.9mm.wire

    ohmtech-rdi/eurorack-blocks

    Software to Hardware Prototyping for Eurorack using C++, Max/Gen~ or Faust

    2 parts410
  • 2 layers26.7 × 64 mmGpu power, the printed circuit board in 3D

    Gpu power

    dennisss/dacha

    Monorepo for awesome tools/projects/libraries

    2 parts397Apache-2.0

Questions

How big is the Temp probe zigbee PCB?

It measures 39 × 59.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Temp probe zigbee use?

2 parts. 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 Temp probe zigbee KiCad files?

From the brucejcooper/brewery repository on GitHub, at the commit this page was made from: the board is stand_alone_temp_probe/temp_probe_zigbee/temp_probe_zigbee.kicad_pcb and its schematic old/hw/SSR/SSR.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Temp probe zigbee design in my own project?

Its repository states no licence, so its author keeps all rights: ask brucejcooper before reusing the design.