Affichage altitude avec BME 280 et ESP32

Bonjour tous le monde,

J'ai créé un petit sketck avec les lib Adafruit avec BME280 et un afficheur SSD1306.
Apres certain temps j'ai l'attitude qui s'affiche avec une valeur négatif, alors que j'ai rien changé au niveau du code. J'ai mis comme valeur pour SEA LEVEL PRESSURE 1024 ==>#define SEALEVELPRESSURE_HPA (1024) .

J'ai même fais une reset du flash avec la commande : python.exe -u -m esptool --port COM12 erase_flash

J'ai mis comme valeur pour SEA LEVEL PRESSURE1024

#define SEALEVELPRESSURE_HPA (1024)
Ci-dessous les nouvelles valeurs avec l'altitude afficher en négative.

Temperature = 21.00 *C
Temperature = 69.80 *F
Pressure = 1029.26 hPa
Approx. Altitude = -43.22 m
Humidity = 43.37 %

Veuillez trouvez ci-dessous tous le code:

/*********
ESP 32        BME280 & OLED
GPIO 22       SCK (SCL Pin)	
GPIO 21       SDI (SDA pin)	

*********/

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SEALEVELPRESSURE_HPA (1024)
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32

Adafruit_BME280 bme; // I2C

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 displayOld(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

unsigned long delayTime;

void setup() {
  Serial.begin(115200);
  Serial.println(F("BME280 test"));
  
  bool statusBME;
  bool statusOLD;

  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  statusBME = bme.begin(0x76);  
  statusOLD = displayOld.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  if (!statusBME) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
      while (1);
  }

  if(!statusOLD) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  
  Serial.println("-- Default Test --");
  
  //Delay Pause for 10 min 600000
  delayTime = 10000;
  
  Serial.println();

  // Clear the buffer
  displayOld.clearDisplay();
  displayOld.setTextSize(1);
  displayOld.setTextColor(WHITE);
  displayOld.setCursor(0,0);
  displayOld.display();
}


void loop() { 
  printValues();
  delay(delayTime);
  
}

void printValues() {
  //Display Telemetry
  
  displayOld.clearDisplay(); // clear the display
  displayOld.setCursor(0,0);
  //Display temperature celsius
  Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C");
  //displayOld.print("Temp:"); displayOld.print(bme.readTemperature()); displayOld.println("*C");
  
  // Convert temperature to Fahrenheit
  Serial.print("Temperature = ");Serial.print(1.8 * bme.readTemperature() + 32); Serial.println(" *F");
  //displayOld.print("Temp:"); displayOld.print(1.8 * bme.readTemperature() + 32); displayOld.println("*C");
  
  //Display Pressure
  Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa");
  //displayOld.print("Pressure = "); displayOld.print(bme.readPressure() / 100.0F); displayOld.println("*C");
  
  //Display Approx. Altitude
  Serial.print("Approx. Altitude = "); Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(" m");
  displayOld.print("App.Altitude ="); displayOld.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); displayOld.println("*C");
  
  //Display Humidity
  Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %");
  displayOld.print("RH:"); displayOld.print(bme.readHumidity()); displayOld.println("*C");

  Serial.println();
  displayOld.display();  // write the buffer to the display
}

Bonjour,

Savez vous pourquoi cette valeur serait entre parenthèses ? Avez-vous essayé sans les parenthèses ?

A+

1 Like

in order to determine the altitude, the captains of the aircraft request pressure from the controller and set it in the aircraft's drive system

1 Like

La pression moyenne au niveau de la mer est 1013.25 hPa environ. Et si tu montes la pression va diminuer et ta mesure de pression te permettra de connaitre la valeur de ton ascension.

Admettons que tu prends 1013.25hPa comme valeur de référence.

  • Si un regime de basse pression s'installe la pression au niveau de la mer va baisser. Si tu n'as pas bougé mais que tu prends toujours comme référence les 1013.25 hPa le calcul de l'ascension va t'indiquer que tu es descendu.
  • Si un regime de haute pression s'installe la pression au niveau de la mer va monter. Si tu n'as pas bougé mais que tu prends toujours comme référence les 1013.25 hPa le calcul de l'ascension va t'indiquer que tu es monté.

