I2C expansion from Photon Sparkfun Weather Shield

So I got the Sparkfun I2C BME280/CCS811 sensor combo board. I tested it by itself with a stand-alone Photon and it worked OK. But when I connected the combo board to the I2C port on the Sparkfun Weather Shield, the BME280 part still worked but the CCS811 returned nothing but zeroes.

The sensor code is identical in both programs. I cheerfully admit I know less than nothing about I2C but I do see that the combo board has I2C pullup resistors enabled and so does the Weather Shield.

Do I perhaps need to disable one set of those? If so, which one, or does it matter? Or is the problem elsewhere?

All non-RTFM-style replies would be greatly appreciated.

You can use this project to scan your I2C bus for all accessible devices
https://go.particle.io/shared_apps/58cda34c77e5d3ec090004fe

I’d do that with and without the combo board to see whether the Weather Shield already uses the same address as the CCS811.

Are you powering the combo board from 3v3 or Vin? The CCS811 can only copy with 3.3V (it might resist 5V for a while, but eventually it will fail) - also the pull-ups can only go to 3.3V.

2 Likes

I should have mentioned that. I did do an I2C scan and it does show four devices (the temp. and baro. on the Weathershield, plus the BMEand CCS on the combo board) with four seprarate, non-conflicting addresses.

I’m powering the combo board off the 3V3 pin on the Weather Shield. And I’m getting correct readings from the BME280 on the combo board, but I’m getting nothing but zeroes from the CCS811.

But when I connect the combo board to a different Photon, not connected to the Weather Shield, both the BME and the CCS work OK. I tried changing the CCS811 I2C address from 0x5B to 0X5A but that didn’t help.

The only thing I can think that’s different is that when I try to run the combo board off the Weather Shield, the Weather Shield has its own I2C pullup resistors enabled. (The combo board also has its own I2C pullups enabled). But it is odd that one of the sensors on the combo board works but not the other, but only when running off the Weather Shield.

While having two sets of pull-ups isn’t recommendet I’m not sure whether this is the actual problem especially if the CCS811 board uses the “default” 10k pull-ups. In parallel with another set of 10k or 4k7 this shouldn’t create an issue.

I’ve also played with different CCS811 boards and on some I had to pull the WAK pin LOW while on others they were pulled LOW via on-board pull-downs. Also make sure the RST pin isn’t pulled LOW.

Other than that I can’t think of anything and have not got a Weather Shield to try it with my CCS811s.

Well I tried cutting the traces for the pullups on the combo board. That didn’t help. The BME works, the CCS does not.

RST and WAK are both unconnected. And the board does work that way when conneted to a standalone Photon. It just won’t play with the Weather Shield.

I’m checking the ccs.begin and bme.begin return values from the Weather Shield code, and they both say they’re OK. They’re just not sending any data.

UPDATE: I’ve opened a support request with Sparkfun.

I had the idea to try running the standalone CCS811 example code on the Weather Shield and to my surprise, it works fine. That means the problem has to be something in my weather station code. But where?

I triple-checked to be sure that I copied all of the relevant initializations from the example code into my own code. But when I run my own code on the Weather Shield, there’s no data from the CCS811. When I run the example code from the CCS811 library on the Weather Shield, it works fine.

I’m really at a loss as to how to figure out how to track this down. My own weather program is nearly 3000 lines long. I’ve even moved the call to the CCS811 to the very beginning of my own code and it still won’t report anything but zeroes.

I could really use some suggestions here.