Verwendung der Library MyBMP280 mit Attiny85

Für Attiny kann die Library nur mit I2C-Schnittstelle verwendet werden. Da von den 5 verfügbaren Pins eines Attiny85 bereits 4 Pins für die SPI-Schnittstelle belegt würden, habe ich die SPI-Schnittstelle für Attiny nicht realisiert.


Testaufbau:

Verwendete Bauteile:

  • 1 Attiny85 (Attiny45 hat zu wenig Flash-Speicherplatz)
  • 1 BMP280 Luftdrucksensor von Adafruit
  • 1 7-Segmentanzeige Sparkfun mit I2C-Schnittstelle
  • 1 Resettaster
  • 1 Programmierstecker 4-polig
  • 1 Spannungsversorgung +5V

Optional:

  • 2 Widerstände 10 kOhm (I2C-Pullup-Widerstände, falls diese nicht am BMP280 Breakout Board vorhanden sind)


Anschluss des Sensors am Attiny:

 Attiny              Sensor (I2C)

  VCC        ->      VIN

  GND        ->      GND

  Pin 7       ->      SCK (SCL)

  Pin 5       ->      SDI  (SDA)

Programmbeispiel MyBMP280

Nachfolgendes Programmbeispiel gibt die gemessenen bzw. berechneten Werte für Temperatur, Luftdruck und reduzierten Luftdruck auf einer 4-stelligen 7-Segmentanzeige mit I2C-Schnittstelle aus. Die Ausgabe erfolgt auf einer Anzeige von Sparkfun, für die ich auch eine Library geschrieben habe.

Neben der Library MyBMP280 werden noch folgende Libraries benötigt:

  • MySparkfun7SegI2C: Meine Library für die 7-Segmentanzeige kann hier heruntergeladen werden: 7-Segm.anz. Sparkfun
  • TinyWireM: Zur I2C-Kommunikation für Attiny, ein Link dazu ist hier zu finden: Fremd-Libraries


//Testprogramm für Luftdrucksensor BMP280
//Code fuer Attiny
//Author Retian
//Version 2.0


#include <MySparkfun7SegI2C.h>
#include <MyBMP280.h>


MyBMP280 BMP(0x77);
MySparkfun7SegI2C Seg7(0x71);


int hoehe = 460; //Standorthoehe ueber dem Meer


void setup() {
  if (BMP.isReady()) BMP.init();
  else while(1); //Im Fehlerfall geht's hier nicht weiter!
}


void loop() {
  //Anzeige der Temperatur
  float temp = BMP.readTemp();
  Seg7.sendFloatVal(temp);
  delay(2000);
  //Anzeige des Luftdrucks
  float pressure = BMP.readPress();
  Seg7.sendFloatVal(pressure);
  delay(2000);
  //Anzeige des reduzierten Luftdrucks
  float redPress = BMP.readReducedPress(hoehe);
  Seg7.sendFloatVal(redPress);
  delay(2000);
}


Zur Library Luftdrucksensor BMP280 oder zu den Funktionen