Ayush Pande is a PC hardware and gaming writer. When he's not working on a new article, you can find him with his head stuck inside a PC or tinkering with a server operating system. Besides computing, his interests include spending hours in long RPGs, yelling at his friends in co-op games, and practicing guitar.
Considering the sheer number of circuitry components, motors, and sensor modules you can connect to an ESP32, it makes sense that many cool projects out there rely on extra accessories to make the most of your tiny boards. But contrary to what you may believe, you don’t necessarily need to spend extra bucks on extra devices just to put together some projects. Heck, as long as you’ve got some means to power your ESP32, you can build a handful of DIY setups that just require these microcontrollers.
DNS sinkhole
A cheap way to block ads
When you think about DNS sinkholes, a Pi-hole setup is probably the first thing that comes to mind. Despite its utility, it’s an easy application you can spin up on something as cheap as an SBC. That said, you don’t necessarily need a home server or a Raspberry Pi if all you wish to do is use blocklists to prevent your devices from loading ads.
For example, the ESP32_AdBlocker repo by s60sc can maintain a blocklist on your ESP32 microcontroller and use it to prevent any content from flagged websites. The only catch is that you’ll need an ESP32 microcontroller with extra memory to maintain modern blocklists. But as long as you’ve got the ESP32-S3 with 8MB of PSRAM, you shouldn’t have any trouble, and the overall DNS lookup process is light enough for this tiny board to handle. Of course, you won’t get the same features as Pi-hole, but a barebones DNS sinkhole powered by an ESP32 is more than enough to stop ads from rearing their ugly heads.
Motion detection system
Who says an ESP32 needs dedicated sensor modules to detect motion?
Despite seeming like a project that may require an HC-SR501 module or an equivalent sensor, an ESP32 microcontroller is more than capable of detecting motion once you flash it with ESPectre and pair it with a wireless router/access point. Wi-Fi packets transmitted by your router possess CSI records, which describe the physical characteristics of the radio signal. As such, any movement around the router will cause the CSI values to change, and the ESPectre package by francescopace checks these updated metrics to calculate a motion score.
Once you’ve calibrated ESPectre’s motion profile and tweaked the accuracy settings, its motion detection provisions are surprisingly reliable. Of course, I’d still recommend grabbing premium motion and presence detection sensors for lighting up risk-prone areas such as stairs. But when it comes to simple pantry lighting or hallway LEDs, ESPectre’s motion scanning provisions are more than enough to trigger simple automations.
Home lab watchdog
But you can just as easily turn it into a dead man switch for VPS
Thanks to the ESP32’s support for wireless networks, you can also repurpose it into an uptime monitor that keeps an eye on essential services and notifies you if they go offline abruptly. For example, I created a quick ESP32 monitor for my Proxmox node the other day using ESPHome, and since it’s something for my specific setup, I decided to use a base ESP32 template and add this custom script instead of scouring GitHub for pre-made projects:
http_request:
useragent: proxmox-watchdog
timeout: 5s
verify_ssl: false
binary_sensor:
- platform: template
name: "Proxmox Web UI"
id: proxmox_up
device_class: connectivity
lambda: return {};
- platform: status
name: "Proxmox Watchdog Online"
text_sensor:
- platform: template
name: "Proxmox Probe Status"
id: probe_status
update_interval: 60s
globals:
- id: failures
type: int
restore_value: no
initial_value: "0"
interval:
- interval: 30s
then:
- http_request.get:
url: https://192.168.0.138:8006/
capture_response: true
on_response:
then:
- lambda: |-
id(failures) = 0;
id(proxmox_up).publish_state(true);
id(probe_status).publish_state(
"HTTP " + std::to_string(response->status_code) +
" in " + std::to_string(response->duration_ms) + " ms"
);
on_error:
then:
- lambda: |-
id(failures) += 1;
id(probe_status).publish_state(
"Failed " + std::to_string(id(failures)) + " time(s)"
);
if (id(failures) >= 3) {
id(proxmox_up).publish_state(false);
}
And that’s just the web UI. You could just as easily add short blocks for checking whether other networking services, NAS interfaces, or even home lab paraphernalia are up and running. Since everything is connected to Home Assistant, there are a ton of cool ways to automate this watchdog, and these range from simple scripts that reboot the server when it goes offline to full-fledged dead-man switch combos for VPS that automatically shut it down if your ESP32 can’t reach it.
Bluetooth proxy
With the right board, you can even opt for Zigbee router or Thread border router
If you’ve got as many Bluetooth-powered smart devices as I do, you might have some trouble pairing certain gizmos with your Home Assistant hub if they’re spread out all over your living space. That’s where a Bluetooth proxy comes into the equation. Since the ESP32 supports Bluetooth connectivity, it can accept signals from typical BLE devices and forward them to Home Assistant over Wi-Fi – and that’s just the passive mode. Set it to active mode, and it can forward instructions from HASS to your Bluetooth lights, blinds, and other IoT paraphernalia.
For folks with the ESP32-C6 board, you can even put its 802.15.4 module to good use. On the Zigbee front, you can build a DIY router that relays messages between a coordinator node and typical smart devices. Or, you can go down the Thread path and build a radio co-processor that lets you control Thread-based smart home devices directly from Home Assistant, though you might want to invest in a U.FL antenna if you want its coverage area to include more than just a room or two.
There’s a lot more you can do with cheap ESP32 accessories
So far, I’ve only highlighted projects where you can use an ESP32 on its own. But its utility skyrockets once you toss additional sensors into the mix. A DIY weather station built from an ESP32 and a DHT22 (or better yet, a BME280) provides reliable readings for your HVAC automations, while the KY-037 sound detection sensor is great for trigger-action rules involving claps and other loud sounds. Alternatively, you can pick up a box of cheap sensors, and go ham on your ESP32 experiments.
- AITRIP
- UART, USB










