Problem I2C Sparkfun Weather station

HI,
I’m using an Electron and BME280, If I connect in a bread board all works,but when I connect BME or SI1145 through Sparkfun the sensors are not working

I checked the wires and all have signal and voltage

any idea why?

Thank’s

Eduard

Let me ping someone that might be able to help, @rickkas7 are you able to assist?

Kyle

You need to give more explicit information about your problem. What do you mean by “when I connect BME or SI1145 through Sparkfun the sensors are not working”? What Sparkfun product are you talking about, and what does “not working” mean? Do you get wrong values? No values? Be specific.

1 Like

Hi

IThank you @KyleG for your ping.

I’m using SparkFun Photon Weather Shield: https://www.sparkfun.com/products/13674 with my Electron with the basic library script and there is no way to connect, the script says “didn’t find si1145”, I tried to test with a bread board and is working perfect

PINS on D0 and D1

Thank’s

#include "Adafruit_SI1145.h"

Adafruit_SI1145 uv = Adafruit_SI1145();

void setup() {
  Serial.begin(9600);
  
  Serial.println("Adafruit SI1145 test");
  
  while(! uv.begin()) {
    Serial.println("Didn't find Si1145");
    Particle.publish("UV", "Didn't find Si1145", PRIVATE);  
    delay(1000);
  }

  Serial.println("OK!");
}

void loop() {
  Serial.println("===================");
  Serial.print("Vis: "); Serial.println(uv.readVisible());
  Serial.print("IR: "); Serial.println(uv.readIR());
  double vari=uv.readVisible();
 Particle.publish("Vis", String(vari), PRIVATE);  
  
  // Uncomment if you have an IR LED attached to LED pin!
  //Serial.print("Prox: "); Serial.println(uv.readProx());

  float UVindex = uv.readUV();
  // the index is multiplied by 100 so to get the
  // integer index, divide by 100!
  UVindex /= 100.0;  
  Serial.print("UV: ");  Serial.println(UVindex);
Particle.publish("UV", String(UVindex), PRIVATE);  
  delay(1000);
}

Hi @ecabanas

The most common reason for problems like this is forgetting to install pull-up resistors on D0 and D1 for the i2c bus. Particle devices always need them and sometimes they are on the break-out board for the sensor and sometimes not.

Have you tried adding pull-up resistors?

1 Like

Hi

No i did not put a resistor, what resistor value do you suggest to me?

Thanks

@bko, the Sparkfun weather shield has pull-ups already onboard:

I2C Pull-ups

Many SparkFun I2C Breakouts have solder jumpers for disabling the pull-up resistors necessary on most I2C designs. The Photon Weather Shield is no different. If you already have a sensor that has pull-ups, you can disable them on the shield by cutting the traces with a hobby knife. Or, if you would rather leave the shield as is, you can disable the pull-ups on every I2C you add to the bus. The important thing to remember is that only one device on the bus needs to have its pull-ups active. All others should be disabled.

@ecabanas, I believe the issue is that the SI1145 and the onboard MPL3115A2 have the same I2C slave address (0x60).

2 Likes

Hi @peekay123

First of all, thank’s for your help. Yes now, I’m looking that the 2 sensors has the same address. As I’m using a BME280(press,hum & temp) for external use, I did not need MPL3115A2.

Is it possible to cut the traces from voltage and disable the MPL3115A2 sensor? or there is another “polite” way to do that? :wink:
Is it possible to change the address from SI1145?

Thank’s for your patience.

Eduard

@ecabanas, Unfortunately, the address of he SI1145 cannot be changed. Have you considered the TSL2561 instead of the SI1145 as a light sensor? Its I2C addressing would not conflict with the MPL3115A2.

Otherwise, you will need to cut the I2C or power traces to the MPL3115A2 to avoid conflicts.

3 Likes

HI @peekay123

Now I’m checking to hard disable (cutting the wires) and the Si1145 is working great!

Thank’s for your help and patience

Eduard

1 Like