Skip to the content
PCBKitNew board
2 layers52.7 × 55.2 mmHomepost, the printed circuit board in 3D

A simple IoT project that integrates with HomeAssistant and involves phone presence tracking, temperature/humidity (pressure and others in future) and radiation level measurement

Size
52.7 × 55.2 mm
Copper layers
2
Thickness
1.6 mm
Parts
18
Nets
30
Pads
63
Tracks, vias
37, 4
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
5 Mar 2025
Updated
6 Feb 2026

Overview

Homepost is an open-source printed circuit board by CeSiumUA, from the CeSiumUA/homepost repository on GitHub. It is a 2-layer board of 52.7 × 55.2 mm with 18 parts on 30 nets, routed with 37 tracks and 4 vias.

Its parts include 5 connectors, 4 capacitors and 4 resistors. It belongs with the home automation and IoT and radio and wireless boards and the ESP32 boards of this library.

README

README.md

Homepost

Homepost is an ESP32-based home monitoring and automation hub that combines BLE tracking, environmental sensing, radiation monitoring, and MQTT integration into a single device.

Features

  • BLE iBeacon Tracking: Detects and tracks iBeacon devices for presence detection (e.g., phone tracking)
  • HTU21 Temperature & Humidity Sensor: Monitors environmental conditions via I2C and publishes data via MQTT
  • Geiger Counter Integration: Monitors radiation levels and publishes data via MQTT
  • WiFi Connectivity:
    • Station mode for connecting to existing networks
    • SoftAP mode for initial configuration
    • Automatic reconnection with configurable retry intervals
  • HTTP Server: Web-based configuration interface
  • MQTT Publishing: Sends sensor data and presence information to an MQTT broker
  • NVS Storage: Persistent storage for WiFi credentials, MQTT settings, and configuration

Hardware Requirements

  • ESP32 development board (4MB flash minimum)
  • HTU21D temperature/humidity sensor (I2C, default: SDA=GPIO21, SCL=GPIO22)
  • Geiger counter sensor (connected via GPIO)
  • Power supply (USB or external)

Note: A custom PCB design is available in the hardware/ directory (KiCad 8 format).

Software Dependencies

  • ESP-IDF v5.5 or later
  • FreeRTOS (included with ESP-IDF)

Building the Project

Prerequisites

  1. Install ESP-IDF following the official installation guide

  2. Set up the ESP-IDF environment:

    bash
    . $HOME/esp/esp-idf/export.sh

Configure

Configure the project using menuconfig:

bash
idf.py menuconfig

Navigate to homepost configuration to customize:

  • BT Options: Bluetooth device name, inquiry length
  • Scanner Options: RSSI filters, iBeacon major/minor IDs, scan timeout
  • WiFi Configuration: SoftAP credentials, reconnection settings
  • HTTP Server Configuration: Port settings
  • Storage Configuration: NVS keys for credentials

Build

Build the project:

bash
idf.py build

Flash

Flash the firmware to your ESP32:

bash
idf.py -p PORT flash

Replace PORT with your ESP32's serial port (e.g., COM3 on Windows or /dev/ttyUSB0 on Linux).

Monitor

View the serial output:

bash
idf.py -p PORT monitor

Or combine flash and monitor:

bash
idf.py -p PORT flash monitor

Configuration

Initial Setup

  1. On first boot, the device will create a WiFi access point named HOMEPOST (default password: 12345678)
  2. Connect to this network and access the web interface at http://192.168.4.1
  3. Configure:
    • WiFi credentials for your home network
    • MQTT broker settings (address, port, credentials)
    • MQTT topic base (runtime configurable via web interface)
    • iBeacon tracking parameters
    • Publish intervals

iBeacon Tracking

Configure the iBeacon major and minor IDs to match the devices you want to track:

  • HOMEPOST_SCAN_MAJOR_FILTER: Major ID (default: 100)
  • HOMEPOST_SCAN_MINOR_FILTER: Minor ID (default: 40004)
  • HOMEPOST_SCAN_TIMEOUT_MINUTES: How long to wait before marking device as absent (default: 2 minutes)

MQTT Topics

The device publishes to topics under the configured base topic:

  • {topic}/homepost_version: Firmware version in JSON format ({"version": "X.Y.Z"}), published on MQTT connection
  • {topic}/phone_present: Presence detection status (iBeacon tracking)
  • {topic}/phone_rssi: BLE RSSI signal strength in JSON format ({"rssi": -XX}) when device is present
  • {topic}/temperature: Temperature readings in JSON format ({"temperature": XX.XX})
  • {topic}/humidity: Humidity readings in JSON format ({"humidity": XX.XX})
  • {topic}/geiger: Geiger counter CPM (counts per minute) data

HTU21 Temperature & Humidity Sensor

Configure the HTU21 sensor via menuconfig:

  • HOMEPOST_HTU21_TIMER_PERIOD_MS: Reading interval (default: 60000ms / 1 minute)
  • HOMEPOST_HTU21_I2C_SDA_GPIO: I2C SDA pin (default: GPIO 21)
  • HOMEPOST_HTU21_I2C_SCL_GPIO: I2C SCL pin (default: GPIO 22)
  • HOMEPOST_HTU21_I2C_FREQ_HZ: I2C clock frequency (default: 100kHz)

Project Structure

text
homepost/
├── CMakeLists.txt              # Project configuration
├── sdkconfig                   # Build configuration
├── main/
│   ├── main.c                  # Application entry point
│   ├── wifi.c                  # WiFi connection management
│   ├── http_server.c           # Web configuration interface
│   ├── ble_scanner.c           # BLE scanning functionality
│   ├── ble_ibeacon.c           # iBeacon protocol handling
│   ├── tracker_scanner.c       # Presence tracking logic
│   ├── geiger_counter.c        # Radiation sensor integration
│   ├── htu21_sensor.c          # HTU21 temperature/humidity sensor
│   ├── mqtt_connection.c       # MQTT client
│   ├── internal_storage.c      # NVS storage management
│   ├── ota_update.c            # OTA firmware update
│   └── Kconfig.projbuild       # Configuration menu
├── inc/                        # Header files
└── hardware/                   # KiCad PCB design files
    └── manufacturing/          # Gerber files for PCB fabrication

OTA (Over-The-Air) Updates

Homepost supports automatic firmware updates from GitHub releases.

Requirements

  1. Flash Size: Requires 4MB flash (configured in menuconfig → Serial flasher config → Flash size)

  2. Partition Table: Must use OTA-compatible partition layout. In menuconfig:

    • Navigate to Partition Table
    • Select Two large size OTA partitions (required for 4MB flash with OTA)
  3. Bootloader Rollback (recommended): Enable automatic rollback on failed boot:

    • Navigate to Bootloader config
    • Enable CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE

GitHub Release Format

When creating releases on GitHub:

  • Tag format: release-v{version} (e.g., release-v1.3.0)
  • Asset filename: homepost-{version}.bin (e.g., homepost-1.3.0.bin)

OTA Configuration

Configure OTA settings via menuconfig → homepost configuration → OTA Update Configuration:

  • HOMEPOST_OTA_ENABLED: Enable/disable OTA updates (default: enabled)
  • HOMEPOST_OTA_GITHUB_OWNER: GitHub repository owner/organization
  • HOMEPOST_OTA_GITHUB_REPO: Repository name (default: homepost)
  • HOMEPOST_OTA_CHECK_INTERVAL_HOURS: Update check interval (default: 4 hours)
  • HOMEPOST_OTA_INITIAL_DELAY_SECONDS: Delay before first check (default: 30 seconds)

Manual Update

Access the web interface and use the "Firmware Update" section to:

  • View current and available versions
  • Check for updates manually
  • Trigger an update installation

API Endpoints

  • GET /check-update: Returns JSON with version info
  • POST /trigger-update: Triggers immediate update check and installation

Hardware Design

