ARDUINO uno with BMI280 sensor

Ciao a tutti,
sono abbastanza inesperto in arduino ma devo programmarne uno per fare delle readings di pressure, temperature and humidity con un BME280.
Ho trovato un code su internet che utilizza una library, che ho già’ caricato.
Tuttavia ottengo delle letture chiaramente sbagliate (0 di temperatura e pressione e 40000 m di altitudine)e non riesco a capire il problema.
Posto qui il codice sperando che qualcuno riesca a capire il problema.

#include <stdint.h>
#include <SparkFunBME280.h>
#include "Wire.h"
#include "SPI.h"
 
//Global sensor object
BME280 mySensor;
 
void setup()
{
  Serial.begin(57600);
  //SPI
  mySensor.settings.commInterface = SPI_MODE;
  mySensor.settings.chipSelectPin = 10;
 
  //Operation settings
  mySensor.settings.runMode = 3; //Normal mode
  mySensor.settings.tStandby = 0;
  mySensor.settings.filter = 0;
  mySensor.settings.tempOverSample = 1;
  mySensor.settings.pressOverSample = 1;
  mySensor.settings.humidOverSample = 1;
 
  Serial.print("Starting BME280... result of .begin(): 0x");
  delay(10);  //BME280 requires 2ms to start up.
  Serial.println(mySensor.begin(), HEX);
 
}
 
void loop()
{
  //Each loop, take a reading.
 
  Serial.print("Temperature: ");
  Serial.print(mySensor.readTempC(), 2);
  Serial.println(" degrees C");
 
  Serial.print("Temperature: ");
  Serial.print(mySensor.readTempF(), 2);
  Serial.println(" degrees F");
 
  Serial.print("Pressure: ");
  Serial.print(mySensor.readFloatPressure(), 2);
  Serial.println(" Pa");
 
  Serial.print("Altitude: ");
  Serial.print(mySensor.readFloatAltitudeMeters(), 2);
  Serial.println("m");
 
  Serial.print("Altitude: ");
  Serial.print(mySensor.readFloatAltitudeFeet(), 2);
  Serial.println("ft"); 
 
  Serial.print("%RH: ");
  Serial.print(mySensor.readFloatHumidity(), 2);
  Serial.println(" %");
 
  Serial.println();
 
  delay(1000);
 
}

Per quanto riguarda l’hardware sto utilizzando una connessione SPI e il sistema e’ collegato nel seguente modo:
Vin to 3.3V.
Connect GND to ground
SCK pin to Digital #13
SDO pin to Digital #12
SDI pin to Digital #11
CS pin Digital #10

Buongiorno, essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI ([u]spiegando bene quali conoscenze hai di elettronica e di programmazione[/u] ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

Fatto :)

Uso molto spesso quei sensori, sia su MCU Atmel (Arduino) che su PIC32 e non ho mai avuto questi problemi ...

Su arduino, dall'IDE, library manager, installati le librerie di Adafruit : 1. Adafruit_Sensor.h e 2. Adafruit_BME280.h ... ... dopo di che basta una bme280.begin() e nel loop() le varie bme280.readTemperature(), bme280.readHumidity() e bme280.readPressure() ... ;)

Guglielmo

mi da quest'errore:

Arduino: 1.8.3 (Mac OS X), Board: "Arduino/Genuino Uno"

/Users/edocchipi97/Documents/Arduino/bme280/bme280.ino: In function 'void setup()':
bme280:46: error: 'bme280' was not declared in this scope
   bme280.begin();
   ^
/Users/edocchipi97/Documents/Arduino/bme280/bme280.ino: In function 'void loop()':
bme280:73: error: 'bme280' was not declared in this scope
   Serial.print(bme280.readTemperature(), 2);
                ^
exit status 1
'bme280' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Ma ... hai istanziato la classe chiamandola bme280 ? ? ? :o :o :o Altrimenti devi sostituirlo con il nome che [u]hai usato tu[/u] per istanziare la classe ...

Per istanziarla con il nome che ho usato io, metti, prima del setup() : Adafruit_BME280 bme280;

Guglielmo

P.S.: Ma perché NON vi STUDIATE mai gli esempi FUNZIONANTI che le librerie installano nell' IDE ... ::)

ok ora i compiler non da nessun errore.
Il codice e’ questo (sperando di aver capito bene):

#include "stdint.h"
#include "Wire.h"
#include "SPI.h"
#include "Adafruit_Sensor.h"
#include "Adafruit_BME280.h"

Adafruit_BME280 bme280;

void setup() {
 
  bme280.begin();  
}

void loop() {
  Serial.print("Temperature: ");
  Serial.print(bme280.readTemperature(), 2);
  Serial.println(" degrees C");

  Serial.print("Pressure: ");
  Serial.print(bme280.readPressure(), 2);
  Serial.println(" Pa");
 
  Serial.print("%RH: ");
  Serial.print(bme280.readHumidity(), 2);
  Serial.println(" %");
 

  Serial.println();

 
  delay(1000);
}

pero’ quando runno la IDE non mi stampa nulla e non mi indica nessun valore.

Allora …
… a te mancano le basi della programmazione su Arduno :wink: … per cui, intanto, ti consiglio di studiare QUESTO proseguire con QUESTO e/o acquistare qualche buon libro (es. QUESTO) … dopo di che … se la porta seriale NON la inizializzi come vuoi che possa funzionare ?

Nel setup() devi fare la Serial.begin() … e ripeto … GUARDA gli esempi che sono inclusi nell’IDE … c’è tutto e sono tutti funzionanti !

Guglielmo

Ok sono riuscito a farlo funzionare. Leggero' il possibile...ma purtroppo non ho molto tempo a disposizione.

Grazie a presto :)