Kostenloser Versand für Bestellungen über 60 €

So verbinden Sie mehrere BME280-Sensoren über SPI

Der Anschluss mehrerer BME280 Sensoren mit SPI ist genauso einfach wie der Anschluss eines einzelnen Sensors. Glauben Sie es nicht? In diesem Tutorial zeige ich Ihnen, wie Sie vier BME280 Sensoren an den SPI-Bus anschließen. Folgendes müssen Sie tun:

  • Verbinden Sie den VCC-Pin aller vier Sensoren entweder mit dem 5 V oder dem 3,3 V Ausgang Ihres Arduino.
  • Verbinden Sie den GND-Pin aller vier Sensoren mit dem GND des Arduino.
  • Verbinden Sie den SDI-Pin aller vier Sensoren mit dem Digital Pin 13 am Arduino.
  • Verbinden Sie den SCK-Pin aller vier Sensoren mit dem Digital Pin 12 am Arduino.
  • Verbinden Sie den SDO-Pin aller vier Sensoren mit dem digitalen Pin 11 des Arduino.

Wie Sie sehen können, verwende ich normale digitale Pins, um den Sensor zu lesen und zu schreiben. In diesem Fall verwende ich die Software-SPI-Kommunikation.

Aber wir sind noch nicht fertig. Jetzt müssen wir den Chip Select (CS)-Pin jedes Sensors mit einem anderen digitalen Pin auf dem Arduino verbinden. Warum verschiedene Pins? Da jeder digitale Pin eine andere Adresse darstellt, kann der Arduino so erkennen, mit welchem Sensor er kommuniziert. So machen wir es also:

  • Verbinden Sie den CS-Pin des ersten Sensors mit dem Digital-Pin 7 des Arduino.
  • Verbinden Sie den CS-Pin des zweiten Sensors mit dem Digital-Pin 6 des Arduino.
  • Verbinden Sie den CS-Pin des dritten Sensors mit dem Digital-Pin 5 des Arduino.
  • Verbinden Sie den CS-Pin des vierten Sensors mit dem Digital-Pin 4 des Arduino.

Aber wir haben für unsere Kommunikation viele digitale Pins verwendet! Eine andere Möglichkeit, die Sensoren anzuschließen, wäre, die SDI-, SCK- und SDO-Pins der Sensoren mit dem ICSP-Header des Arduino zu verbinden. Das wäre die Hardware-SPI-Kommunikation:

  • Verbinden Sie den SDI-Pin aller vier Sensoren mit dem MOSI-Pin am ICSP-Header des Arduino.
  • Verbinden Sie den SCK-Pin aller vier Sensoren mit dem SCK-Pin am ICSP-Header des Arduino.
  • Verbinden Sie den SDO-Pin aller vier Sensoren mit dem MISO-Pin am ICSP-Header des Arduino.

Wenn Sie so sind wie ich, brauchen Sie auch Hilfe dabei, herauszufinden, welche die MISO- und MOSI-Pins am ICSP-Header sind!

Jetzt brauchen wir die Software. Wenn Sie dies noch nicht getan haben, laden Sie die BlueDot BME280-Bibliothek über die Arduino IDE herunter und installieren Sie sie. Diese Bibliothek enthält einen Beispielcode mit allem, was Sie zum Lesen mehrerer Sensoren auf dem SPI-Bus benötigen.

Gehen Sie zu Sketch -> Include Library -> Manage Libraries… und suchen Sie nach der BlueDot BME280-Bibliothek. Klicken Sie nun darauf und installieren Sie die Bibliothek. Sie können auch das GitHub-Repository besuchen, um die neueste Bibliotheksversion herunterzuladen, oder auf diese Schaltfläche unten klicken.

Führen Sie nach der Installation der Bibliothek das Beispiel für mehrere Sensoren am SPI-Bus aus. Klicken Sie einfach auf File -> Examples -> BlueDot BME280 Library -> BME280_MultipleSensorsSPI.

Die Funktionen für jeden Sensor werden von einem anderen Objekt namens bme1, bme2, bme3 und bme4 angesprochen. Nun beziehen sich die Funktionen, die mit bme1 beginnen, auf den ersten Sensor, Funktionen, die mit bme2 beginnen, auf den zweiten Sensor und das Gleiche gilt für den dritten und vierten Sensor.

    BlueDot_BME280 bme1;                                     //Object for Sensor 1
    BlueDot_BME280 bme2;                                     //Object for Sensor 2
    BlueDot_BME280 bme3;                                     //Object for Sensor 3
    BlueDot_BME280 bme4;                                     //Object for Sensor 4

