Enviro+ readings unrealiable

I’ve gone naked, and the results are in. I’m getting much more plausible readings to send to Luftdaten with no temp or humidity compensation necessary. Basically, I’ve removed the Enviro+ and have directly connected a stand-alone BME280 (ironically, a Pimoroni module) and directly connected the PMS5003.

The temperature is pretty-well bang on, and the humidity isn’t far off either. I also got in to the BME280 driver and mauled all of the settings to align it with the recommendations in the BME280 data sheet for weather monitoring: IRR Off, Force mode, x1 oversampling, and 1s sampling rates.

In my weather enclosure, the BME280 module is about 20 cm away from the Pi Zero, so it’s not going to get any heat soak from anywhere except the atmosphere. I also throttled-back the measurement loop to 20 seconds.

I’ve got a few more BME280 modules on the slow boat from China, and a PMS7003 as well. When they turn up I’m going to use the Circuitpython drivers and fiddle with the script to start sending Luftdaten the mean of the previous measurement cycles rather than just the raw data of the last measurement.

So, I’m happy now that I’ve got plausible readings to send up to Luftdaten (I imagine they’re be happier too) but a bit disappointed that the Enviro+ module has some design challenges, especially considering its price.

1 Like

Looks like you’re already executing the plan I had as well ;-) on that same boat are some sensors for me too, though I already received my SDS011. Already have some code / pics to share?

Sensor porn! lol.
Basically the BME280 is hooked up via the Pimoroni breakout board (part # PIM472) to the SDA and SCL (data and clock) pins, plus 3.3v and GND, via some 20cm female-to-female jumpers. The PMS5003 is hooked up via the same jumpers and an interface adapter (part #PIM477) that basically just converts the tiny ribbon connector in to some larger pin terminals. It’s sitting on the TX and RX pins, plus 5v and GND, as well as Reset (to Pin 27) and EN (to Pin 22).

It looks like it sounds - a Pi Zero hooked up to some boards via a bunch of wires. Pretty well all I’ve done is get rid of the Enviro+ hardware and leave all of the code in place.

As for the code - it’s a complete hack job on my part. The Pimoroni driver is coded in a very different style to the circuitpython driver, but it works, so all I did was change some of the parameters according to the ‘weather’ settings that are linked in one of my previous posts in this thread.

I also took the Luftdaten.py script and chopped out all of the unnecessary stuff now that I don’t have the Enviro+, namely the display-related functions and code as well as all of the temperature compensation code. Oh, and I put time.sleep(20) in the main loop to calm it down a bit.

The BME280 driver is in /usr/local/lib/python3.7/dis-packages/pimoroni_bme280-0.0.2-py3.7.egg/bme280/init.py if you’re trying to find it.

For my next iteration, I’ll use the circuitypython drivers for the BME280 and PMSx003 and write my own script to send the date up to Luftdaten. At each loop, I’ll just add the temp, humidity and pressure measurements to a list. When it comes time to sent it up to Luftdaten, I’ll just take the mean of each list, send it, clear the list, and start again. By taking the mean, I’ll be smoothing out the 20-second measurements to better account for how sensitive that little BME280 sensor is!

1 Like

Received the BMP180 today but the protective cap on the sensor seems to lack the protective cap on the sensor itself :-/

That’s pretty well what mine looks like. I have some more good news: My “calibrated” $30 temp/humidity meter turned up this morning (apparently accurate to +/-2% RH and .2C) and according to it, the measurements I’m getting from my stand-alone BME280 are basically spot on. Happy days.

I don’t believe there is supposed to be a cap on the sensor hole. It’s open to the air. My BMP280 had no cover.

Great news Dusty!

That small metal cap was what I expected. Bare chip would probably work just as well, but maybe more fragile? 🤔

Yes, the sensors are tiny and would be prone to damage if they weren’t covered. The hole is the compromise to allow air to flow in. A small bit of micropore filter over the hole would protect against dust.

This unit does have a filter cover. Note the warning at the end.

Another update on going naked: My second generic BME280 turned up this afternoon and I connected it to my spare PI using the CircuitPython BME280 drivers. The result? Amazingly accurate temperature and humidity readings. +/- 1% on humidity and +/- 0.5C for temperature as compared to my $30 handheld hygrometer.
So, I currently have my Pi Zero with a stand-alone Adafruit BME280 and the PMS5003 sending date to Luftdaten utilising the Pimoroni drivers that came with the Enviro+. The results are the same as my Pi3 rig, above - very accurate temp and humidity. I think this conclusively demonstrates that if you are thinking of using an Enviro+ for anything other than a testbed, or you need accurate temp and humidity readings for whatever purpose, consider using just natively-connected devices and the Circuitpython drivers, avoiding the Enviro+