#include <SPI.h>
#define BME280_CS1_PIN 10
#define BME280_CS2_PIN 9
void setup() {
Serial.begin(115200);
// Configure CS pins
pinMode(BME280_CS1_PIN, OUTPUT);
digitalWrite(BME280_CS1_PIN, HIGH); // CS is active low
pinMode(BME280_CS2_PIN, OUTPUT);
digitalWrite(BME280_CS2_PIN, HIGH); // CS is active low
// Initialize SPI
SPI.begin();
// Initialize BME280 sensors
if (!initializeBME280(BME280_CS1_PIN)) {
Serial.println("Failed to initialize BME280 (Sensor 1)");
while (1);
}
if (!initializeBME280(BME280_CS2_PIN)) {
Serial.println("Failed to initialize BME280 (Sensor 2)");
while (1);
}
Serial.println("Both BME280 sensors initialized successfully");
}
void loop() {
float humidity1, humidity2;
// Read humidity from Sensor 1
if (readBME280Humidity(BME280_CS1_PIN, &humidity1)) {
Serial.print("Sensor 1 Humidity: ");
Serial.print(humidity1);
Serial.println(" %");
} else {
Serial.println("Failed to read humidity from Sensor 1");
}
// Read humidity from Sensor 2
if (readBME280Humidity(BME280_CS2_PIN, &humidity2)) {
Serial.print("Sensor 2 Humidity: ");
Serial.print(humidity2);
Serial.println(" %");
} else {
Serial.println("Failed to read humidity from Sensor 2");
}
delay(1000);
}
bool initializeBME280(uint8_t csPin) {
digitalWrite(csPin, LOW);
SPI.transfer(0xD0); // Read chip ID
uint8_t chipID = SPI.transfer(0x00);
digitalWrite(csPin, HIGH);
if (chipID != 0x60) {
return false; // Chip ID should be 0x60 for BME280
}
// Additional initialization steps can be added here
return true;
}
bool readBME280Humidity(uint8_t csPin, float* humidity) {
uint8_t data[2];
digitalWrite(csPin, LOW);
SPI.transfer(0xFD | 0x80); // Read humidity register
for (int i = 0; i < 2; i++) {
data[i] = SPI.transfer(0x00);
}
digitalWrite(csPin, HIGH);
// Process the data
int32_t adc_H = (data[0] << 8) | data[1];
// Perform compensation (dummy value here, real calibration needed)
*humidity = adc_H / 1024.0;
return true;
}