Der erste Schritt im Programm besteht darin, zwischen Software-SPI und Hardware-SPI zu wählen. Setzen Sie den Parameter auf 0 für Hardware-SPI oder auf 1 für Software-SPI. In diesem Fall verwende ich Software-SPI.

    //0:                                                     //Hardware-SPI
    //1:                                                     //Software-SPI

bme1.parameter.communication = 1; //Choose an SPI-Mode for Sensor 1
bme2.parameter.communication = 1; //Choose an SPI-Mode for Sensor 2
bme3.parameter.communication = 1; //Choose an SPI-Mode for Sensor 3
bme4.parameter.communication = 1; //Choose an SPI-Mode for Sensor 4

Der nächste Schritt besteht darin, ein Ziel für den Chip Select (CS)-Pin jedes Sensors zu definieren. Ich habe die digitalen Pins 4, 5, 6 und 7 gewählt.

  //Set the Chip Select pins for the SPI Communication.
  //Each sensor must have a different Chip Select pin.
  //Connect the Chip Select pins from the sensors to regular digital pins on the Arduino.

bme1.parameter.SPI_cs = 4; //Chip Select Pin for Sensor 1
bme2.parameter.SPI_cs = 5; //Chip Select Pin for Sensor 2
bme3.parameter.SPI_cs = 6; //Chip Select Pin for Sensor 3
bme4.parameter.SPI_cs = 7; //Chip Select Pin for Sensor 4

Wenn Sie Hardware-SPI verwenden, müssen Sie nichts weiter tun. Laden Sie einfach Ihren Code hoch und lesen Sie die Sensoren aus. Wenn Sie jedoch Software-SPI verwenden, müssen Sie weiterhin Ziele für die SDI-, SDO- und SCK-Pins definieren.

  //Per default the MOSI line is on the pin 11, the MISO line on the pin 12 and the SCK line on the pin 13.
  //You may change those pins if you like, but remember to connect that pin to all sensors.

bme1.parameter.SPI_mosi = 13; //The MOSI signal must be connected to the same pin for all sensors
bme2.parameter.SPI_mosi = 13; //The MOSI signal must be connected to the same pin for all sensors
bme3.parameter.SPI_mosi = 13; //The MOSI signal must be connected to the same pin for all sensors
bme4.parameter.SPI_mosi = 13; //The MOSI signal must be connected to the same pin for all sensors
bme1.parameter.SPI_miso = 11; //The MISO signal must be connected to the same pin for all sensors
bme2.parameter.SPI_miso = 11; //The MISO signal must be connected to the same pin for all sensors
bme3.parameter.SPI_miso = 11; //The MISO signal must be connected to the same pin for all sensors
bme4.parameter.SPI_miso = 11; //The MISO signal must be connected to the same pin for all sensors
bme1.parameter.SPI_sck = 12; //The SCK signal must be connected to the same pin for all sensors
bme2.parameter.SPI_sck = 12; //The SCK signal must be connected to the same pin for all sensors
bme3.parameter.SPI_sck = 12; //The SCK signal must be connected to the same pin for all sensors
bme4.parameter.SPI_sck = 12; //The SCK signal must be connected to the same pin for all sensors

Jetzt sind wir fertig! Hier finden Sie eine Übersicht über die für jeden Sensor verfügbaren Funktionen:

    Serial.println(bme1.readTempC());
    Serial.println(bme1.readTempF());
    Serial.println(bme1.readHumidity());
    Serial.println(bme1.readPressure());
    Serial.println(bme1.readAltitudeMeter());
    Serial.println(bme1.readAltitudeFeet());
   
    Serial.println(bme2.readTempC());
    Serial.println(bme2.readTempF());
    Serial.println(bme2.readHumidity());
    Serial.println(bme2.readPressure());
    Serial.println(bme2.readAltitudeMeter());
    Serial.println(bme2.readAltitudeFeet());

    Serial.println(bme3.readTempC());
    Serial.println(bme3.readTempF());
    Serial.println(bme3.readHumidity());
    Serial.println(bme3.readPressure());
    Serial.println(bme3.readAltitudeMeter());
    Serial.println(bme3.readAltitudeFeet());

    Serial.println(bme4.readTempC());
    Serial.println(bme4.readTempF());
    Serial.println(bme4.readHumidity());
    Serial.println(bme4.readPressure());
    Serial.println(bme4.readAltitudeMeter());
    Serial.println(bme4.readAltitudeFeet());
 

Laden Sie abschließend den Code hoch und öffnen Sie den seriellen Monitor mit einer Geschwindigkeit von 9600 Baud, um Temperatur, Luftfeuchtigkeit, Druck und Höhe von allen vier Sensoren abzulesen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert