/*************************************************************************** This is a library for the BME280 humidity, temperature & pressure sensor Designed specifically to work with the Adafruit BME280 Breakout ----> http://www.adafruit.com/products/2650 These sensors use I2C or SPI to communicate, 2 or 4 pins are required to interface. The device's I2C address is either 0x76 or 0x77. Adafruit invests time and resources providing this open source code, please support Adafruit andopen-source hardware by purchasing products from Adafruit! Written by Limor Fried & Kevin Townsend for Adafruit Industries. BSD license, all text above must be included in any redistribution ***************************************************************************/ #include #include #include #include #include #define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10 #define SD_CS 9 #define SEALEVELPRESSURE_HPA (1013.25) // Calculated from https://barani.biz/apps/sea-level-pressure/ //Adafruit_BME280 bme; // I2C Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI unsigned long delayTime; void setup() { Serial.begin(9600); Serial.println(F("BME280 test")); bool status; // default settings // (you can also pass in a Wire library object like &Wire2) status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } Serial.print("Initializing SD card..."); // see if the card is present and can be initialized: if (!SD.begin(SD_CS)) { Serial.println("Card failed, or not present"); // don't do anything more: while (1); } Serial.println("card initialized."); Serial.println("-- Default Test --"); delayTime = 1000; Serial.println(); } void loop() { String dataString = printValues(); File dataFile = SD.open("datalog.txt", FILE_WRITE); // if the file is available, write to it: if (dataFile) { dataFile.println(dataString); dataFile.close(); // print to the serial port too: // Serial.println(dataString); } // if the file isn't open, pop up an error: else { Serial.println("error opening datalog.txt"); } delay(delayTime); } String printValues() { String dataString = ""; char str_temp[7]; Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); dtostrf(bme.readTemperature(), 4, 2, str_temp); dataString = String(str_temp); Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); dtostrf((bme.readPressure() / 100.0F), 4, 2, str_temp); dataString += "," + String(str_temp); Serial.print("Approx. Altitude = "); Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(" m"); Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); dtostrf(bme.readHumidity(), 4, 2, str_temp); dataString += "," + String(str_temp); Serial.println(); // Serial.println(dataString); return(dataString); }