Capteur BMP280 données fausses

Bonjour à tous.
Je souhaite réaliser une petite station météo avec un arduino nano. Du moins pour le moment récupérer la température et la pression atmosphérique et peut être l’humidité. Certainement avec un capteur du luminosité pour adapter la luminosité de l'afficheur LCD si possible. Je commence à tester les différents éléments en fonction des commandes reçues.

Je rencontre un premier problème avec capteur de pression/température : les données renvoyées sont fausses.
Matériel :

  • Arduino Nano (du moins un copie : Geekcreit ATmega328P Nano V3 Version Améliorée)
  • un capteur GY-BMP280-3.3

Câblage :

  • BMP280 VCC -> 3,3V Arduino
  • BMP280 GND -> GND Arduino
  • BMP280 SCL -> A5 Arduino
  • BMP280 SDA -> A4 Arduino
  • BMP280 SD0 -> GND Arduino (pour forcer l'adresse 0x76 du capteur)

Code : (pris simplement de la librairie Adafruit)
MODERATOR EDIT- added code tags

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp; // use I2C interface
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 Sensor event test"));

  //if (!bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID)) {
  if (!bmp.begin()) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
                      "try a different address!"));
    while (1) delay(10);
  }

  /* Default settings from datasheet. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */

  bmp_temp->printSensorDetails();
}

void loop() {
  sensors_event_t temp_event, pressure_event;
  bmp_temp->getEvent(&temp_event);
  bmp_pressure->getEvent(&pressure_event);
  
  Serial.print(F("Temperature = "));
  Serial.print(temp_event.temperature);
  Serial.println(" *C");

  Serial.print(F("Pressure = "));
  Serial.print(pressure_event.pressure);
  Serial.println(" hPa");

  Serial.println();
  delay(5000);
}

Info du port COM :

11:24:03.572 -> BMP280 Sensor event test
11:24:03.720 -> ------------------------------------
11:24:03.720 -> Sensor: BMP280
11:24:03.720 -> Type: Ambient Temp (C)
11:24:03.773 -> Driver Ver: 1
11:24:03.820 -> Unique ID: 280
11:24:03.820 -> Min Value: -40.00
11:24:03.820 -> Max Value: 85.00
11:24:03.874 -> Resolution: 0.01
11:24:03.874 -> ------------------------------------
11:24:03.920 ->
11:24:03.920 -> Temperature = 186.86 C
11:24:03.920 -> Pressure = 1186.97 hPa
11:24:03.974 ->
11:24:08.945 -> Temperature = 186.86 C
11:24:08.945 -> Pressure = 1186.96 hPa
11:24:08.945 ->
11:24:13.925 -> Temperature = 186.86 C
11:24:13.925 -> Pressure = 1186.95 hPa
11:24:13.972 ->

J'ai essayé avec deux capteurs différents et j'ai le même résultat. En prenant l'adresse 0x77 (3,3V sur SD0) aussi.
Je pense passer à coté de quelque chose car deux capteurs défectueux au même moment serait bizarre.
Avez vous une idée ?

Merci d'avance

Bonjour

J'ai essayé d'avancer sur ce pb sans succès...
J'ai utilisé une carte Uno avec ces librairies en reprenant leurs exemples :

  • Adafruit BMP280 library
  • BMx280MI
  • I2C Sensor Lib ilib

Dans le lot de 3 capteurs : un ne répond jamais et les 2 autres donnent des valeurs erronées.
Je pense qu'ils sont HS.

Bonsoir Mikeros03
Je n'ai malheureusement pas ce module :frowning:
Un de tes BMP280 Connecté, as-tu fait un scanner i2C afin de tester ton bus et ton module?

Cordialement
jpbbricole

Bonjour jpbbricole

Désolé de la réponse tardive, notification dans les mails indésirables...

Un de tes BMP280 Connecté, as-tu fait un scanner i2C afin de tester ton bus et ton module?

Oui avec i2cdetec et il est bien détecté avec l'adresse 0x76.

Cordialement

Bonjour

Cherches plus, c'est le réchauffement climatique :rofl:
Ou alors, as-tu alimenté ton module en 3.3V,
Pour les signaux du bus i2c, as-tu un level shifter 5V > 3.3V
image

Cordialement
jpbbricole

Cherches plus, c'est le réchauffement climatique :rofl:

Les scientifiques se sont trompés lol ils disaient quelques degrés :joy:

Oui je les alimente en 3,3V mais sans level shifter. Est ce obligatoire ? J'ai regardé à l’oscilloscope le signal I2C et j'ai max 3,6V. Je ne maitrise pas du tout le protocole I2C. Je pensais que l'I2C se débrouillait entre 3,3V et 5V de l'alim du module par rapport à l'arduino.

Cordialement

Bonjour Mikeros03

Bon, on peut partir du principe que si ton module est détecté au scan i2c, ça fonctionne, mais on ne peut pas exclure une influence néfaste de ce 5V. sur les mesures.
J'ai déjà connecté de l'i2C entre 5V et 3.3V, sans problème, (il n'y avait pas de mesures), mais c'est pas très "correct"

Cordialement
jpbbricole

+1 avec @jpbbricole
Ce module n’est pas fait pour du 5V et utiliser l’I2C en 5V peut/va l’endomager . Le mal est peut être déjà fait sur vos deux modules… le module vendu par adafruit inclut un voltage regulator et le level shifting donc peut être branché indifféremment sur 3.3 ou 5V

Ce module n’est pas fait pour du 5V et utiliser l’I2C en 5V peut/va l’endomager . Le mal est peut être déjà fait sur vos deux modules… le module vendu par adafruit inclut un voltage regulator et le level shifting donc peut être branché indifféremment sur 3.3 ou 5V

Le module est pourtant bien alimenté en 3,3V.

Voici quelques nouvelles
Après avoir tant attendu mes level shifter, j'ai testé avec. Le BMP280 ne communique plus du tout avec l'arduino.
Quelque chose doit m'échapper, car en suivant les tutos du module identique au mien je n'ai pas le même résultat.

Ce qui laisse supposer que le bus I2C fonctionne sous 3.3V et qu'il y a des diodes de protection sur les entrées, ce qui ramène la tension à 3.6V.
Comme indiqué dans la datasheet :

Voltage at any interface pin : VDDIO + 0.3

Ceci dit, si les résistances du bus I2C ont des valeurs suffisamment hautes (4.7K classiquement) le courant reste faible (5V-3.3V)/4700 = 400µA, non destructeur.

S'il est détecté cela veut dire que le bus fonctionne.
Pour lever le doute, il serait intéressant de d'essayer avec PRO MINI 3.3V, ESP8266 ou ESP32, mais il serait étonnant que cela apporte quoi que ce soit. Mais comme dit l'autre, on ne sait jamais ...