Esp8266 mit mehreren Temperaturfühlern DS18B20

Hallo und Gruß ins Forum.

Ich bin neu hier und noch am Anfang mit meinem Arduino.

Ich würde gerne über OneWire mehrere DS18B20 über einen Datenpin auslesen.
Als Software arbeite ich mit der Arduino IDE.

Das ich die Adressen der Sensoren auslese, soweit bin ich bereits.

Habe mich dann an den Script eines älteren Beitrags von Erl1 vom 11.08.2013 mit dem Topic Zwei DS18s20 auslesen versucht, meine Sensoradressen natürlich ersetzt:

#include <OneWire.h>
#include <DallasTemperature.h>

float S1;
float S2;
long vorhermillis = millis();

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Sensor1 = { 0x10, 0xDE, 0x29, 0x95, 0x2, 0x8, 0x0, 0x7E };
DeviceAddress Sensor2 = { 0x10, 0x3, 0xCF, 0x95, 0x2, 0x8, 0x0, 0xB6 };

void setup ()
{
Serial.begin(9600);
sensors.begin();

sensors.setResolution(Sensor1, 12); // set the resolution
sensors.setResolution(Sensor2, 12); // set the resolution
}

void loop ()
{
if (millis() - vorhermillis > 1000)
{
vorhermillis = millis();
sensors.requestTemperatures();
S1 = sensors.getTempC(Sensor1);
S2 = sensors.getTempC(Sensor2);
Serial.println(S1);
Serial.println(S2);
}
}

Allerdings wird mir hier bei beiden Sensoren in der Konsole der Arduino IDE ein Temperaturwert von -127 Grad ausgegeben.

Mit einem anderen Script gibt er mir die Temperaturen richtig aus, allerdings sind in diesem Script die Sensoren nicht adressiert, was im weiteren Aufbau meines Projektes wohl nötig ist, da es insgesammt mal 10 Sensoren werden sollen, die dann auch übers WLan in einer HTML Seite zur Verfügung gestellt werden sollen, um die Temperaturen meiner Heizungsspeicher und Vorlauftemperaturen zu überwachen.

Mit div. Scripts aus dem Netz die ein ähnliches Projekt hatten wie ich, bekam ich bisher nicht zum laufen, bzw. Keine Ausgabe in der Konsole.

Evtl. Kann mich hier wer unterstützen.

Danke vorab.

Gruß kofske

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

In den Beispielen der DallasTemperature gibt es doch genug mit mehreren Sensoren.

Grußm Tommy

 #include <OneWire.h>
#include <DallasTemperature.h>

float S1;
float S2;
long vorhermillis = millis();

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Sensor1 = { 0x10, 0xDE, 0x29, 0x95, 0x2, 0x8, 0x0, 0x7E }; 
DeviceAddress Sensor2 = { 0x10, 0x3, 0xCF, 0x95, 0x2, 0x8, 0x0, 0xB6 }; 


void setup () 
{        
    Serial.begin(9600);
    sensors.begin();
             
    sensors.setResolution(Sensor1, 12); // set the resolution
    sensors.setResolution(Sensor2, 12); // set the resolution
}

void loop () 
{  
 if (millis() - vorhermillis > 1000)
 {  
   vorhermillis = millis();
   sensors.requestTemperatures();
   S1 = sensors.getTempC(Sensor1);
   S2 = sensors.getTempC(Sensor2);
   Serial.println(S1);
   Serial.println(S2);
 }
}

Sketch Ds18b20 Adressen auslesen

Sketch Ds18b20 per Adressen ansprechen

Ds18B20 Liste Tab und Webseite

kofske:
was im weiteren Aufbau meines Projektes wohl nötig ist, da es insgesammt mal 10 Sensoren werden sollen, die dann auch übers WLan in einer HTML Seite zur Verfügung gestellt werden sollen, um die Temperaturen meiner Heizungsspeicher und Vorlauftemperaturen zu überwachen.

Projekt Heizungsüberwachung

Gruß Fips

Hallo Fips.

Danke für deinen Post. Werde ich morgen gleich mal testen.

Danke für den Hinweis. Habe den Code gerade nochmal neu gepostet. Ja wie gesagt, es ist nicht so einfach was zu finden im Netz auf das man aufbauen kann. Der Code wäre super, wenn er mir auch was anderes als -127 ausgeben würde. Kann es sein, das hier die Bitrate der Sensoren eine andere sein muss, also nicht 12 wie hier im Script.

kofske:
Kann es sein, das hier die Bitrate der Sensoren eine andere sein muss, also nicht 12 wie hier im Script.

Das hat mit der Auflösung nichts zu tun. Nur die Zeit die der Sensor zur Konvertierung der Temperatur braucht verlängert sich.

Auflösung einstellen 9, 10, 11, 12 --> 0.5°C, 0.25°C, 0.125°C, 0.0625°C --> 93.75 ms, 187.5 ms, 375 ms, 750 ms

Gruß Fips

Ok. Danke.

Bin hier schon mal durch seine Hilfe etwas schlauer geworden.

Woren kann es dann liegen das bei meinem Script nur -127 ausgegeben wird.

kofske:
Woren kann es dann liegen das bei meinem Script nur -127 ausgegeben wird.

Entweder sind deine Sensor-Adressen falsch oder die Sensoren hast du falsch angeschlossen.

Hast du einen Pullup-Widerstand dran ?

Nebenbei, blockiert die Messung die loop() Schleife.

   sensors.requestTemperatures();  // fordert den Sensor auf die Temperaturmessung zu beginnen.
   S1 = sensors.getTempC(Sensor1); // blockiert bis der Messwert vorliegt -> 9, 10, 11, 12 -->  93.75 ms, 187.5 ms, 375 ms, 750 ms

Gruß Fips

Hi

kofske:
Ok. Danke.

Bin hier schon mal durch seine Hilfe etwas schlauer geworden.

Woren kann es dann liegen das bei meinem Script nur -127 ausgegeben wird.

Das ist der von Dir benutzten Lib geschuldet - in Der steht drin, daß als Rückgabewert f+r keinen Sensor -127 zurück gegeben wird.
Da der Sensor 'von Haus aus' -55...125°C Messbereich hat, ist dieser Wert eindeutig als Fehler erkennbar.

MfG

Danke allen für eure Unterstützung.

Das Problem war nur eine Kleinigkeit.

Der Script frägt ja ONE_WIRE_BUS 2 ab.
Da ich sonst immer mit D2 gearbeitet hab war hier das Problem.
Habe ONE_WIRE_BUS auf 4 geändert, jetzt läufts.

Danke euch nochmal

kofske:
Danke allen für eure Unterstützung.

Danke euch nochmal

Prima, das wir dir helfen konnten und das es jetzt funktioniert.
Danke für deine Rückmeldung.