---
title: "The SuperSensor 2.0: One Year Later"
description: "Updates and enhancements after a year of the SuperSensor"
date: 2025-09-01
tags:
  - DIY
  - Home Automation
---

## Keep Iterating

Well over a year ago I created [the SuperSensor all-in-one presence and voice control sensor](/posts/the-supersensor), marking the final evolution of my quest for a Home Assistant voice control satellite and environment/presence sensor. However, I had a lot of issues with that original revision over it's first year of operation, so this year I decided to iterate on it. Introducing SuperSensor 2.0, new and improved, which I've now been running for a few months and am happy to share.

## The Key Changes

There are 4 key changes from the SuperSensor 1.x to the 2.x:

### BME680 -> SGP41/SHT45

The original SuperSensor design leveraged the Bosch BME680 sensor to provide temperature, humidity, atmospheric pressure, and air quality reporting. At the time, this seemed like the perfect sensor for an all-in-one device, letting us truly monitor the environment in all aspects.

Unfortunately, this sensor ended up being a complete flop, and doing more research post-mortem, I found I was not alone. The main issue with this sensor was its IAQ functionality, the reason I went with the 680 over the 280. When using the official Bosch libraries with the non-IDF (Arduino) ESP framework, the VOC sensor would seem to work fine for days or even weeks at a time. However as it was left running, the IAQ value would creep up and up as the sensor continuously "re-calibrated" itself to the current environment, eventually reporting IAQ values of 500+ with no basis in reality. I originally speculated that this had something to do with the wildfire smoke last summer, but even over the winter the problem persisted. I ended up spending most of last summer, and several weeks this spring, tweaking and tweaking this sensor trying to get it to function properly, including a very long but ill-fated attempt to do custom IAQ calculations, first on my own and then with AI assistance. But even with all that, ultimately this part of the sensor proved to be utterly useless.

Air quality is something I care a lot about as an asthmatic with allergies, so I really wanted something that would work well in that regard. Thus, after more research, I settled on the Sensirion SGPXX line of air quality sensors. I initially started by testing the SGP30, but unfortunately the quality control of these sensors from AliExpress is utterly abysmal, and out of over 20 purchased, only ~10 worked anywhere close to reliably, and even those 10 I could not truly trust (are they reporting 0 VOC because there *is* 0 VOC, or because they borked again? Who knows!). I then moved to the SGP41, which is used in several actual commercial products such as the AirGradient One, and thus provides a more reliable experience, including open-source algorithms for calculating VOC concentrations and the ability to leverage the aforementioned product as a reference for calculating other values from the sensor. Overall this has been a very positive change, and I've found the values these sensors report both consistent and sensible, a winning combination in my book.

To make things even more compact, I also moved to the Sensirion SHT4x line of temperature/humidity sensors, specifically the SHT45 which is the most accurate one available. While I could have stuck with the Bosch BME280 line, I ultimately found that atmospheric pressure wasn't all that useful on a room-by-room basis (and because I got a proper Ecowitt weather station for that instead), and I found that actually finding BM*E*280's versus BMP280's was incredibly hard due to constant mislabelling on AliExpress, Amazon, and elsewhere. Using two GY-form-factor sensors also let me make a much more compact sensor as mentioned below.

