Skip to the content
PCBKitNew board
2 layers40.7 × 52.1 mmProbe, the printed circuit board in 3D

A wireless temperature monitoring system: small battery-powered probes broadcast temperature, humidity, and battery level over BLE, and a Wi-Fi-connected hub collects those readings and uploads them to a webhook.

Size
40.7 × 52.1 mm
Copper layers
2
Thickness
1.09 mm
Parts
11
Nets
45
Pads
75
Tracks, vias
77, 29
Pours
3
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
26 Sep 2026
Updated
26 Sep 2026

Overview

Probe is an open-source printed circuit board by JamieG, from the JamieG/temp-sensor repository on GitHub. It is a 2-layer board of 40.7 × 52.1 mm with 11 parts on 45 nets, routed with 77 tracks and 29 vias.

It is built around the MDBT42Q-512KV2, SHT40-AD1B-R2 and BAT-HLD-005-THM, with the FTSH-105-01-L-D among its other parts. Its parts include 2 capacitors, 2 resistors, 2 inductors, 1 connector and 1 switch. It belongs with the sensors and measurement boards and the nRF52 and nRF5x boards of this library.

Main components

4

README

README.md

TempSensor

A wireless temperature monitoring system: small battery-powered probes broadcast temperature, humidity, and battery level over BLE, and a Wi-Fi-connected hub collects those readings and uploads them to a webhook.

text
 ┌──────────┐   BLE advertising    ┌──────────┐   Wi-Fi (HTTPS POST)   ┌──────────────┐
 │  Probe   │  - - - - - - - - - -▶│   Hub    │ ──────────────────────▶│   Receiver   │
 │ (nRF52)  │   TEMP-XXXXXX        │ (ESP32C6)│  JSON batches          │ (your server)│
 └──────────┘   ~1 s bursts        └──────────┘  adaptive schedule      └──────────────┘

Components

Probe (Probe/)

A custom battery-powered sensor board (KiCad design in Probe/hardware/, currently developed on an nRF52 Development Kit) running Zephyr RTOS.

  • Reads temperature and humidity from an SHT4x sensor over I²C, plus battery voltage through the ADC.
  • Stays asleep most of the time to protect battery life. It wakes about once a minute (±5 s jitter), and only turns the radio on when something is worth reporting: either the temperature moved ≥0.2 °C since the last broadcast, or an hourly heartbeat is due (TransmissionPolicy).
  • Broadcasts a compact 14-byte manufacturer-data block via BLE advertising — no pairing, no connection. Each probe identifies itself with a name like TEMP-5A6B7C derived from its own BLE address.

The board is a two-layer, button-cell-powered design built in KiCad (Probe/hardware/): an MDBT42Q nRF52 module with a PCB antenna, an SHT40 sensor, a spring-contact coin-cell holder, a programming header, and a power switch.

PCB layout (top view)3D render
Probe PCB layoutProbe 3D render

Hub (Hub/)

A Seeed XIAO ESP32C6 running Arduino firmware.

  • Continuously scans for probe advertisements, decoding and deduplicating readings from up to 50 known probes (by sensor ID + sequence number).
  • Buffers up to 500 readings in RAM and uploads them in bounded batches over Wi-Fi to a configurable URL. Upload scheduling is adaptive: every 15 s when healthy, faster under queue backlog, with exponential backoff after failures. Readings are only removed from the queue after the server accepts them.
  • Shows live status (sensors, queue, upload counters) on an onboard ST7789 display.
  • On first boot (or after a 3-second BOOT-button hold clears the config) it opens a Wi-Fi access point with a captive portal to enter your network credentials and destination URL.
  • Uses the external U.FL antenna via the board's RF switch.

Shared protocol (Probe/lib/tempsensor_protocol/)

