Hallo,
ich möchte in bestimmten Intervallen 2 Sensoren BME280 auslesen.
Da sie beide am I2C hängen, kann ich ihnen auch gut 2 verschiedene Adressen zuweisen.
Meine Frage ist jetzt, wie ich es programmieren muss, die beiden Sensoren auszulesen.
Meine Idee wäre, vor jedem aulesen mit bme.begin(0x76) oder bme.beginn(0x77) den passenden Sensor zu initialisieren und auszulesen.
Bin ich da richtig?
Vielen Dank
Thomas
Du musst zwei verschiedene Sensor Objekte anlegen
Ein Objekt in der Programmierung bezeichnet eine inhaltlich zusammengehörige Datenmenge:
Jedes Objekt hat einen Zustand, ein Verhalten und eine Identität. Der Zustand des Objektes setzt sich aus seinen Eigenschaften (Attribute) und Verbindungen zu anderen Objekten zusammen. Das Verhalten des Objektes wird durch die Menge seiner Methoden beschrieben. Die Identität unterscheidet ein Objekt von anderen Objekten, auch wenn diese anderen Objekte den gleichen Zustand und das gleiche Verhalten haben.
Das genaue Vorgehen hängt auch stark von der verwendeten Bibliothek ab. Da muss man mal in den Header schauen was die erwarten. Adafruit z.B. scheint begin(adr) zu unterstützten:
/*!
* @file Adafruit_BME280.h
*
* Designed specifically to work with the Adafruit BME280 Breakout
* ----> http://www.adafruit.com/products/2650
*
* These sensors use I2C or SPI to communicate, 2 or 4 pins are required
* to interface.
*
* Adafruit invests time and resources providing this open source code,
* please support Adafruit and open-source hardware by purchasing
* products from Adafruit!
*
* Written by Kevin "KTOWN" Townsend for Adafruit Industries.
*
* BSD license, all text here must be included in any redistribution.
* See the LICENSE file for details.
*
*/
This file has been truncated. show original
Wäre es eine Möglichkeit, bei jeden Sensor SDO mit einem DigitalOutput zu verbinden und darüber 0x76 oder 0x77 zuzuweisen?
Dann könnte ich den auszulesenden Sensor auf high stellen und 0x77 auslesen und danach den anderen Sensor auf high und wieder 0x77 auslesen.
Wäre es eine Möglichkeit, bei jeden Sensor SDO mit einem DigitalOutput zu verbinden und darüber 0x76 oder 0x77 zuzuweisen?
Lege die Adressen fest. Was anderes ist Unsinn. Die Sensoren in Software umzuschalten ist was man bei SPI macht (über den Chip Select Eingang). Aber nicht I2C
In der Software musst du immer noch zwei Objekte anlegen und dann jeweils über begin(adr) anders initialisieren. Ganz normale objektorientierte Programmierung
Ja ok.
Von ganz normaler objektorientierter Programmierung habe ich leider so gar keine Ahnung.
Wie setze ich das um?
Etwa abwechselnd bme1.begin(0x76) und bme2.begin(0x77) im sketch aufrufen?
Etwa abwechselnd bme1.begin(0x76) und bme2.begin(0x77) im sketch aufrufen?
Wieso abwechselnd? begin() macht man jeweils nur einmal pro Sensor in setup(). Das ist nicht anders wie wenn man nur einen Sensor hat
Die Aulese-Methoden ruft man dann halt mit dem entsprechenden Objekt auf:
Serial.print(bme1.readPressure());
Serial.print(bme2.readPressure());
Oder was auch immer man mit den Daten machen will
Tequilamixer:
Wie setze ich das um?
Etwa abwechselnd bme1.begin(0x76) und bme2.begin(0x77) im sketch aufrufen?
warum liest du nicht, was Serenifly dir geschrieben hat ?
In einem Link wird dir das ganz genau vorgegeben.
mit dem Wikipedia-Eintrag von Serenifly kam ich leider nicht zurecht.
Aber durch seinen letzten Beitrag ist mit das Vorgehen klar geworden.
Vielen Dank, ich werds so probieren!
Tequilamixer:
mit dem Wikipedia-Eintrag von Serenifly kam ich leider nicht zurecht.
Aber durch seinen letzten Beitrag ist mit das Vorgehen klar geworden.
Vielen Dank, ich werds so probieren!
Du solltest auch alles lesen. :o