

Homepost
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.mdHomepost
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
-
Install ESP-IDF following the official installation guide
-
Set up the ESP-IDF environment:
bash . $HOME/esp/esp-idf/export.sh
Configure
Configure the project using menuconfig:
idf.py menuconfigNavigate 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:
idf.py buildFlash
Flash the firmware to your ESP32:
idf.py -p PORT flashReplace PORT with your ESP32's serial port (e.g., COM3 on Windows or /dev/ttyUSB0 on Linux).
Monitor
View the serial output:
idf.py -p PORT monitorOr combine flash and monitor:
idf.py -p PORT flash monitorConfiguration
Initial Setup
- On first boot, the device will create a WiFi access point named
HOMEPOST(default password:12345678) - Connect to this network and access the web interface at
http://192.168.4.1 - 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
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 fabricationOTA (Over-The-Air) Updates
Homepost supports automatic firmware updates from GitHub releases.
Requirements
-
Flash Size: Requires 4MB flash (configured in
menuconfig→Serial flasher config→Flash size) -
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)
- Navigate to
-
Bootloader Rollback (recommended): Enable automatic rollback on failed boot:
- Navigate to
Bootloader config - Enable
CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE
- Navigate to
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/organizationHOMEPOST_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 infoPOST /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| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 100n | Capacitor_SMD:C_0402_1005Metric | C1, C2, C3, C4 |
| 2 | 1k5 | Resistor_SMD:R_0402_1005Metric | R3, R4 |
| 1 | 10k | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_Horizontal | R1 |
| 1 | BMP180_CONN | Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical | J2 |
| 1 | ESP_32_LEFT | Connector_PinSocket_2.54mm:PinSocket_1x15_P2.54mm_Vertical | J3 |
| 1 | ESP_32_RIGHT | Connector_PinSocket_2.54mm:PinSocket_1x15_P2.54mm_Vertical | J4 |
| 1 | GEIGER_CONN | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J5 |
| 1 | HTU21_CONN | Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical | J1 |
| 1 | PWR_JMP | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | JP1 |
| 1 | R_Photo | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_Horizontal | R2 |
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 mm

- 2 layers42.7 × 13.7 mm

Stm32-mini12864
VoronDesign/Voron-Hardware
Cool Hardware designed by the Voron Design group
18 parts1.1kGPL-3.0 - 2 layers41.2 × 46.6 mm

- 2 layers44 × 51.3 mm

4272MAVcoder R4
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
18 parts915 - 2 layers28.3 × 14.3 mm

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 mm

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 layers

- 2 layers42.5 × 28.8 mm

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