Issues using multiple BME280 sensors over SPI

Hello. I am currently working on a project using an Arduino Mega (ATmega2560) with BME280 sensors to collect temperature, humidity, and pressure. I am also using an RS232 to TTL converter to collect lab scale data, and the ethernet shield 2 for to display live data and save to an SD card.

The issue I am having is using multiple BME280 sensors over SPI. I am opting for SPI for the longer cable length, and I am currently using 8-pin M12 cables to transfer the data. I would ideally like to use four BME280 sensors simultaneously, however I get erratic readings when using more than one. Depening on the number of sensors attached, I get anywhere from 20 degrees to 140 degrees off from the readings. The cable lengths are roughly 1m each, with about 0.25 M of wires coming from the M12 receptacles mounted on my enclosure to a solder board.

I have been able to get multiple BME sensors working with longer M12 cable lengths before, but I believe the issues are arising from the ethernet shield since it also uses SPI for communication. The issue applies even when I use the example sketch for the BME sensors below:

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define BME_SCK 7
#define BME_MISO 6
#define BME_MOSI 5
#define BME_CS 4
#define BME_CS2 3
#define BME_CS3 2
#define BME_CS4 1

#define SEALEVELPRESSURE_HPA (1013.25)

//Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);    // software SPI
Adafruit_BME280 bme2(BME_CS2, BME_MOSI, BME_MISO, BME_SCK);  // software SPI
Adafruit_BME280 bme3(BME_CS3, BME_MOSI, BME_MISO, BME_SCK);  // software SPI
Adafruit_BME280 bme4(BME_CS4, BME_MOSI, BME_MISO, BME_SCK);  // software SPI

unsigned long delayTime;

void setup() {
  Serial.begin(9600);
  while (!Serial)
    ;  // time to get serial running
  Serial.println(F("BME280 test"));
  unsigned status;
  unsigned status2;
  unsigned status3;
  unsigned status4;

  // default settings
  status = bme.begin();
  status2 = bme2.begin();
  status3 = bme3.begin();
  status4 = bme4.begin();
  
  // You can also pass in a Wire library object like &Wire2
  // status = bme.begin(0x76, &Wire2)
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
    Serial.print("SensorID was: 0x");
    Serial.println(bme.sensorID(), 16);
    Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
    Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
    Serial.print("        ID of 0x60 represents a BME 280.\n");
    Serial.print("        ID of 0x61 represents a BME 680.\n");
    while (1) delay(10);
  }

  Serial.println("-- Default Test --");
  delayTime = 8000;

  Serial.println();
}


void loop() {
  printValues();
  delay(delayTime);
}


void printValues() {
  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature());
  Serial.println(" °C");

  Serial.print("Temperature 2 = ");
  Serial.print(bme2.readTemperature());
  Serial.println(" °C");

  Serial.print("Temperature 3 = ");
  Serial.print(bme3.readTemperature());
  Serial.println(" °C");

  Serial.print("Temperature 4 = ");
  Serial.print(bme4.readTemperature());
  Serial.println(" °C");
  Serial.print("Pressure = ");

  Serial.print(bme.readPressure() / 100.0F);
  Serial.println(" hPa");

  Serial.print("Pressure 2 = ");

  Serial.print(bme2.readPressure() / 100.0F);
  Serial.println(" hPa");


  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println(" %");

  Serial.print("Humidity 2 = ");
  Serial.print(bme2.readHumidity());
  Serial.println(" %");

  Serial.print("Humidity 3 = ");
  Serial.print(bme3.readHumidity());
  Serial.println(" %");
  Serial.println();

  Serial.print("Humidity 4 = ");
  Serial.print(bme4.readHumidity());
  Serial.println(" %");
  
}

I have not included images of the breadboard since there are several other components on it and it will be unhelpful in determining the issue. All 4 ports work on their own, but the issue only arises when multiple sensors are connected.

Any help or direction would be very appreciated.


This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.