Following my previous experiments using ESP32 Wroom, such as the water-level monitoring project for a 1000L IBC tank using ultrasonic sensors connected to Home Assistant, detailed here:
and my busy light indicator based on my Microsoft Teams status using an ESP8266 mini D1:
along with various other smaller ESP-based projects, I decided it was time to explore something different: measuring ionizing radiation using a Geiger counter connected to Home Assistant.

Geiger Counter Project with ESP32 and Home Assistant
This new project required additional specialized hardware. I purchased the GGreg20_V3 ionizing radiation detector, including a Geiger tube (SBM-20), from IoT Devices:
Upon receipt, the sensor appeared as shown on their website, compact and ready to integrate with my ESP32 setup.

Hardware Integration and ESPHome Configuration
For this project, I used an ESP32 Wroom module I had available. Following the recommended wiring documentation on GitHub, integration was straightforward:

I then configured my ESP32 device with ESPHome using the following YAML configuration:
esphome:
name: esp-geiger01
friendly_name: ESP-Geiger01
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
ota:
platform: esphome
password: !secret passwd_esphome
# Enable Home Assistant API
api:
# Enable Web server
web_server:
port: 80
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.88.53
gateway: 192.168.88.1
subnet: 255.255.255.0
dns1: 192.168.88.200
sensor:
- platform: uptime
name: "esp-geiger01 Uptime"
update_interval: 120s
- platform: wifi_signal
name: "esp-geiger01 Wi-Fi Signal"
update_interval: 120s
- platform: pulse_counter
pin: GPIO23
name: "esp-geiger01 geiger counter CPM"
id: "geiger_counter"
update_interval: 100s
unit_of_measurement: 'CPM'
on_raw_value:
- sensor.template.publish:
id: radiation_level
state: !lambda 'return x * 0.0081;'
# This coefficient provided accurate background radiation readings based on datasheet information.
- platform: template
name: "esp-geiger01 Radiation Level"
id: "radiation_level"
unit_of_measurement: 'µSv/h'
update_interval: 120s
icon: mdi:radioactive
accuracy_decimals: 5
binary_sensor:
- platform: template
device_class: safety
name: "esp-geiger01 Radiation Warning"
lambda: |-
if (id(geiger_counter).state > 100) {
// High Count
return true;
} else {
// Normal Count
return false;
}
text_sensor:
- platform: version
name: "esp-geiger01 ESPHome version"
time:
- platform: homeassistant
id: homeassistant_time
Ensure the correct GPIO pin is selected for data collection from the Geiger sensor. In this case, GPIO23 was used.
Monitoring and Data Visualization
The ESP32-based Geiger counter successfully integrated with Home Assistant, allowing real-time radiation monitoring and alerting. The radiation levels, measured in Counts Per Minute (CPM) and converted to microsieverts per hour (µSv/h), provided clear insights into environmental radiation conditions.

Conclusion
This project demonstrated how accessible environmental monitoring can be with affordable ESP-based microcontrollers and ESPHome integration. From water level measurement and status indicators to radiation detection, the versatility of the ESP ecosystem offers endless possibilities for personal IoT projects.