Posts for 2026 May
New project: playing with ESP32s
Post by Nico Brailovsky @ 2026-05-21 | Permalink | Leave a comment
I spent about 15 minutes not knowing what to do with my life after I finished my last project, then opened up my box of ESP32s and decided to start a new one. This time I'm building a presence sensor.
When I sit down to watch TV, I need to configure the lights in the correct way (there is a correct way), the audio profile, the TV input, even the correct heating settings. I can do all of that from my phone, or even better, from a Zigbee button, but I decided that's still too much work and it should all happen automatically. When I sit down to watch TV, everything should automatically be set up the way I like it. Because I don't live alone, when my wife sits down to watch TV it should be set up the way she likes it. How hard could that be?

Started with a few basic components: a battery, a USB/LiPo charger, and the ESP32. Above, a "proof of life", showing that I can flash an LED from either battery power, or from USB power. I found later that buying an ESP with battery management is actually cheaper than buying an ESP+battery manager, but I already have these components and I'm not planning to waste them. Since I can flash an LED, surely that's enough to work on the industrial design of my new sensor.

Now that I have a 3D printer, nothing can stop my mad ID skills. Except a few mm of bad alignment in my 3D printer. I'm not too unhappy with the results, though, and here's version P0 of my presence sensor:

The assembly here looks pretty but the picture is a bit of a lie, as the sensor doesn't do much yet. The firmware is in its early stages, although it can already connect to an MQTT server and broadcast its battery status. The idea is to pair my phone over Bluetooth, and then use it as an identification mechanism, plus the PIR sensor to wake up the device (did I mention the battery is tiny?).
I don't know how useful this sensor will be: the battery seems quite small, and I haven't done any power measurements yet to estimate the lifetime of the device between charges. For now, it's been a good experiment to learn to use my 3D printer, and to start planning V2 of this sensor.
As for the identification part: I managed to coax my phone into automatically connecting to my sensor by declaring the Bluetooth interface as an input device, and the identification part seems to work remarkably well: by reducing the TX power of the ESP, I can get a useful radius of about 3 or 4 meters, enough to put one of these in a room and know who is in there. I can't wait to find out what this device will do once both me and my wife sit down to watch a movie together!
Homeboard: Complete
Post by Nico Brailovsky @ 2026-05-09 | Permalink | Leave a comment
This is an extremely rare occurrence: I have finished a project!

I have now completed my Homeboard project. This doesn't mean there are no bugs (although tactical systemd unit restarts take care of most known bugs), and it doesn't mean I won't ever build new features (some day I'll make it boot over LAN). It does mean I achieved all of the initial objectives I had for this project (or have, at least, clever workarounds for missing features). It is now complete and stable enough that I don't feel too ashamed of calling it done. Of course, the project is also built in an extensible way so that I can add new (software!) features cheaply.
Looking back:
- The project took 2 years to complete
- The feature I'm sad about not achieving: buttons! Having a physical interface to interact with the device is nice, but the cables in my assembly proved too fiddly to work reliably. I did add a QR code to the display to quickly open the web remote control, however, so I can live without it.
- The feature I'm most proud of: SVG overlays. This was a pretty brilliant idea, if I may say so myself. Running on a Raspberry Pi Zero over PoE, the device is very compute-constrained. This means no fancy HTML or React rendering. Using SVG, I can still overlay arbitrary data and easily extend it, while keeping the device software lightweight enough the platform.
- The best bug: a bad mmWave sensor placement. It picked up occupancy signals from the display, meaning the panel would be in an on/off loop.
You can build your own, extensive instructions are available in the project's repo.