The on-air message layout is defined once, in Probe/lib/tempsensor_protocol/src/tempsensor_protocol.hpp, and consumed by both firmwares (the Hub pulls it in through a PlatformIO file:// library dependency). The probe encoder and hub decoder can therefore never drift apart; changing the layout means bumping kProtocolVersion and reflashing both sides.

OffsetSizeField
02Company ID 0xFFFF (prototype identifier)
21Protocol version (0x02)
33Sensor ID (from the probe's BLE address)
62Sequence number (uint16)
82Temperature (int16, 0.01 °C)
102Humidity (uint16, 0.01 %RH)
122Battery voltage (uint16, mV)

The hub POSTs JSON of the form {hub_mac, hub_rssi, readings: [{timestamp, sensor_id, sequence, temperature, humidity, battery_mv, ble_rssi}, ...]}. The receiving server is not part of this repository and must deduplicate per reading by (hub_mac, sensor_id, sequence, timestamp).

Getting started

Requires PlatformIO Core.

bash
# Build the probe firmware (nRF52 DK, uploads via J-Link)
cd Probe && pio run && pio run --target upload

# Build the hub firmware (XIAO ESP32C6, uploads over USB serial)
cd Hub && pio run && pio run --target upload

# Watch serial output (115200 baud)
pio run --target monitor

First hub boot with no saved configuration: connect to the hub's setup access-point, open the captive portal, and save your Wi-Fi SSID/password and webhook URL. See AGENTS.md for the full agent/developer reference (build config, test workflow, troubleshooting) and Hub/docs/ for the upload reliability and stress-testing notes.

Repository layout

text
TempSensor/             # repository root
├── AGENTS.md           # Developer/agent reference: builds, tests, conventions
├── Probe/              # BLE sensor firmware (nRF52, Zephyr)
│   ├── lib/tempsensor_protocol/   # Shared on-air schema (used by both sides)
│   └── hardware/       # KiCad PCB design and component models
└── Hub/                # Collector/upload firmware (XIAO ESP32C6, Arduino)
    ├── docs/           # Reliability & stress-test documentation
    └── test/           # Host-side policy tests + serial stress capture

Parts

11
QtyValueFootprintReferences
210kResistor_SMD:R_0603_1608MetricR3, R4
11 µFCapacitor_SMD:C_0603_1608MetricC14
110 µFCapacitor_SMD:C_0805_2012MetricC11
110 µHInductor_SMD:L_0603_1608MetricL2
115 nHInductor_SMD:L_0402_1005MetricL3
1BAT-HLD-005-THMcomponents:BAT_BAT-HLD-005-THMBT1
1FTSH-105-01-L-Dcomponents:SAMTEC_FTSH-105-01-L-DJ1
1MDBT42Q-512KV2MDBT42Q-512KV2:RAYTAC_MDBT42Q-512KV2E1
1SHT40-AD1B-R2components:SHT4XSHT40
1SW_SPDTcomponents:SW_SSSS811101SW1

Questions

How big is the Probe PCB?

It measures 40.7 × 52.1 mm and has 2 copper layers, 1.09 mm thick.

What parts does the Probe use?

11 parts, built around the MDBT42Q-512KV2, SHT40-AD1B-R2, BAT-HLD-005-THM and FTSH-105-01-L-D. 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 Probe KiCad files?

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

Can I use the Probe design in my own project?

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

Similar boards

  • 2 layers32.5 × 34.5 mmStandaloneLeakDetector, the printed circuit board in 3D

    StandaloneLeakDetector

    ncsurobotics/SW8E-StandaloneLeakDetector

    Standalone leak detector intended for use in LiPo battery hulls

    17 partsMIT
  • 2 layers229.7 × 135.6 mmMorse mesh v2, the printed circuit board in 3D

    Morse mesh v2

    eihli/morse-mesh

    This is the current hardware source for future Morse Mesh revisions. It is a professionally reviewed redraw of the frozen, fabricated v1 board, not a pin-compatible replacement: notably, KEYIN moved from v1 PA0 to v2…

    75 parts1
  • 4 layers82.4 × 53.3 mmSara rx ab, the printed circuit board in 3D

    Sara rx ab

    ldab/SARA-Rx-application-board

    SARA-R4 NB-IoT + Cat-M1 + GNSS application board - NINA-B3 with Secure MQTT

    133 partsMIT
  • 4 layers57.2 × 49.2 mmUSBVolumeKnob, the printed circuit board in 3D

    USBVolumeKnob

    Microsparky/usb-vk-hardware

    Hardware for USB Volume Knob

    78 parts
  • 2 layers85 × 40 mmBle beacon, the printed circuit board in 3D

    Ble beacon

    Shwetha-org/BLE-Garment-Monitoring-System

    BLE Garment Monitoring System is a research prototype that uses a custom BLE tag, a Raspberry Pi room scanner, and a mobile app to detect simple garment usage states (stored, worn, wet) and summarize wears and washes.

    19 parts1
  • 4 layers30 × 40 mmPulsepatch, the printed circuit board in 3D

    Pulsepatch

    suhaant/Amethyst

    Full-Stack Embedded System Wearable

    90 parts1
  • 4 layers66 × 42 mmGas nrf52832, the printed circuit board in 3D

    Gas nrf52832

    bradkim06/gas_nordic

    gas sensing iot device(nrf52832)

    83 partsApache-2.0