Ich habe mal was aus meinen großen Sketch was raus kopiert. Läuft bei mir mit 4 Sensoren sollte aber auch mit 20 gehen. Du musst nur noch deine Adressen eintragen.
Aber ich kann es nicht testen.
#include <DallasTemperature.h>
#include <OneWire.h>
#define ONE_WIRE_BUS D1
char Temperature[20][6]; // Rücklauf Kessel Warmwasser Vorlauf
unsigned long previousMillis = 0;
int numberOfDevices; // Anzahl der gefundenen Thermometer
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
void setup() {
Serial.begin(115200);
DS18B20.begin();
numberOfDevices = DS18B20.getDeviceCount(); // Ermittelt die Anzahl von Ds18b20 am Pin
Serial.println(numberOfDevices);
DS18B20.setWaitForConversion(false);
DS18B20.requestTemperatures();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 5000) { // Temperatur aller 5 Sekunden auslesen
previousMillis = currentMillis;
getTemperature();
}
}
void getTemperature() {
DeviceAddress sensor[20][8] = { {0x28, 0xFF, 0xF6, 0x1E, 0x81, 0x16, 0x04, 0xB1} , {0x28, 0xFF, 0x2E, 0x17, 0x81, 0x16, 0x04, 0x42} ,
{0x28, 0xFF, 0x29, 0x17, 0x81, 0x16, 0x04, 0x13} , {0x28, 0xFF, 0x03, 0x18, 0x81, 0x16, 0x04, 0xCC}
}; //Rücklauf, Kessel, Warmwasser, Vorlauf
float temp[20];
for (byte i = 0; i < numberOfDevices; i++ ) {
temp[i] = DS18B20.getTempC(*sensor[i]); // Temperatur lesen
if (temp[i] == -127.00 ) { // bei Fehler abbrechen
continue;
}
dtostrf(temp[i], 5, 2, Temperature[i]);
Serial.print(i);
Serial.print(" ");
Serial.println(Temperature[i]);
}
DS18B20.requestTemperatures();
}
Gruß fips