giovedì 18 agosto 2016

BME280

Il BME280 e' un sensore barometrico/umidita'/pressione della BOSCH che ho comprato su Aliexpress (per risparmiare sulla versione di Adafruit ...che diciamo e' un po' piu' completa per il tipo di connessioni ..dubito che il mio sia la versione Bosch originale)

Il dispositivo ha una connessione a due cavi SDA/SCL I2C. Usando la libreria di Adafruit in qualunque modo la settassi non riuscivo ad avere la connessione. Pensando che il componente fosse rotto ho provato ad usare lo sketch I2C Scanner che ha immediatamente riconosciuto il BME280 all'indirizzo 0x76. (la versione Adafruit permette di scegliere l'indirizzo)




Frugando su Internet ho trovato una libreria alternativa ad Adafruit che ha funzionato al primo avvio.Dopo un paio di mesi che tenevo sul componente sul tavolo cercando una soluzione adesso e' finalmente usabile

--------------------------------------------
/***************************************************************************
  This is a library for the BME280 humidity, temperature & pressure sensor
  Designed specifically to work with the BME280 Breakout board
  ----> http://www.adafruit.com/products/2650
  This sketch only supports the I2C bus for connection.
 ***************************************************************************/

#include <Wire.h>
#include "cactus_io_BME280_I2C.h"

// Create the BME280 object
//BME280_I2C bme;              // I2C using default 0x77
BME280_I2C bme(0x76);  // I2C using address 0x76

void setup() {
  Serial.begin(9600);
  Serial.println("Bosch BME280 Barometric Pressure - Humidity - Temp Sensor | cactus.io");

  if (!bme.begin()) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  bme.setTempCal(-1);

  Serial.println("Pressure\tHumdity\t\tTemp\t\tTemp");

}

void loop() {

    bme.readSensor();

    Serial.print(bme.getPressure_MB()); Serial.print("\t\t");    // Pressure in millibars
    Serial.print(bme.getHumidity()); Serial.print("\t\t");
    Serial.print(bme.getTemperature_C()); Serial.print(" *C\t");
    Serial.print(bme.getTemperature_F()); Serial.println(" *F\t");

    // add a 2 second delay to slow down the output
    delay(2000);
}