Skip to the content
PCBKitNew board
2 layers120 × 49 mmSensor hat, the printed circuit board in 3D

This runs a pool from a Waveshare ESP32-S3-RELAY-6CH and the PoolVeras sensor hat plugged onto its Pico headers.

Size
120 × 49 mm
Copper layers
2
Thickness
1.6 mm
Parts
69
Nets
42
Pads
197
Tracks, vias
209, 23
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
20 Jun 2026
Updated
13 Oct 2026

Overview

Sensor hat is an open-source printed circuit board by mikedahlgren, from the mikedahlgren/Pool-Controller repository on GitHub. It is a 2-layer board of 120 × 49 mm with 69 parts on 42 nets, routed with 209 tracks and 23 vias.

It is built around the CL21B104KCFSFNE, BAT54SLT1G and RC0805FR-0710KL, with the PPPC031LFBN-RC, PPPC201LFBN-RC and TS-1187A-B-A-B among its other parts. Its parts include 28 resistors, 16 connectors, 9 capacitors, 8 diodes and 3 switches. It belongs with the sensors and measurement boards of this library.

Main components

10

README

README.md

Pool Controller

This runs a pool from a Waveshare ESP32-S3-RELAY-6CH and the PoolVeras sensor hat plugged onto its Pico headers.

The Waveshare board talks to the pump, switches the acid pump and the pool light, and reports its own chip temperature. The hat is where the sensors connect: Atlas probe circuits, a 4-20 mA filter-pressure sender, optional pH current loop, DS18B20 temperature sensors, and dry contacts. Home Assistant and the page at http://pool-controller.local show the readings. Once an hour the controller can post pH and water temperature to PoolVeras.

How the hardware is split

JobBoard
Pentair IntelliFlo on RS485Waveshare, GPIO17 and GPIO18
Acid pumpWaveshare relay CH2, GPIO2
Pool lightWaveshare relay CH6, GPIO46
Waterfall relayWaveshare relay CH1, GPIO1. Leave it off unless you use it
Board temperatureInside the ESP32-S3. This is the chip, not the pool
Atlas pH, ORP, salinity, RTD, or dissolved oxygenHat sockets. Any of those boards can go in any pair
Filter pressure and other 4-20 mA loopsHat screw J8. Each loop needs its own 12 V or 24 V supply
Air and water temperatureHat screw J6, DS18B20 sensors. SW3 selects the pull-up. Use 4.7k, handle toward the USB edge
Display buttonsSW1 is GPIO7 and SW2 is GPIO6. J17 is the same two switches
Dry contactsHat screw J7. A bare switch to the GND screw. ON means closed

CH3, CH4, and CH5 on the Waveshare are free. The hat's 3.3 V rail, through fuse F1, powers the Atlas boards and the 1-Wire sensors. It does not power the 4-20 mA loops.

Screw order on the hat, left to right, is J3 through J8. Probe returns land on PGND next to PRB, not on the board ground screws.

Connector-by-connector wiring is in esphome/README.md. The Waveshare header and onboard GPIO map is in hardware/WAVESHARE_PINOUT.md. Acid dosing is in esphome/ACID_PH.md. Filter pressure is in esphome/FILTER_PRESSURE.md. The board files are in hardware/sensor-hat.

Install

Use ESPHome 2025.9.0 or newer.

From Home Assistant, paste esphome/ha-pool-controller.yaml into ESPHome Builder. It loads the rest of the firmware from the PoolverasV1 branch. Copy the keys in esphome/secrets.yaml.example into Home Assistant's secrets.yaml, then Install.

From a clone of this repo:

bash
esphome run esphome/pool-controller.yaml

Parts

