DS18B20 => -127 (not connected)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Leute,

    ich schon wieder. Nachdem der ESP jetzt stabilläuft komme ich trotzdem wieder nicht weiter. Hab schon viel gegooglet aber nichts gefunden.
    Ich habe einen DS18B20 an GPIO05 Pin 14 laut diesem Datenblatt angeschlossen. 4,7k oder 2,2k Pullup auf die Dataline. 3V3 oder 5V Stromversorgung für den DS versucht. Verschiedene GPIOs versucht. Aber ich bekomme immer nur die Ausgabe -127°C, was laut dem Code in der [font="SFMono-Regular, Consolas,"]DallasTemperature.h das bedeutet: "[font="SFMono-Regular, Consolas,"]#define DEVICE_DISCONNECTED_C -127"[/font][/font]

    [font="SFMono-Regular, Consolas,"][font="SFMono-Regular, Consolas,"]Ich komme einfach wieder nicht weiter ohne zu fragen.[/font][/font]

    [font="SFMono-Regular, Consolas,"][font="SFMono-Regular, Consolas,"]Habt ihr noch eine Idee? Anbei der Code:[/font][/font]
    [font="SFMono-Regular, Consolas,"][font="SFMono-Regular, Consolas,"]Ohne den OTA Part habe ich es auch schon probiert.[/font][/font]

    [font="SFMono-Regular, Consolas,"][font="SFMono-Regular, Consolas,"]Edit: leider versaut das Forum den Code irgendwie und packt BB-Code als HTML Tags rein -.-[/font][/font]

    [font="SFMono-Regular, Consolas,"][font="SFMono-Regular, Consolas,"]

    Code
    /**[/font][/size][/color][/font][/size][/color]   @file OTA-mDNS-SPIFFS.ino   @author Pascal Gollor (http://www.pgollor.de/cms/)   @date 2015-09-18   changelog:   2015-10-22:   - Use new ArduinoOTA library.   - loadConfig function can handle different line endings   - remove mDNS studd. ArduinoOTA handle it.*/// includes#include <ESP8266WiFi.h>#include <ESP8266mDNS.h>#include <WiFiUdp.h>#include <FS.h>#include <ArduinoOTA.h>#include <OneWire.h>#include <DallasTemperature.h>#define ONE_WIRE_BUS 14  // DS18B20 pinOneWire oW(ONE_WIRE_BUS); //generate instance of OneWireDallasTemperature DS18B20(&oW); // generate Instance of the DallasTemperature Libchar temperatureCString[6];char temperatureFString[6];unsigned long previousMillis = 0;const long interval = 1000;/**   @brief mDNS and OTA Constants   @{*/#define HOSTNAME "ESP-temp" ///< Hostename. The setup function adds the Chip ID at the end./// @}/**   @brief Default WiFi connection information.   @{*/const char* ap_default_ssid = "MeganinchensWLAN"; ///< Default SSID.const char* ap_default_psk = "020219820810198216042007"; ///< Default PSK./// @}/// Uncomment the next line for verbose output over UART.//#define SERIAL_VERBOSE/**   @brief Read WiFi connection information from file system.   @param ssid String pointer for storing SSID.   @param pass String pointer for storing PSK.   @return True or False.   The config file have to containt the WiFi SSID in the first line   and the WiFi PSK in the second line.   Line seperator can be \r\n (CR LF) \r or \n.*/bool loadConfig(String *ssid, String *pass){  // open file for reading.  File configFile = SPIFFS.open("/cl_conf.txt", "r");  if (!configFile)  {    Serial.println("Failed to open cl_conf.txt.");    return false;  }  // Read content from config file.  String content = configFile.readString();  configFile.close();  content.trim();  // Check if ther is a second line available.  int8_t pos = content.indexOf("\r\n");  uint8_t le = 2;  // check for linux and mac line ending.  if (pos == -1)  {    le = 1;    pos = content.indexOf("\n");    if (pos == -1)    {      pos = content.indexOf("\r");    }  }  // If there is no second line: Some information is missing.  if (pos == -1)  {    Serial.println("Infvalid content.");    Serial.println(content);    return false;  }  // Store SSID and PSK into string vars.  *ssid = content.substring(0, pos);  *pass = content.substring(pos + le);  ssid->trim();  pass->trim();#ifdef SERIAL_VERBOSE  Serial.println("----- file content -----");  Serial.println(content);  Serial.println("----- file content -----");  Serial.println("ssid: " + *ssid);  Serial.println("psk:  " + *pass);#endif  return true;} // loadConfig/**   @brief Save WiFi SSID and PSK to configuration file.   @param ssid SSID as string pointer.   @param pass PSK as string pointer,   @return True or False.*/bool saveConfig(String *ssid, String *pass){  // Open config file for writing.  File configFile = SPIFFS.open("/cl_conf.txt", "w");  if (!configFile)  {    Serial.println("Failed to open cl_conf.txt for writing");    return false;  }  // Save SSID and PSK.  configFile.println(*ssid);  configFile.println(*pass);  configFile.close();  return true;} // saveConfig/**   @brief Arduino setup function.*/void setup(){  String station_ssid = "";  String station_psk = "";  Serial.begin(115200);  delay(100);  Serial.println("\r\n");  Serial.print("Chip ID: 0x");  Serial.println(ESP.getChipId(), HEX);  // Set Hostname.  String hostname(HOSTNAME);  //hostname += String(ESP.getChipId(), HEX);  WiFi.hostname(hostname);  // Print hostname.  Serial.println("Hostname: " + hostname);  //Serial.println(WiFi.hostname());  // Initialize file system.  if (!SPIFFS.begin())  {    Serial.println("Failed to mount file system");    return;  }  // Load wifi connection information.  if (! loadConfig(&station_ssid, &station_psk))  {    station_ssid = "";    station_psk = "";    Serial.println("No WiFi connection information available.");  }  // Check WiFi connection  // ... check mode  if (WiFi.getMode() != WIFI_STA)  {    WiFi.mode(WIFI_STA);    delay(10);  }  // ... Compare file config with sdk config.  if (WiFi.SSID() != station_ssid || WiFi.psk() != station_psk)  {    Serial.println("WiFi config changed.");    // ... Try to connect to WiFi station.    WiFi.begin(station_ssid.c_str(), station_psk.c_str());    // ... Pritn new SSID    Serial.print("new SSID: ");    Serial.println(WiFi.SSID());    // ... Uncomment this for debugging output.    //WiFi.printDiag(Serial);  }  else  {    // ... Begin with sdk config.    WiFi.begin();  }  Serial.println("Wait for WiFi connection.");  // ... Give ESP 10 seconds to connect to station.  unsigned long startTime = millis();  while (WiFi.status() != WL_CONNECTED && millis() - startTime < 10000)  {    Serial.write('.');    //Serial.print(WiFi.status());    delay(500);  }  Serial.println();  // Check connection  if (WiFi.status() == WL_CONNECTED)  {    // ... print IP Address    Serial.print("IP address: ");    Serial.println(WiFi.localIP());  }  else  {    Serial.println("Can not connect to WiFi station. Go into AP mode.");    // Go into software AP mode.    WiFi.mode(WIFI_AP);    delay(10);    WiFi.softAP(ap_default_ssid, ap_default_psk);    Serial.print("IP address: ");    Serial.println(WiFi.softAPIP());  }  // Start OTA server.  ArduinoOTA.setHostname((const char *)hostname.c_str());  ArduinoOTA.begin();  // Startthe Sensor Library  DS18B20.begin();}float getTemperature() {  float tempC;  char myTemp[6];  DS18B20.requestTemperatures();  tempC = DS18B20.getTempCByIndex(0);  return tempC;}/**   @brief Arduino loop function.*/void loop(){  // Handle OTA server.  ArduinoOTA.handle();  yield();  unsigned long currentMillis = millis();      if (currentMillis - previousMillis >= interval) {    previousMillis = currentMillis;    Serial.print("Temp: ");    Serial.println(getTemperature());  }[color=#24292e][size=12][font="SFMono-Regular, Consolas,"][color=#24292e][size=12][font="SFMono-Regular, Consolas,"]}

    [/font][/size][/color][/font][/size][/color]

    Einmal editiert, zuletzt von DerMega (29. April 2017 um 23:40)

  • Servus,
    falsche Verkabelung/Wackelkontakt?
    Sensor ist ok? Kein Fake-Sensor?

    Mal² auf, wie Du das verkabelt hast.
    Sketch sollte passen - das DS18B20 Handling ist sehr genügsam. Mehr habe ich -> hier z.B. <- auch nicht drin ...

    (bin mal gespannt ...)

    ciao,
    -ds-

  • Hoffe das ist halbwegs normgerecht und lesbar. Das Letzte Mal hab ich das vor 14 Jahren in der FOS gemacht :D

    Die Sensoren sollten funktionieren. Sind aus der selben Bestellung. Einige davon sind schon im Funksensorprojekt hier aus dem Forum gelaufen. Einen schon verdrahteten aus dem Projekt habe ich hier verwendet und zum Testen habe ich dann noch einen neuen aus der Schachtel genommen und mal mit dem 2,2k als Pullup verdrahtet.
    Wie gesagt, Versorgungsspannung des DS habe ich sowohl 3V3 als auch 5V getestet. Irgendwas einfaches muss ich übersehen haben.

  • Servus,


    ... normgerecht und lesbar.

    normgerecht ist nicht so wichtig. Sieht doch super aus :thumbs1:
    Das sollte passen ... sehr sonderbar ...

    Wird der Sensor warm?
    Gern genommen wird, dass der Sensor falsch angeschlossen wird, weil der Kommentar im Datenblatt (bottom view) leicht übersehen wird.

    Versuch' vielleicht mal einen Code, der "generisch" nur oneWire nutzt.
    Hier: http://playground.arduino.cc/Learning/OneWire
    wäre dazu ein Beispiel. Da müsstest Du halt den Pin anpassen.

    //EDIT: Im sketch hast Du Pin #14 ... in der Schaltung Pin #5!


    Mal² auf, ...

    //OT: die Kurzschreibweise ist keinem aufgefallen?

    ciao,
    -ds-

  • Tausch der GPIOs 04 und 05 erbrachte keine Veränderung. Leider.
    Warm wird er auch nicht.
    Ich teste heute Abend mal den Code von Dreamshader.

    Jetzt ist erstmal son soziales Zeug mit essen gehen und Freunde und son Killefatz angesagt.
    Hält einen alles nur von den wichtigen Dingen ab :D

  • Oh man,

    sch... die Wand an. Das wars. -.-
    War klar, dass das wieder sowas läppsches sein musste :(
    Vielen vielen Dank.

    Hast du einen Link parat, wo ich die richtigen Pin-Nummern für die GPIOs des 07ers finden kann? DA hab ich mich mit dem Datenblatt wohl komplett verfranst :(

  • Hmmmm danke für den Link aber irgendwie finde ich da nichts in der Richtung:
    GPIO05 => Sketch (5)
    GPIO04 => Sketch (4)
    GPIO02 => Sketch (2)

    weisst du was ich meine? Hab mir da alles angeschaut aber nur die gleichen "falschen" Angaben gefunden wie in dem Datenblatt vom Chip, durch die ich mich hab in die Irre führen lassen. :-/

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!