Olimex ESP32-C5-EVB — Home Assistant Integration
This repository contains two components:
custom_components/olimex_esp32_c5
Home Assistant custom integration for the Olimex ESP32-C5-EVB board.
- 2 relay switches (250V / 10A, controlled via HTTP POST to the board)
- 2 opto-isolated digital inputs (110VAC-240VAC, state pushed from board to HA via webhook)
- NFC/PN532 card reader for access control (optional, via UEXT connector)
- No polling — fully event-driven for inputs, command-driven for relays
Installation
Copy custom_components/olimex_esp32_c5 into your Home Assistant config/custom_components/ directory and restart HA.
esp32_arduino
Arduino sketch for the ESP32-C5-EVB board.
- Hosts a REST API on port 80
- Registers a callback URL with HA on startup
- POSTs input state changes to HA webhook in real time
- Optional NFC card reader integration for relay trigger automation
Arduino IDE Settings
| Setting | Value |
|---|---|
| Board | ESP32C5 Dev Module |
| Flash Size | 4MB |
| USB CDC On Boot | Enabled |
See esp32_arduino/DEPLOYMENT_GUIDE.md for full flashing instructions.
Key Differences from C6-EVB
| Feature | C6-EVB | C5-EVB |
|---|---|---|
| Relays | 4 | 2 (250V / 10A) |
| Inputs | 4 | 2 (opto-isolated 110VAC-240VAC) |
| Relay 1 | GPIO 10 | GPIO 24 |
| Relay 2 | GPIO 11 | GPIO 23 |
| Input 1 | GPIO 1 | GPIO 4 |
| Input 2 | GPIO 2 | GPIO 5 |
| LED | GPIO 8 | GPIO 27 |
| Button | GPIO 9 | GPIO 28 |
| NFC UART | GPIO 4/5 (UEXT1) | GPIO 26/25 (UEXT) |
Hardware Overview
Pin Configuration
Relays (250V / 10A AC/DC)
- Relay 1: GPIO24
- Relay 2: GPIO23
Opto-Isolated Inputs (110VAC-240VAC)
- Opto Input 1: GPIO4
- Opto Input 2: GPIO5
LED & Button
- User LED: GPIO27 (active LOW)
- User Button: GPIO28 (active LOW, internal pull-up)
UEXT Connector (for NFC reader / additional peripherals)
- I2C: SDA=GPIO9, SCL=GPIO8
- UART: TX=GPIO26, RX=GPIO25
- SPI: CLK=GPIO2, MOSI=GPIO7, MISO=GPIO6
Power & Connectivity
- USB-C power input
- WiFi 6 (802.11ax) dual-band (2.4 & 5 GHz)
- Bluetooth 5.0 LE
- Zigbee & Thread capable
API Endpoints
Status & Control
GET /api/status— Returns all relay and input states (JSON)POST /relay/on?relay=1-2— Turn relay onPOST /relay/off?relay=1-2— Turn relay offGET /relay/status?relay=1-2— Get relay state
Inputs
GET /input/status?input=1-2— Get input state
LED
POST /led/on— Turn LED onPOST /led/off— Turn LED off
Home Assistant Integration
POST /register?callback_url=...— Register HA webhook (no auth required for bootstrap)
NFC Access Control
GET /nfc/status— Get NFC module statusGET /nfc/config— Get NFC access control settingsPOST /nfc/config?auth_uid=...&relay=1-2&pulse_ms=5000— Set NFC access configPOST /nfc/enable?state=0|1— Enable/disable NFC module
Debug
GET /debug— System info (requires basic auth)
All endpoints except /register require Basic HTTP Authentication (default: admin/admin) or HMAC-SHA256 request signing.
Setup Instructions
-
Flash the firmware
-
Configure WiFi
- Edit WiFi credentials in
esp32_arduino.ino(lines ~58-59) - Set a static IP (currently 192.168.0.240)
- Flash the board
- Edit WiFi credentials in
-
Add to Home Assistant
- Copy
custom_components/olimex_esp32_c5/to~/.homeassistant/custom_components/ - Restart Home Assistant
- Settings → Devices & Services → Create Integration → Olimex ESP32-C5-EVB
- Enter board IP, port (80), and Home Assistant callback IP
- Copy
-
Optional: NFC Card Reader Setup
- Attach PN532 breakout to UEXT connector (TX=GPIO26, RX=GPIO25)
- Open board web UI (
http://<ip>/) - Enable NFC module
- Scan a card to authorize it
- Configure trigger relay and timeout
Home Assistant Integration
Once configured, entities appear automatically:
Switches
switch.olimex_esp32_c5_relay_1switch.olimex_esp32_c5_relay_2
Binary Sensors
binary_sensor.olimex_esp32_c5_input_1(opto-isolated input)binary_sensor.olimex_esp32_c5_input_2(opto-isolated input)binary_sensor.olimex_esp32_c5_nfc_card(NFC card present, if enabled)
Automations Create automations to trigger relays on input events, NFC cards, time schedules, etc.
Troubleshooting
Board not reachable
- Check WiFi SSID and password in code
- Verify board IP with serial console output
- Check firewall allows port 80
Inputs not triggering
- Verify wiring to opto-isolated inputs (GPIO4, GPIO5)
- Use
/debugendpoint to check input state - Ensure Home Assistant callback URL is registered
NFC not detecting cards
- Check PN532 wiring (TX=GPIO26, RX=GPIO25)
- Set PN532 DIP switches to HSU mode (both = 0)
- Check serial output for PN532 detection message
- Try different baud rates (115200, 9600, 57600, 38400)
Security Notes
- Default credentials: admin / admin
- Change WEB_PASSWORD in
secrets.hbefore deployment - Enable API_SECRET for HMAC-SHA256 request signing (optional)
- Only expose board on trusted local networks
- NFC cards trigger relays when authenticated card is present
License & Attribution
- Hardware: Olimex
- Firmware: Arduino & ESP-IDF
- Integration: Home Assistant Custom Component