Enviro+ - very disappointed - useless?

sorry for the headline, but well… I just got 2 enviros, spend 70bucks on them and… well, step by step:
I got a fresh SD card with raspberian for a fresh raspberry zero W. Plugged that thing together and booted up. I used the step by step guide.
After the /install.sh, the first thing was


I solved this by 30min googling and “pip install spidev” …

Then, I went to the examples (I am not allowed to post another picture).:

pi@raspberrypi:~/enviroplus-python/examples $ python all-in-one-no-pm.py
2020-03-04 19:25:44.339 INFO     all-in-one.py - Displays readings from all of Enviro plus' sensors
Press Ctrl+C to exit!

Traceback (most recent call last):
  File "all-in-one-no-pm.py", line 57, in <module>
    font = ImageFont.truetype(UserFont, FontSize)
NameError: name 'FontSize' is not defined

Maybe this one?

pi@raspberrypi:~/enviroplus-python/examples $ python gas.py
2020-03-04 19:26:14.866 INFO     gas.py - Print readings from the MICS6814 Gas sensor.

Press Ctrl+C to exit!


Traceback (most recent call last):
  File "gas.py", line 20, in <module>
    readings = gas.read_all()
  File "build/bdist.linux-armv6l/egg/enviroplus/gas.py", line 79, in read_all

  File "build/bdist.linux-armv6l/egg/enviroplus/gas.py", line 50, in setup

  File "/usr/local/lib/python2.7/dist-packages/ads1015-0.0.5-py2.7.egg/ads1015/__init__.py", line 167, in set_mode
    self._ads1015.set('CONFIG', mode=value)
  File "/usr/local/lib/python2.7/dist-packages/i2cdevice-0.0.6-py2.7.egg/i2cdevice/__init__.py", line 215, in set
    self.read_register(register)
  File "/usr/local/lib/python2.7/dist-packages/i2cdevice-0.0.6-py2.7.egg/i2cdevice/__init__.py", line 183, in read_register
    self.values[register.name] = self._i2c_read(register.address, register.bit_width)
  File "/usr/local/lib/python2.7/dist-packages/i2cdevice-0.0.6-py2.7.egg/i2cdevice/__init__.py", line 283, in _i2c_read
    for x in self._i2c.read_i2c_block_data(self._i2c_address, register, bit_width // self._bit_width):
IOError: [Errno 121] Remote I/O error

Really?
but… found something that I could actually run:

pi@raspberrypi:~/enviroplus-python/examples $ python compensated-temperature.py
2020-03-03 23:35:56.899 INFO     compensated-temperature.py - Use the CPU temperature
to compensate temperature readings from the BME280 sensor.
Method adapted from Initial State's Enviro pHAT review:
https://medium.com/@InitialState/tutorial-review-enviro-phat-for-raspberry-pi-4cd6d8c63441

Press Ctrl+C to exit!


2020-03-03 23:35:57.168 INFO     Compensated temperature: 10.46 *C
2020-03-03 23:35:58.179 INFO     Compensated temperature: 28.87 *C
2020-03-03 23:35:59.191 INFO     Compensated temperature: 28.97 *C
2020-03-03 23:36:00.202 INFO     Compensated temperature: 29.11 *C
2020-03-03 23:36:01.214 INFO     Compensated temperature: 29.25 *C
2020-03-03 23:36:02.225 INFO     Compensated temperature: 29.24 *C
2020-03-03 23:36:03.237 INFO     Compensated temperature: 29.24 *C
2020-03-03 23:36:04.249 INFO     Compensated temperature: 29.23 *C
2020-03-03 23:36:05.260 INFO     Compensated temperature: 29.18 *C

well… no… I don’t have 29 degree here.

Help me please… did I got ripped off here? It is definately far away from working.

Thanks!

I would run curl -sSL https://get.pimoroni.com/enviroplus | bash if you haven’t already.
Also make sure i2c and SPI are enabled in Raspberry Pi Configuration.
If your running Raspbian Lite enable them via raspi-config.

Maybe also try running the examples in python3 instead of python2.

This is a recent bug recently reported on GitHub, should be font_size I think.

Yes Enviro+ is a flawed product because the RPI0 heats the board and makes the temperature read high and the humidity low. You need to separate them with a ribbon cable or mount them at right angles and blow on the back of the Enviro+ with a fan.

The gas sensors are more affected by humidity than gas and give pretty random results.

Thanks for the feedback. It felt promising, but didn’t succeed.
I removed the existing folders all together and started new just with the curl command. I also have the i2c enabled by the rasp-config .
I double checked the boot/config.txt because of https://learn.sparkfun.com/tutorials/qwiic-kit-for-raspberry-pi-hookup-guide/troubleshooting without success.

dtparam=i2c_arm=on
dtparam=i2c_arm_baudrate=10000
dtparam=i2s=on
dtparam=spi=on

Python3 requires a module “RPi” which I cannot get installed - I correct myself, adding pip3 install rpi.gpio (instead of just rpi) does that. but I run in quite the same error:

pi@raspberrypi:~/Pimoroni/enviroplus/examples $ python3 gas.py
2020-03-04 22:27:51.106 INFO     gas.py - Print readings from the MICS6814 Gas sensor.

Press Ctrl+C to exit!


Traceback (most recent call last):
  File "gas.py", line 20, in <module>
    readings = gas.read_all()
  File "/usr/local/lib/python3.7/dist-packages/enviroplus-0.0.1-py3.7.egg/enviroplus/gas.py", line 79, in read_all
  File "/usr/local/lib/python3.7/dist-packages/enviroplus-0.0.1-py3.7.egg/enviroplus/gas.py", line 50, in setup
  File "/usr/local/lib/python3.7/dist-packages/ads1015-0.0.5-py3.7.egg/ads1015/__init__.py", line 167, in set_mode
    self._ads1015.set('CONFIG', mode=value)
  File "/usr/local/lib/python3.7/dist-packages/i2cdevice-0.0.6-py3.7.egg/i2cdevice/__init__.py", line 215, in set
    self.read_register(register)
  File "/usr/local/lib/python3.7/dist-packages/i2cdevice-0.0.6-py3.7.egg/i2cdevice/__init__.py", line 183, in read_register
    self.values[register.name] = self._i2c_read(register.address, register.bit_width)
  File "/usr/local/lib/python3.7/dist-packages/i2cdevice-0.0.6-py3.7.egg/i2cdevice/__init__.py", line 283, in _i2c_read
    for x in self._i2c.read_i2c_block_data(self._i2c_address, register, bit_width // self._bit_width):
OSError: [Errno 121] Remote I/O error

Do you have another idea/approach?

I can get the ribbon cable if that fixes the gas sensor as well. Does it?

No the gas sensors need to compensation for humidity and I think ambient temperature and pressure. They seem to mainly mirror humidity. And there seems to be no way to relate them back to absolute numbers.

This is what it the Enviro+ does in Tenerife during Calima events that bring sandstorms.

Duing a Calima hot dry air blows from the east bringing sand with it. You can see humidity drops and dust particles rise but the gas sensors go bonkers. They just seem a mirror image of the humidity.

I’m out of suggestions. I don’t own an Enviro+, just so you know. I have a couple of BME680’s in use, but those Pi’s aren’t running Buster. Stretch I think? They work just fine so I leave them as they were when I did my last clean install and setup.

I lied, I do have a few more questions. =)
Do you have the Enviro+ “firmly” seated onto the Pi’s GPIO? Press fit, not just sitting on top loosely?
If its plugged into a Pi Zero, did you solder the header on yourself?
IO error usually means something is messed up on i2c, if you run
sudo i2cdetect -y 1 what do you get?
You should get just the addresses for the sensors on the Enviro+
0x49: ADS1015
0x76: BME280
0x23: LTR559

it looks like I have 2 out of 3:

pi@raspberrypi:~/Pimoroni/enviroplus/examples $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --

It is attached very firmly and I bought the Pi’s with GPIO already attached.

I already mentioned that I bought 2 of them, so I went ahead and replaced the Enviro+ with the other one. same issue.

my /boot/config.txt:

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on           
dtparam=i2c_arm_baudrate=10000
dtparam=i2s=on                                                                                           
dtparam=spi=on

my /etc/modules

snd-bcm2835
i2c-bcm2708
i2c-dev

cat /proc/modules |grep i2c

i2c_bcm2835 16384 0 - Live 0x00000000
i2c_dev 16384 0 - Live 0x00000000
i2c_bcm2708 16384 0 - Live 0x00000000

@nophead could you run i2cdetect on your enviro and post back what you see?
My Linux skills are NOOB level so most of that etc/modules stuff is over my head.

just FYI, I also replaced the raspberry Pi and installed raspberian buster lite followed by apt update & upgrade & reboot & raspi-config & curl -sSL https://get.pimoroni.com/enviroplus | bash

just to end up at exactly the same situation. I’ll contact support to see if they can help

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- 49 -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --

Thanks! I am missing that one there. Would you mind showing me your /boot/config.txt: and /etc/modules aswell? thanks!

pi@environ-pi:~ $ cat /boot/config.txt
# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
dtparam=spi=on

# Uncomment this to enable the lirc-rpi module
#dtoverlay=lirc-rpi

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

[pi4]
# Enable DRM VC4 V3D driver on top of the dispmanx display stack
dtoverlay=vc4-fkms-v3d
max_framebuffers=2

[all]
#dtoverlay=vc4-fkms-v3d

# NOOBS Auto-generated Settings:
hdmi_force_hotplug=1
start_x=0
gpu_mem=128
enable_uart=1
dtoverlay=pi3-miniuart-bt
 cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev

Also

pi@environ-pi:~ $ cat /proc/modules |grep i2c
i2c_bcm2835 7818 3 - Live 0x00000000
i2c_dev 7171 6 - Live 0x00000000

Thankyou @nophead weird that the ADS1015 isn’t showing up for Him? Do you know if that used for the particulate matter sensor? And do you have said device plugged into yours?

@phil Just want to confirm these are Enviro**+** and not just Enviro’s?
I ask because the Enviro (not the +) doesn’t appear to have the ADS1015.

No it isn’t used for the particulate matter sensor. That is a self contained unit with a UART serial interface. I do have one connected.

Ok, thanks for the info. Will have to try and remember that.

1 Like