Ciao a tutti. Ho da poco acquistato questo sensore della Bosch BMP280. E' un sensore di temperatura, pressione e altitudine.
Collegato a un Arduino Nano (in modalità I2C) funziona benissimo, ma quando lo collego all'ESP8266-07 mi dà dei valori di temperatura più alti di circa 5°C e anche la pressione è sballata.
Intanto mi spiace rispondere dopo mesi ma non mi arrivano le notifiche...
btw,
cyberhs:
Perché hai collegato I2C (SDA e SCL) a GPIO4 e GPIO5?
perchè sull'ESP8266 qualsiasi PIN può essere definito SDA o SCL. Pensavo che lasciando le impostazioni dello sketch per Arduino venissero dichiarati il PIN 4 e 5.
Evidentemente non è così... leggendo ora su un sito ho visto che di default sull'ESP8266 i pin SDA e SCL sono rispettivamente il 2 e il 14.
Appena ho tempo proverò a recuperare il progetto (che nel frattempo avevo accantonato) e a modificare i collegamenti.
Allora, ho provato a cambiare pin con Wire.begin. risultato non funziona niente. Zoomx, sí prima funzionava, con GPIO4 e GPIO5, però come scritto nel primo messaggio i valori di temperatura e pressione sono sballati.circa 5 gradi in più di temperatura e non ricordo quanto di pressione.
Io uso un BME280, ha in più l'umidità.
Nel mio sketch ho l'istruzione
Wire.begin(D2, D1); // sda, scl
Uso una nodeMCU e li i pin hanno questi nomi, con altre schede devi usare invece la normale numerazione.
Altra cosa, io ho usato la libreria Adafruit che ha l'indirizzo del BME280 nella libreria stessa. Era sbagliato. Ho usato uno sketch scanner I2C e ho trovato un indirizzo diverso per cui l'ho cambiato anche nella libreria. Prova anche tu.
I 5 gradi in più.... non è che si trova vicino a qualcosa che scalda? Recentemente ho letto di uno che aveva uno scarto del genere e alla fine ha scoperto che sul sensore ci andava l'aria della ventola del portatile.
Per la pressione.... con quale riferimento confronti?
zoomx:
I 5 gradi in più.... non è che si trova vicino a qualcosa che scalda? Recentemente ho letto di uno che aveva uno scarto del genere e alla fine ha scoperto che sul sensore ci andava l'aria della ventola del portatile.
Per la pressione.... con quale riferimento confronti?
Avevo visto anch'io quella discussione. Nessuna ventola nel mio caso. Ora ho preparato i due circuiti affiancati, uno con l'Esp8266 e uno con un arduino UNO. Ancora circa 4 gradi di differenza. Per la pressione al momento non è calibrata ma è evidente quella letta da arduino è plausibile mentre l'altra no. Allego gli screen dei serial monitor. Ho provato anche a misurare la temperatura tenendo il bmp280 tra due dita:ancora sull esp8266 la lettura più alta e non plausibile(più di 37 gradi). Sono tentato dal sottrarre direttamente nello sketch la differenza, sperando che sia un valore fisso per qualsiasi temperatura...
Vedo anche che la pressione è diversa.
A questo punto non vorrei che ci fosse un problema con le librerie. Usi librerie diverse?
La Bosh ha pubblicato una libreria in C (non utilizzabile su Arduino senza mofdifiche che io non so fare)
Nel file bme280_support.c, che sarebbe una sorta di esempio, si legge:
/* The variable used to assign the standby time*/
u8 v_stand_by_time_u8 = BME280_INIT_VALUE;
/* The variable used to read uncompensated temperature*/
s32 v_data_uncomp_temp_s32 = BME280_INIT_VALUE;
/* The variable used to read uncompensated pressure*/
s32 v_data_uncomp_pres_s32 = BME280_INIT_VALUE;
/* The variable used to read uncompensated pressure*/
s32 v_data_uncomp_hum_s32 = BME280_INIT_VALUE;
/* The variable used to read compensated temperature*/
s32 v_comp_temp_s32[2] = {BME280_INIT_VALUE, BME280_INIT_VALUE};
/* The variable used to read compensated pressure*/
u32 v_comp_press_u32[2] = {BME280_INIT_VALUE, BME280_INIT_VALUE};
/* The variable used to read compensated humidity*/
u32 v_comp_humidity_u32[2] = {BME280_INIT_VALUE, BME280_INIT_VALUE};
Se però la libreria è la stessa.... a meno che ci sia qualche errore nella libreria. O nell'I2C dell'ESP8266.
No no la libreria è la stessa!addirittura lo sketch è lo stesso!
Comunque è confermato che il problema è nella libreria. Ho appena provato ad utilizzarne un'altra (quella di adafruit, correggendo l'indirizzo come mi avevi fatto notare) e adesso i valori letti sono uguali sui due circuiti! Yeah!
Grazie a tutti!
Bé, però adesso ci devi dire qual'era la libreria problematica.
Per quanto riguarda l'indirizzo I2C, sul datasheet c'è scritto che dipende da quale livello di trova la linea DO che su alcune board è presente e in altre no. Se non è presente l'indirizzo è fisso, probabilmente quello diverso, mentre nella board Adafruit (ma anche in altre) è presente e la libreria si occupa anche di cambiarne lo stato per avere l'altro indirizzo.
Probabilmente l'hanno fatto per rendere il BME280 compatibile con il BMP280.
Io non ho la board dell'adafruit e non ho la linea DO. Come dici te, l'indirizzo è fisso. Io l'ho trovato sulla libreria 'sballata', che è quella linkata nel primo post. Tra l'altro nella descrizione su github è citato proprio l'esp8266...strano che non vada bene.
Beh se riesci a fare dei test anche te, meglio.
Purtroppo per il BMP non c'è la libreria della Sparkfun, c'è solo per il BME. Però ce n'è una della SEED-STUDIO, forse la provo.