The hardware/ directory contains a complete KiCad 8 project for a custom Homepost PCB:

  • Schematic: homepost.kicad_sch
  • PCB Layout: homepost.kicad_pcb
  • Manufacturing Files: manufacturing/ directory contains Gerber files and drill files ready for PCB fabrication

Troubleshooting

WiFi Connection Issues

  • Check the serial monitor for connection status
  • Verify credentials are correct via the web interface
  • The device will retry connection every 3 minutes by default

MQTT Connection Problems

  • Verify broker address and port are correct
  • Check firewall settings on the broker
  • Ensure credentials (if required) are properly configured

BLE Scanning Not Working

  • Verify the iBeacon major/minor IDs match your tracking device
  • Check RSSI threshold if filtering is enabled
  • Ensure Bluetooth (BLE advertising) is enabled on the tracking device

HTU21 Sensor Not Working

  • Verify I2C wiring: SDA to GPIO21, SCL to GPIO22 (default pins)
  • Check that the sensor is powered (3.3V)
  • Review serial monitor for I2C initialization errors
  • Ensure no I2C address conflicts (HTU21 uses address 0x40)

License

This project is provided as-is for personal and educational use.

Parts

18
QtyValueFootprintReferences
4100nCapacitor_SMD:C_0402_1005MetricC1, C2, C3, C4
21k5Resistor_SMD:R_0402_1005MetricR3, R4
110kResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_HorizontalR1
1BMP180_CONNConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ2
1ESP_32_LEFTConnector_PinSocket_2.54mm:PinSocket_1x15_P2.54mm_VerticalJ3
1ESP_32_RIGHTConnector_PinSocket_2.54mm:PinSocket_1x15_P2.54mm_VerticalJ4
1GEIGER_CONNConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ5
1HTU21_CONNConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ1
1PWR_JMPConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP1
1R_PhotoResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_HorizontalR2

The 14 most common of 18 parts.

Questions

How big is the Homepost PCB?

It measures 52.7 × 55.2 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Homepost use?

18 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 Homepost KiCad files?

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

Can I use the Homepost design in my own project?

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

Similar boards

  • 2 layers27.9 × 16.5 mmPowerSSO-24 breakout, the printed circuit board in 3D

    PowerSSO-24 breakout

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    18 parts1.2k
  • 2 layers42.7 × 13.7 mmStm32-mini12864, the printed circuit board in 3D

    Stm32-mini12864

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    18 parts1.1kGPL-3.0
  • 2 layers41.2 × 46.6 mmThumb cluster left, the printed circuit board in 3D

    Thumb cluster left

    JesusFreke/lalboard

    A 3D-printed keyboard inspired by the DataHand

    18 parts993
  • 2 layers44 × 51.3 mm4272MAVcoder R4, the printed circuit board in 3D

    4272MAVcoder R4

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    18 parts915
  • 2 layers28.3 × 14.3 mmTap Photosensor PCB, the printed circuit board in 3D

    Tap Photosensor PCB

    VoronDesign/Voron-Tap

    Tap is a nozzle-based z-probe for the V2 and Trident printer designs. The entire toolhead moves to trigger an optical switch. Tap offers many advantages:

    18 parts716GPL-3.0
  • 2 layers20.3 × 15.2 mmL0 stepper driver, the printed circuit board in 3D

    L0 stepper driver

    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.

    18 parts546MIT
  • 2 layersMooltipass, the printed circuit board in 3D

    Mooltipass

    limpkin/mooltipass

    Github repository dedicated to the mooltipass project

    18 parts531
  • 2 layers42.5 × 28.8 mmC5VRX JACK DIY V2, the printed circuit board in 3D

    C5VRX JACK DIY V2

    Twotoz/C5VRX

    Ultra-minimal, zero-CPU 5.8 GHz analog FPV video receiver using ESP32-C5 Wi-Fi 6 PHY MODEM_DIAG, BitScrambler WBFM demodulation & resistor DAC CVBS

    18 parts515GPL-3.0