Hallo, mein Name ist Mareike. Durch meinen verstorbenen Sohn wurde ich auf das Thema Arduino/ESP8266 aufmerksam, und ich möchte seine alte Wetterstation reparieren. Hier ist mein aktuelles Problem:
Obwohl alle Sensoren (MLX90614, BMP280/BME280) erfolgreich vom I2C-Scanner erkannt werden, funktionieren die Datenleseoperationen im Hauptsketch nicht wie erwartet. Der MLX90614 ist an den Standard-I2C-Pins angeschlossen, während der BMP280/BME280 an anderen Pins angeschlossen ist, die mit Wire.begin() initialisiert wurden. Es besteht Unsicherheit darüber, warum die Sensoren vom I2C-Scanner erkannt werden, aber die Daten im Hauptsketch nicht erfolgreich gelesen werden können.
Ich habe im Internet gelesen, dass man auch alle SDA- und SCL-Kabel der Sensoren zusammenlöten kann und dann auf die SDA- und SCL-Pins gehen kann. Oder soll ich so etwas lassen und gleich einen I2C-Multiplexer verwenden?
So sind die Sensoren angeschlossen:
Die "Loop"-Methode ist leer, somit habe ich das hier nicht mit gepostet.
MLX90614 SLC -> Pin 4, SCL -> >Pin 5
BMP280: SLC -> Pin 0 , SDA -> Pin 2
BME280: SLC -> Pin 12, SDA -> 13
Alle sind mit 3.3V und GND verbunden.
Das Hauptsketch: `
#define BME_SDA 13
#define BME_SCL 12
#define BMP_SCL 0
#define BMP_SDA 2
Adafruit_BMP280 bmp;
Adafruit_BME280 bme;
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
void setup()
{
Serial.begin(115200);
Serial.println('\n');
Wire.begin();
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to ");
Serial.print(WIFI_SSID);
Serial.println(" ...");
int i = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(1500);
Serial.println(".");
if(i > 10){
ESP.restart();
}
}
sensorState();
}
void sensorState() {
bool allSensorsWorking = true;
sensors.begin();
float tempC = sensors.getTempCByIndex(0);
if (tempC == DEVICE_DISCONNECTED_C) {
Firebase.setString( fb,"/sensorStates/DS18b20", "Der DS18b20 funktioniert nicht!");
Serial.println("Der DS18b20 funktioniert nicht!");
allSensorsWorking = false;
}
Wire.begin(4, 5);
if (!mlx.begin(0x5A)) {
Firebase.setString(fb, "/sensorStates/MLX90614", "Der MLX90614 funktioniert nicht!");
Serial.println("Der MLX funktioniert nicht!");
allSensorsWorking = false;
}
Wire.begin(BMP_SDA, BMP_SCL);
if (!bmp.begin(0x58)) {
Firebase.setString(fb, "/sensorStates/BMP", "Der BMP280 funktioniert nicht!");
Serial.println("Der BMP280 funktioniert nicht!");
allSensorsWorking = false;
}
dht.begin();
if (isnan(dht.readTemperature()) || isnan(dht.readHumidity())) {
Firebase.setString(fb,"/sensorStates/DHT22", "Der DHT22 funktioniert nicht!");
Serial.println("Der DHT funktioniert nicht!");
allSensorsWorking = false;
}
Wire.begin(BME_SDA, BME_SCL);
if(!bme.begin(0x76)){
Firebase.setString(fb, "/sensorStates/BME280", "Der BME280 funktioniert nicht!");
Serial.println("Der BME280 funktioniert nicht!");
allSensorsWorking = false;
}
if (allSensorsWorking) {
Firebase.setString(fb, "/sensorStates/DS18b20", "OK");
Firebase.setString(fb, "/sensorStates/MLX90614", "OK");
Firebase.setString(fb, "/sensorStates/BMP280", "OK");
Firebase.setString(fb, "/sensorStates/DHT22", "OK");
Firebase.setString(fb, "/sensorStates/BME280", "OK");
}
}`
Vielen Dank im Voraus für jegliche Unterstützung.
Herzliche Grüße,
Mareike