Verwendung der Library für BMP280 mit SPI-Schnittstelle
Anstelle über die I2C-Schnittstelle kann der Sensor von der Library auch über die (Hardware-)SPI-Schnittstelle angesprochen werden. Dabei wird bei der Erstellung einer neuen Instanz - anstelle der I2C-Adresse - der gewünschte CS-Pin (Chipselect-Pin) übergeben, sowie eine Variable namens BMP280_SPI. Diese Variable dient nur dafür, dass die Library erkennt, dass mit der ersten Variablen ein Pin übergeben wird und nicht eine I2C-Adresse.
Beispiel:
#include <MyBMP280.h>
MyBMP280 BMP(10, BMP280_SPI);
Bild: Luftdrucksensor BMP280 auf einem Adafruit Breakout Board mit I2C- und SPI-Schnittstelle und Pegelwandler für Versorgungs- und Logikspannung von 5 V.
Testaufbau mit SPI-Schnittstelle:
Verwendete Bauteile:
- 1 Arduino Nano
- 1 BMP280 Luftdrucksensor von Adafruit
Anschluss des Sensors an Arduino Uno/Nano und Mega:
Arduino Sensor (SPI)
Uno/Nano Mega
5V 5V -> VIN
GND GND -> GND
D13 D52 -> SCK (CLK)
D12 D51 -> SDO (MISO)
D11 D50 -> SDI (MOSI)
Dx Dx -> CS (SS)
Dx: Während die Pins für CLK, MISO und MOSI am Arduino fix vorgegeben sind (Hardware-SPI), kann der SS-Pin (Chipselect CS) softwaremäßig frei vergeben werden. Im nachfolgenden Beispiel wird für Dx der Pin D10 verwendet.
Programmbeispiele MyBMP280 mit SPI-Schnittstelle:
Nachfolgendes Beispiel gibt - sofern ein Sensor erkannt wurde - alle 5 Sekunden Temperatur und Luftdruck am Seriellen Monitor aus:
//Testprogramm für Luftdrucksensor BMP280 mit SPI-Schnittstelle
//Code fuer Arduino
//Author Retian
//Version 1.0
#include <MyBMP280.h>
MyBMP280 BMP(10, BMP280_SPI); //SPI-Interface mit Chipselect-Pin 10
void setup() {
Serial.begin(115200);if (BMP.isReady())
{
Serial.println("BMP280 gefunden!");
BMP.setHandheldLowPower(); //Setzen des Parametersatzes für "Handheld Low Power"
BMP.init();
}
else
{
Serial.println("BMP280 nicht gefunden!");
while (1); //Im Fehlerfall geht's hier nicht weiter!
}
Serial.println();
}
void loop() {
Serial.print("Temperatur: ");
Serial.print(BMP.readTemp());
Serial.println(" Grad C");
Serial.print("Luftdruck : ");
Serial.print(BMP.readPress());
Serial.println(" hPa");
Serial.println();
delay(5000);
}