I was actually so happy with these sensors that I even went so far as to [design a "micro" air quality sensor](https://github.com/joshuaboniface/microenv) using just the SGP41 and SHT45, along with an ESP32-C3, for use in other places like my 3D printer exhaust filter and my server rack.

### SR602 -> AM312

I found after many months of testing that the SR602 PIR sensor was hopelessly error-prone, misfiring dozens to hundreds(!) of times a day, making it functionally useless. After quite a bit of reading, I decided to swap to the AM312 instead. Despite this PIR sensor sticking much further out, reviews seemed generally positive. That said, my experience so far has been about the same as the SR602, with the PIR sensor misfiring *constantly* and being generally useless, and by the time I discovered this I had already committed to the board design including the swapping of Out and Ground that the AM312 requires. Since I mostly use Radar for tracking presence, I don't care too much, but this is worth keeping in mind - the compact cheap PIR modules are basically useless.

Perhaps a future revision will move to name-brand modules for improved reliability, and with the new socketed design below, this might be possible without a board change; but these modules are very expensive so I'm not sure it's worth it when the HLK-LD2410C works very well for quickly detecting presence.

Update 2025-09-25: After more digging, researching, and testing, I found that the problem here was very simple: drafts. These cheap PIR modules misfire constantly if there is any air movement around them, as the temperature fluctuations wreak havoc on their sensing modules. The solution was a case! After designing, printing, assembling, and installing [the newly designed case unit](https://github.com/joshuaboniface/supersensor2/tree/master/case), PIR misfirings with the AM312 have dropped to zero, at least after 48 hours of testing.

### New PCB Layout

With the updated sensor list, I redesigned the PCB from scratch. This let me optimize several things: the form factor is now more square at ~57.5 x 50mm, a little taller but less wide than the original model; it now features 3 rows of components instead of 2-with-overhangs; and I was also able to completely redesign the traces and optimize the layout of various parts and their pins on the ESP32, providing less noise and cleaner routing, especially for power distribution. I really like the look of the new sensor design a lot more with my bare-PCB uses.

![Layout](layout.png)

### Code Improvements

I've made several fairly major revisions to the SuperSensor over the last year on the ESPHome code side. Mostly, this has involved tweaking the voice handling functionality and fixing quirks and bugs when the units restart and connect to Home Assistant. I've also changed the framework back and forth a few times, mostly while troubleshooting the BME680, but have finally settled on ESP-IDF for the final v2.0 release; IDF simply performs a lot better, keeps the ESP cooler, and provides more flexibility. We've also been able to benefit from multiple improvements in ESPHome, such as MicroWakeWord, which have significantly improved voice performance and reliability.

The updated ESPHome code is [available over on GitHub in a new repository](https://github.com/joshuaboniface/supersensor2) to keep it separate from the 1.x code. The old 1.x code is now deprecated and I will not be updating it further, with all enhancements now on the 2.x version.

### A Case!

I've also finally created a case for the SuperSensor 2.0. The design and assembly instructions [can be found in the GitHub repository here](https://github.com/joshuaboniface/supersensor2/tree/master/case).

This case helps with several aspects:

* The aesthetics are better, at least if you don't like exposed PCBs.

* It aids in PIR reliability as noted above.

* It helps with weatherproofing, at least somewhat, for my outdoor sensors.

* It provides more reliable mounting options.

The case design took a lot of trial-and-error to put together, and does have some tradeoffs: it's bulkier, the TSL light sensor is diminished a fair bit, and the SHT temperature reads even higher than before, but these can all be worked around, and the benefits especially with the PIR definitely outweight the drawbacks.

![Case Design](case.png)

## Updated Parts List for v2.0 (Prices as of May 2025)

## Parts List
 
| Qty   | Component          | Cost (2025/05 CAD, ex. shipping) | Links |
|-------|--------------------|----------------------------------|-------|
| 1     | GY-SGP41           | $11.08                           | [AliExpress](https://www.aliexpress.com/item/1005006746827606.html)  |
| 1     | GY-SHT45           | $5.67                            | [AliExpress](https://www.aliexpress.com/item/1005008175340220.html)* |
| 1     | AM312              | $1.97                            | [AliExpress](https://www.aliexpress.com/item/1005008067324301.html)  |
| 1     | TSL2591            | $4.59                            | [AliExpress](https://www.aliexpress.com/item/1005008619462097.html)  |
| 1     | HL-LD2510C         | $4.79                            | [AliExpress](https://www.aliexpress.com/item/1005006000579211.html)* |
| 1     | INMP441            | $2.93                            | [AliExpress](https://www.aliexpress.com/item/1005002902615623.html)  |
| 1     | ESP32 HW-395       | $6.67                            | [AliExpress](https://www.aliexpress.com/item/1005006019875837.html)* |
| 2     | RBG LED            | $0.09 ($9.12/100)                | [Amazon](https://www.amazon.ca/dp/B09Y8M2PKS) |
| 1     | 470Ω resistor      | $0.08 ($7.99/100)                | [Amazon](https://www.amazon.ca/dp/B08MKQX2XT) |
| 2     | Female pin header† | $1.59 ($15.99/10)                | [Amazon](https://www.amazon.ca/dp/B08CMNRXJ1) |
| 1     | Custom PCB (JLC)   | $0.69 ($6.89/10)                 | [GitHub](https://github.com/joshuaboniface/supersensor) |
| **TOTAL** |                    | **$41.74**                           |       |
 
`*` Ensure you select the correct device on the page as it shows multiple options.
 
`†` One of these sets is optional, and is useful if you do not want to solder the individual sensors directly to the board. You can also use individually sized (3-, 4-, 5-, and 6-pin) headers for the individual sensors should you wish for a neater result, though this is more expensive.

Overall, the cost is about $2 more than the original SuperSensor, despite the sensor changes, as several other parts - namely the ESP32 - have dropped in price over that time.

## Layout, Assembly, and Final Product

One noteworthy change to the assembly of the SuperSensor 2.x is that for this version, I'm socketing every part on every sensor. My initial testing batch did feature soldered components on the front like with the SuperSensor 1.x, but between de-soldering parts on those original boards, and then de-soldering some *again* during the R&D phases, I found it far easier to just socket everything going forward. This adds a negligible amount to the parts list but provides a lot of convenience if I need to swap a defective component or make a change (for instance from the SGP30 to the SGP41).

And now for the pictures! Apologies for the potato quality; my phone camera simply refuses to properly focus.

Here is a completed board.

![Completed Board](completed.jpg)

Here's an overall shot showing the breakout of all the parts.

![Parts](parts.jpg)

Here is the blank PCB, from both the front and back. The board does reference the SGP30, despite be now using the SGP41, but these modules have the same pin-out and form factor. The design on my GitHub uses a more generic `SGPXX`/`SHTXX` labelling scheme.

![Blank PCB Front & Back](pcb.jpg)

Here is one of the boards in its final mounted location, angled to provide perfect coverage of my garage. Due to where it sits, I had to bodge a makeshift antenna extension onto this one to get a decent WiFi connection, but it works well and this hasn't been needed for any of my other ones.

![Mounted Board](mounted.jpg)

And in comparison to the previous revision in the same location:

![Mounted Board](mounted-old.jpg)

Finally, here's it in the newly-designed case as well:

![Mounted Encased](encased.jpg)

Here is all the information and configuration the SuperSensor provides in Home Assistant.

![Home Assistant Dashboard](dashboard.png)

That is quite a lot of information, so in my actual dashboards I usually only show the most relevant parts for that particular use-case, like this one for my garage sensor.

![Room Dashboard](room.png)

But other elements are used in various automations, templates, and other places within Home Assistant as well.

## What's Next?

So far I've been very happy with v2.0, and I've made a total of 15: 9 to replace all of my existing sensors, and 6 more as spares or to place in other areas of my house (I haven't, but I might). I was able to de-solder and transfer most of the existing sensor modules to avoid waste, and the socketed ESP32s made swapping those a breeze.

What does the future hold? One thing I'd love to do is make this even more compact by including all the individual components onto the PCB as SMD, avoiding needing through-pin modules. This would make things much more compact and sleek. Perhaps this will be v3.0, but only time will tell!

Edit 2025-09-25: We now have a case! See above. <strike>I've also been constantly contemplating a case for the SuperSensor, but ultimately 3D modelling has not been something I've been particularly interested in. I personally like the bare-PCB look, especially with the black PCB and variously-coloured sensor modules, and while I think a case would be possible, the effort required to properly measure and design it is beyond my modelling skills. If someone would like to contribute one I'd love to see it - my vision has always been for a black cover with holes for the sensor inlets, and then a clear bar along the bottom over the LEDs and microphone to create a light-bar effect. Maybe I'll actually get around to it at some point eventually, but for now I haven't.</strike>

Happy sensing!

