This is part one of a two-part story of collecting temperature and humidity data from various locations in my house. This describes the fully custom design of a sensor with an e-paper display, and USB-C connector for power.

I want to finally write about my setup for collecting data from temperature and humidity sensors around the house to display time series on a grafana server, and I thought I’d start by describing the fun but ultimately abandoned attempt to roll my own WiFi sensor.

In part 2 I discuss the ultimate solution based on off-the-shelf sensors and an RTL-SDR receiver to collect the data.

The design

The sensor uses an ESP32 module as the controller and WiFi radio, an AMS ENS210 for temperature and humidity sensing, and a 1.44” Pervasive Displays e-ink display. It has a USB-C connector sticking out that back, with the idea that it could be plugged into a USB-C charger on any outlet for easy mounting and no need for batteries.

Once I got it all working, I found that it had a significant self-heating problem. Even after enabling sleep mode on the ESP32, and only powering on to sample every minute, I still got 5F+ of rise. I did a second revision of the board, with the temperature sensor placed onto a cut-out island at the bottom, with an air intake next to it so that – hopefully – convection would constantly pull fresh air in over the sensor and I could measure the ambient temperature, not the elevated value inside the case. This helped; with the redesign I got about 2F rise above ambient.

Not actually a good plan

I figured this would have to be good enough, and put the first one into operation. But then two things happened: first I bought some off-the-shelf 400MHz wireless sensors that are way cheaper than I could build the custom sensor for, and then the e-ink display suddenly stopped working. The sensor still reported fine over the WiFi link, but a bit of debugging seem to suggest something had gone wrong with the display. The COTS sensors have a lot to recommend them: e.g. they are cheap, they can be read easily with a RTL-SDR, no WiFi configuration necessary. So ultimately, while it was fun to bring up the e-ink display and this was a neat project, it didn’t make sense to keep using it.

Since then, I’ve been using a small single-board computer and RTL-SDR to collect data from a number of sensors into a Prometheus database, and it has been simple and reliable. When I wanted to add a new sensor, I didn’t have to order parts or build anything, I just ordered another COTS sensor.