Guten Morgen!
Ich wollte heute mal meinen freien Tag nutzen um mit einem schon länger ruhenden Projekt weiterzumachen. Und zwar geht es um die Erfassung der Temperatur an verschiedenen Stellen in einer Zisterne sowie der Außenlufttemperatur mit einem ESP8266.
Die Sensoren sind alle angebracht und auch verdrahtet, nun kommt die eigentliche Programmierung.
Und die möchte noch nicht so richtig.
Mit Beispielprogrammen, die nach angeschlossenen Sensoren suchen, funktioniert alles problemlos, ich kann die Adressen und Temperaturwerte von allen fünf Sensoren auslesen.
Jetzt möchte ich jedem Sensor einen mehr oder weniger sinnvollen Namen geben und diesem seine feste Adresse zuweisen. Das führt zu einem interessanten Fehler:
Wenn ich mein Programm aufspiele funktioniert es nicht, es kommt fünf mal der gleiche, unplausible Wert zurück. Wenn ich danach das auf fünf Sensoren erweiterte Beispielprogramm (nach Sensoren suchen und alle Sensordetails ausgeben) starte funktioniert es immernoch. Wenn ich danach mein Programm aufspiele funktioniert das plötzlich auch!
Nur nach einmal Stromversorgung trennen und wieder anschließen funktioniert es eben nicht mehr. Erst wenn ich wieder das Beispielprogramm aufspiele und starte und dann wieder mein Programm funktioniert es wieder. Ich verstehe das nicht...
Hier mein Code, eigentlich sehr simpel:
#include <OneWire.h>
#include <DallasTemperature.h>
#define oneWirePin D6
float behaelter_luft, behaelter_oben, behaelter_mitte, behaelter_unten, aussenluft = 0.00;
OneWire oneWire(oneWirePin);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor4 = { 0x28, 0xAA, 0xA0, 0xC0, 0x13, 0x13, 0x02, 0x2C };
DeviceAddress sensor3 = { 0x28, 0x0F, 0xE2, 0x7C, 0x1B, 0x13, 0x01, 0xB5 };
DeviceAddress sensor2 = { 0x28, 0x2A, 0x82, 0xDC, 0x1B, 0x13, 0x01, 0x50 };
DeviceAddress sensor1 = { 0x28, 0xAA, 0x21, 0xB8, 0x13, 0x13, 0x02, 0x9E };
DeviceAddress lufttemperatur = { 0x28, 0x70, 0x01, 0x77, 0x1B, 0x13, 0x01, 0x09 };
void setup() {
Serial.begin(9600);
sensors.begin();
sensors.setResolution(sensor4, 12);
sensors.setResolution(sensor3, 12);
sensors.setResolution(sensor2, 12);
sensors.setResolution(sensor1, 12);
sensors.setResolution(lufttemperatur, 12);
}
void loop() {
updateTemperature();
Serial.println(behaelter_luft);
Serial.println(behaelter_oben);
Serial.println(behaelter_mitte);
Serial.println(behaelter_unten);
Serial.println(aussenluft);
Serial.println();
delay(1000);
}
void updateTemperature(){
behaelter_luft = sensors.getTempC(sensor4);
behaelter_oben = sensors.getTempC(sensor3);
behaelter_mitte = sensors.getTempC(sensor2);
behaelter_unten = sensors.getTempC(sensor1);
aussenluft = sensors.getTempC(lufttemperatur);
}
Ich habe auch schon zum Spaß an zig Stellen ein paar ms Delay eingebaut, nicht, dass den Sensoren irgendwas zu schnell geht oder so. Das brachte alles keine Veränderung.
Hat da jemand eine Idee? Oder sieht eine andere Möglichkeit, den Sensoren feste Adressen zu geben damit ich auch weiß, welchen ich auslese?
Ich kann ja nicht die erste sein, die ein paar DS18B20 Sensoren auslesen möchte...
LG Britta