BME280 auslesen

Gast #4380460
Lesenswert?
• ▲
▼
Hallo,

ich möchte einen BME280 auslesen.
https://www.bosch-sensortec.com/de/homepage/products_3/environmental_sensors_1/bme280/bme280_1


Hier gibt es vom Herstelle Code dazu:
https://github.com/BoschSensortec/BME280_driver

Wenn ich nun aus der bme280.c Datei die Funktion der Luftfeuchte 
verwenden will habe würde ich in meinem Programm die bme280.h und 
bme280.c includieren.

Zum testen will ich es zuerst am Raspberry PI versuchen. Einen andern 
SPI Temperatursensor habe ich schon einmal ausgelesen, das war aber ohne 
api.

Wie landet nun aber der Wert in einer Variable?

die Funktion sieht so aus:
1
/*!
2
 *  @brief This API is used to read uncompensated humidity.
3
 *  in the registers 0xF7, 0xF8 and 0xF9
4
 *  @note 0xFD -> MSB -> bit from 0 to 7
5
 *  @note 0xFE -> LSB -> bit from 0 to 7
6
 *
7
 *
8
 *
9
 *  @param v_uncomp_humidity_s32 : The value of uncompensated humidity
10
 *
11
 *
12
 *
13
 *  @return results of bus communication function
14
 *  @retval 0 -> Success
15
 *  @retval -1 -> Error
16
 *
17
 *
18
*/
19
BME280_RETURN_FUNCTION_TYPE bme280_read_uncomp_humidity(
20
s32 *v_uncomp_humidity_s32)
21
{
22
  /* used to return the communication result*/
23
  BME280_RETURN_FUNCTION_TYPE com_rslt = ERROR;
24
  /* Array holding the MSB and LSb value
25
  a_data_u8[0] - Humidity MSB
26
  a_data_u8[1] - Humidity LSB
27
  */
28
  u8 a_data_u8[BME280_HUMIDITY_DATA_SIZE] = {
29
  BME280_INIT_VALUE, BME280_INIT_VALUE};
30
  /* check the p_bme280 structure pointer as NULL*/
31
  if (p_bme280 == BME280_NULL) {
32
    return E_BME280_NULL_PTR;
33
    } else {
34
      com_rslt = p_bme280->BME280_BUS_READ_FUNC(
35
      p_bme280->dev_addr,
36
      BME280_HUMIDITY_MSB_REG, a_data_u8,
37
      BME280_HUMIDITY_DATA_LENGTH);
38
      *v_uncomp_humidity_s32 = (s32)(
39
      (((u32)(a_data_u8[BME280_HUMIDITY_MSB_DATA]))
40
      << BME280_SHIFT_BIT_POSITION_BY_08_BITS)|
41
      ((u32)(a_data_u8[BME280_HUMIDITY_LSB_DATA])));
42
    }
43
  return com_rslt;
44
}
Gast #4381492
Lesenswert?
• ▲
▼
Du musst zuerst einen 32bit integer (32s) als Variable definieren.
Beim Aufrufen der Methode bme280_read_uncomp_humidity übergibst du dann 
die Variable als Pointer.

Das Ganze sieht dann etwa so aus:
1
s32 humidity;
2
bme280_read_uncomp_humidity(&humidity);
3
printf("Die Feuchtigkeit beträgt : %d\n", humidity);
#4399263
Lesenswert?
• ▲
▼
Hi Leute,

ich habe diesen Sensor bei Watterott gekauft.

Python funktioniert. Leider in 'C' nicht.

Was mache ich falsch.

// Testprogramm -
// Auslesen BME280
//

#include <stdio.h>
#include <stdint.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include "bme280.h"
#include "bme280.c"

int main(int argc, char **argv)
{

   s32 temperature, humidity, pressure;

   bme280_read_uncomp_temperature(&temperature);
   bme280_read_uncomp_humidity(&humidity);
   bme280_read_uncomp_humidity(&pressure);

   printf("Die Temparatur   beträgt:  %d\n", temperature);
   printf("Die Feuchtigkeit beträgt:  %d\n", humidity);
   printf("Der Luftdruck    beträgt:  %d\n", pressure);
   return 0;
}

Ausgabe Temparatur und Feuchtigkeit ist '0'. Luftdruck = 33760

Gruß
Kurt

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.