69
QtyValueFootprintReferences
9100nFPCM_JLCPCB:C_0805C3, C4, C5, C6, C7, C8, C9, C10, C11
91kPCM_JLCPCB:R_0805R5, R6, R7, R8, R9, R10, R11, R12, R26
8BAT54SPackage_TO_SOT_SMD:SOT-23D1, D2, D3, D4, D5, D6, D7, D8
610kPCM_JLCPCB:R_0805R13, R14, R15, R16, R29, R30
6EZO socket, topPinSocket_1x03_P2.54mm_VerticalJ9, J10, J11, J12, J13, J14
5100PCM_JLCPCB:R_0805R17, R18, R19, R20, R21
4150PCM_JLCPCB:R_0805R1, R2, R3, R4
34.7kPCM_JLCPCB:R_0805R24, R27, R28
21x20 socket, bottomPinSocket_1x20_P2.54mm_VerticalJ1, J2
2pushButton_Switch_SMD:SW_Push_1P1T_XKB_TS-1187ASW1, SW2
10.2AFuse:Fuse_1812_4532MetricF1
11-WireTerminalBlock_Phoenix_MKDS-1,5-3-5.08_1x03_P5.08mm_HorizontalJ6
12.2kPCM_JLCPCB:R_0805R25
14-20 mATerminalBlock_Phoenix_MKDS-1,5-5-5.08_1x05_P5.08mm_HorizontalJ8
1EZOSensorHat:Atlas_EZOEZO3
1EZO probeTerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_HorizontalJ5
1ORPSensorHat:Atlas_EZOEZO2
1ORP probeTerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_HorizontalJ4
1SK13D07VG5SensorHat:SW_SK13D07VG5SW3
1SSD1309SensorHat:SSD1309DISP1
1SocketConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ16
1contactsTerminalBlock_Phoenix_MKDS-1,5-5-5.08_1x05_P5.08mm_HorizontalJ7
1externalConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ17
1pHSensorHat:Atlas_EZOEZO1
1pH probeTerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_HorizontalJ3

Questions

How big is the Sensor hat PCB?

It measures 120 × 49 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Sensor hat use?

69 parts, built around the CL21B104KCFSFNE, BAT54SLT1G, RC0805FR-0710KL and PPPC031LFBN-RC. 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 Sensor hat KiCad files?

From the mikedahlgren/Pool-Controller repository on GitHub, at the commit this page was made from: the board is hardware/sensor-hat/sensor-hat.kicad_pcb and its schematic hardware/sensor-hat/sensor-hat.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Sensor hat design in my own project?

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

Similar boards

  • 4 layers65 × 45 mm03-final E, the printed circuit board in 3D

    03-final E

    ramtuc/rp2040-logic-analyzer

    RP2040 + TXU0104 16ch logic analyzer board for PulseView (sigrok-pico), 4-layer, JLCPCB PCBA

    82 partsCERN-OHL-P-2.0
  • 4 layers70.1 × 46.4 mmWireless switch, the printed circuit board in 3D

    Wireless switch

    hkymstr/Wireless-switch

    A fully wireless switch panel for a race car using two Raspberry Pi Pico 2 W boards. One board acts as the Transmitter (switch panel), the other as the Receiver (12 V output driver).

    102 parts
  • 4 layers100 × 100 mmPCB EU, the printed circuit board in 3D

    PCB EU

    nikolajevs/PCB_EU

    Сохраняются функции PCBV1: два LED-канала с общей яркостью, два независимых PWM/тахоканала вентиляторов, PTC, помпа, SHT4x, поплавок, RTC с CR2032, microSD, Wi-Fi и существующие функции интерфейса/расписаний.

    201 parts
  • 4 layers50.8 × 61 mmEspoir, the printed circuit board in 3D

    Espoir

    kitspace-test-repos/kicad6-file-collection

    101 partsMIT
  • 2 layers170 × 100 mmPlytka nosna, the printed circuit board in 3D

    Plytka nosna

    tmierzwa/WICI

    Otwarty system łączności awaryjnej (Reticulum/LXMF, 869 MHz)

    74 parts4
  • 6 layers313 × 259.5 mmOpen8-vga motherboard, the printed circuit board in 3D

    Open8-vga motherboard

    adham404/Open8-VGA

    An 8-bit computer from 74HC logic: microcoded CPU, VGA, PS/2, on-board editor and assembler. Play it in your browser.

    322 parts3MIT
  • 2 layers169 × 81 mmSG mesocosm pi interface, the printed circuit board in 3D

    SG mesocosm pi interface

    scott-whitworth/bancroft_temperature_control

    Supplementary material for Bancroft Experimental Temperature Control System

    77 parts2