Pour qu'un altimètre donne une information pertinente il faut mettre à jour périodiquement la pression de référence car elle dépend de la météo du moment.

En pratique, on fait souvent le contraire. On connait l'altitude du lieu d'où l'on part. On mesure la pression locale, on indique l'altitude du lieu et on se sert de ces informations pour calculer la nouvelle altitude lorsqu'on va se déplacer.

1 Like

Bonjour tous le monde,
Merci pour vos explications. Je suppose que j'ai été dans un régime de basse pression.
@fdufnews Je fais un test avec la valeur que vous m'avais communiquer
@jelopo je supprime les parenthèses
@ua6em je vais demander à la tour de contrôle la pression :wink:

@fdufnews
Since the invention of the Internet, you can use the readings of the nearest airfield to you

Bonsoir,
@jelopo test fait aussi dans les parenthèse, j'ai la même altitude.
@fdufnews
J'ai changé la valeur en 1013.25, l'altitude a passé à -155.03m.
Je suis à Tunis, mon altitude est de 44,5619216 sur google earth.
An changeant cette valeur define SEALEVELPRESSURE_HPA, la pression a bien changé:

Avec 1030hPa, l'altitude est -15.87m
Avec 1035hPa, l'altitude est 24.90 m
Avec 1037hPa, l'altitude est 40.94 m
Avec 1037.4hPa, l'altitude est 44.56 m
Avec 1037.5hPa, l'altitude est 40.94 m
Avec 1038hPa, l'altitude est 48.93 m
Avec 1040hPa, l'altitude est 65.16 m

Je fais un test, avec un enregistrement dans une base de données.
Openweather propose une API pour avoir le hPa

Merci pour vos information

You have a real pressure and set it - Pressure = 1029.26 hPa

Hi @ua6em,
i have tested with real pressure, same problem.
i will use real GPS for taht.
Thank you all for your help

Can you show what real pressure the sensor shows and what you set?

SPEAK in FRENCH
USE GOOGLE TRANSLATOR

Pouvez-vous montrer quelle pression réelle le capteur affiche et ce qui est réglé ?

Hi @ua6em ,
Real pressure detected by BME280:
image

#define SEALEVELPRESSURE_HPA 1035

@sameheddine
Si cela continue en anglais je déplace dans la section anglaise.

Ici c'est un lieu de partage, ce n'est pas un service après vente arduino.
Un peu de respect pour ceux qui viennent chercher de l'aide et qui ne parlent pas anglais.

Tu peux toujours fermer ton sujet ici et en ouvrir un autre dans la langue de ton choix.

Réglez la pression sur :

#define SEALEVELPRESSURE_HPA 1028
or
#define SEALEVELPRESSURE_HPA 1029
1 Like

Bonjour @68tjs ,
Désole, je ne fais plus.

Qu'est-ce que tu n'as pas compris dans cette explication.
La pression de référence ne peut pas être une constante. Il faut l'actualiser périodiquement.
La pression change avec l'altitude certes mais elle change aussi avec les conditions atmosphériques.
Il faut prévoir une fonction de calibration qui prend en compte une pression et une altitude connue à un moment donné. Cette valeur doit provenir d'une source fiable (aéroport, service météo, ...).
Une fois cette calibration réalisée, sur une période de temps limitée, et si les conditions météo sont stables, la variation de pression reflétera effectivement les changements d'altitude.
Au bout d'un certain temps il faut recommencer cette calibration. Si les conditions météo sont très stables on peut refaire la calibration au bout de plusieurs heures, voir une journée. En régime d'orage, la pression peut chuter très rapidement en moins d'une heure.
Attention aussi au fait que les services météo donnent généralement la pression au niveau de la mer. Il faut donc la corriger en fonction du lieu où tu te trouves d'où la nécessité de connaitre précisément l'altitude du lieu où la calibration est réalisée.

Bonjour @fdufnews ,
Ce que tu as dis est vrais. je vais essai un fonction pour que cette valeur soit ajuster automatiquement.
Merci encore pour vos information

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.