Pimoroni Enviro + PiicoDev Adapter

Looking at mounting the Pimoroni Enviro and an additional PiicoDev sensor on a Pi 4, via the HAT Hacker.

Given that some pins are already used by the Enviro, will the PiicoDev adapter clash with it or at all compatible? I’m a plug-and-pray novice, so have no idea whether the I2C pins can be shared.

Any information or alternative suggestions would be very much appreciated, thanks!

– Jono


Hey Jono,

Excellent question!
The I2C bus can be shared as long as there aren’t any address conflicts, the Pimoroni Enviro already is using a couple of I2C sensors (check out this awesome resource: Enviro Plus at Raspberry Pi GPIO Pinout)
Since the PiicoDev adapter breaks out the two I2C communications pins (SDA - Data and SCL - Clock) along with the power connections you’ll be all good in-terms of the pins.

As for the senrors themselves, some of the PiicoDev range allows for new addresses to be selected through a solder pad (this would be very important for the BME as its normal address conflicts with one already on the Enviro, but can be changed to a new address).

Here’s a guide on I2C with a different sensor that covers most of the nitty-gritty: https://core-electronics.com.au/tutorials/I2c-with-raspberry-pi.html



Thanks Liam!

Useful information, the conflicting addresses now makes sense to me. Will look into the guides and go from there.

– Jono

No worries Jono!

If you have any questions feel free to reply for some more clarification and we’ll try our hardest!

1 Like

Looks like the default address for the PiicoDev BME280 is 0x77, and the Enviro address is 0x76, cool! Can’t wait for the BME280 to come back in stock.

Just to double check, I’ll need to solder a 3-pin header for the jumper setting right? Will need to find where my soldering gun went…

– Jono

Hi Jono,

Not quite Michael has designed many of the PiicoDev modules so that you can cut a link, or bridge two solder pads to change the address or disable some components.

This address is set according to this connection of solder pads.

I’ve also linked Michael’s explainer below.

1 Like

The kit arrived, pretty much plug-and-play (pray), so far so good and no smoke…

I’ve got the Pimoroni Enviro and PiicoDev TMP117 working together, no address clashes. Not too sure about the PiicoDev BME280 (my preferred option but no stock) though, the default address is 0x77 (0x76 on the Enviro), but the following line of code in the Pimoroni library is a bit of a worry:


Not entirely sure what’s the implication of I2C_ADDRESS_VCC on 0x77.

Few observations:

  • Pimoroni Enviro is certainly very sensitive to the temperature of surround components (read the Pi), the temperature reading is quite a way off and Pimoroni’s Enviro sample code had some correction factor to compensate for the CPU temperature, not ideal and probably not very accurate for different setup
  • with a right angle GPIO header extender and having the Enviro sitting vertical to the Pi board made no difference, the conducted heat is probably still too great
  • with a 40-pin GPIO extension ribbon cable and having the Enviro far removed from the Pi board works a treat - how to solve the imposing ribbon cable is another matter…
  • the PiicoDev TMP117 for now is used as a reference temperature, with the Enviro on ribbon and the correction factor removed from the code, the two readings are pretty close

Anyway, will share more details when I get everything sorted, basic integration with Apple HomeKit (which is the main goal of this project) is progressing well but need a bit more refinement.

Thanks guys for your help thus far, it’s very helpful and much appreciated!

– Jono


Hey Jono,

No worries, nothing to worry about, the default address of our PiicoDev BME280 is configured to 0x77 or 0x76 depending on what ADR is pulled to (the particular standard depends on the board, info should appear in their specs or datasheets). The Pimoroni BME280 also uses these addresses too:

The I2C_ADDRESS_VCC (VCC = Voltage Common Collector) refers to the address of the alternative address for the BME280 when the ADR connection is closed, this way, if you have two identical BME280 on the same I2C bus, the script can distinguish between them, you can see at line 123 in the class how these addresses are passed into some instance of the class and how they interact.


Be sure to let us know how you go with it!