ESP8266, DS18B20, Datenübergabe an PHP

Hallo zusammen,

Ich sitze gerade an meinem ersten Arduino Sketch und bin augenscheinlich zu doof das angelesene Wissen einzusetzen.

Ziel: Mit ESP8266 und einem DS18B20 die Temperatur des Pools zyklisch auslesen, an meinen Raspberry mittels PHP übergeben und in den DeepSleep gehen.

Mit verschiedenen (zusammengeklaubten) Quellen habe ich alles was ich haben möchte soweit am laufen das der ESP eine Webseite erzeugt (siehe unteren Code) mit allem was ich haben möchte.

Ich scheitere jedoch daran von Webserver auf Webclient zu wechseln und die Seite aufzurufen.

Das zusammensetzen der URL bekomme ich hin, aber dann komme ich nicht weiter (host ist mit const char* host = "raspberry1":wink: definiert.

String url = "/fb/d1mini.php?";
       url = url + "&Datum="+datum;
       url = url + "&Zeit="+zeit;
       url = url + "&Device="+device;
       url = url + "&Ubatt="+Ubatt;
       url = url + "&Wert="+temperatureCString;
       client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                    "Host: " + host + "\r\n" +
                    "Connection: close\r\n\r\n");

Kann mir irgendjemand DAUverständlich helfen?

Ich habe viele Verschiedene Ansätze gelesen aber irgendwie bin ich nicht in der Lage das gelesene umzusetzen.

Die erstellte Url funktioniert wenn man diese in den Browser kopiert und absendet.

GET raspberry1/fb/d1mini.php?&Datum=26.5.2020&Zeit=20:37:26&Device=Pool&Ubatt=3.613&Wert=24.06 HTTP/1.1
Connection: close

Ausganssketch:

#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <TimeLib.h>
#include <Timezone.h>
#include "time_ntp.h"

// counters
unsigned long ulReqcount = 0;
unsigned long ulReconncount = 0;

// ntp flag
bool bNTPStarted = false;

const char* ssid = "Hurz";
const char* password = "47110815";
const char* device = "Pool";
const char* host = "raspberry1";
const int httpPort = 80;

#define ONE_WIRE_BUS D4


OneWire oneWire(ONE_WIRE_BUS);


DallasTemperature DS18B20(&oneWire);
char temperatureCString[6];
char temperatureFString[6];


WiFiServer server(80);

//Spannung auslesen vorbereiten
ADC_MODE(ADC_VCC);
String Ubatt = "";
String ResetOrBoot = "";

//////////////////////////////////////////
// for time conversion
//Central European Time (Frankfurt, Paris)
TimeChangeRule CEST = {"CEST", Last, Sun, Mar, 2, 120};     //Central European Summer Time
TimeChangeRule CET = {"CET ", Last, Sun, Oct, 3, 60};       //Central European Standard Time
Timezone CE(CEST, CET);


///////////////////////////////////////////
// get UTC time referenced to 1970 by NTP
///////////////////////////////////////////
time_t getNTP_UTCTime1970()
{
  bNTPStarted = false; // invalidate; time-lib functions crash, if not initalized poperly
  unsigned long t = getNTPTimestamp();
  if (t == 0) return (0);

  // scale to 1970
  // may look like back & forth with ntp code; wrote it to make needed conversions more clear
  return (t + 946684800UL);
}


void setup() {

  Serial.begin(115200);
  delay(10);

  DS18B20.begin();

  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  server.begin();
  Serial.println("Web server running. Waiting for IP...");
  delay(10000);

  Serial.println(WiFi.localIP());

  const rst_info * resetInfo = system_get_rst_info();  // Resetgrund einlesen
  if ((resetInfo->reason) == 6) {
    ResetOrBoot = "Boot (Stromversorgung hergestellt)";
  } else {
    ResetOrBoot = "Reset";
  }
}

void getTemperature() {
  float tempC;
  float tempF;
  do {
    DS18B20.requestTemperatures();
    tempC = DS18B20.getTempCByIndex(0);
    dtostrf(tempC, 2, 2, temperatureCString);
    tempF = DS18B20.getTempFByIndex(0);
    dtostrf(tempF, 3, 2, temperatureFString);
    delay(100);
  } while (tempC == 85.0 || tempC == (-127.0)); //Wenn Webserver nicht startet mal von -127 auf 128 setzen
}


void loop() {
  String sResponse;
  String zeit;
  String datum;
  String Ubatt;
  WiFiClient client = server.available();

  // connect to NTP and get time each day
  // timelib now synced up to UTC
  if (timeStatus() == timeNotSet)
  {
    bNTPStarted = false;
    Serial.println("Setup sync with NTP service.");
    setSyncProvider(getNTP_UTCTime1970);
    setSyncInterval(86400); // NTP re-sync; i.e. 86400 sec would be once per day
  }
  else
  {
    bNTPStarted = true; // only position, where we set this flag to true
  }
  yield();

  if (client) {
    Serial.println("New client");

    if (bNTPStarted)
    {
      time_t tT = now();
      // UTC
      /*
        Serial.println("Zeit");
        Serial.println(now());
        sResponse += F("UTC (Coordinated Universal Time) ");
        sResponse += hour(tT); sResponse += F(":");
        sResponse += minute(tT)/10; sResponse += minute(tT)%10; sResponse += F(":");
        sResponse += second(tT)/10; sResponse += second(tT)%10; sResponse += F(" - ");
        sResponse += day(tT); sResponse += F("."); sResponse += month(tT); sResponse += F("."); sResponse += year(tT);
      */

      // local time
      time_t tTlocal = CE.toLocal(tT);
      sResponse += F("
<table><tr><th>Zeit :</left></th><th>");
      zeit += hour(tTlocal); zeit += F(":");
      zeit += minute(tTlocal) / 10; zeit += minute(tTlocal) % 10; zeit += F(":");
      zeit += second(tTlocal) / 10; zeit += second(tTlocal) % 10; zeit;
      sResponse  += zeit;
      sResponse += F("</th></tr><tr><td>Datum :</left></td><td>");
      datum += day(tTlocal); datum += F("."); datum += month(tTlocal); datum += F("."); datum += year(tTlocal);
      sResponse += datum;
      sResponse += F("</td></tr></table>
");
    }
    else
    {
      sResponse += F("Noch keine NTP Zeitabfrage erfolgt.");
    }

    // Betriebsspannung auslesen
    // genaue Spannung der Stromquelle, PIN A0 muss mit 3,3V Verbunden werden!
    uint16_t my_getVcc_Voltage = ESP.getVcc();
    float_t my_Voltage_calculated = ((float)my_getVcc_Voltage / 1024.0f);
    Ubatt = String(my_Voltage_calculated, 3);


    boolean blank_line = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (c == '\n' && blank_line) {
          getTemperature();

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();

          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head><title>");
          client.print(device);
          client.print(" Thermometer</title><meta http-equiv=refresh content=15></head><body bgcolor=33363B><center><h1><font face=Arial color=FFFFFF>");
          client.print(device);
          client.print(" Thermometer auf D1 Mini mit DS18B20</h1><h3>Temperatur in Celsius: ");
          client.println(temperatureCString);
          client.println("&deg;C</font></h3></center>");
          client.println("<font face=Arial color=FFFFFF><center><h3>");
          client.println(sResponse);
          client.println("</font></h3></center>");

          Serial.println();
          // Warum booten wir?
          Serial.println("Auslöser: " + ResetOrBoot);
          Serial.println();
          Serial.print("Versorgungs- oder Batteriespannung:  ");
          Serial.println(Ubatt);
          client.println("<font face=Arial color=FFFFFF><center><h5> Spannung :");
          client.println(Ubatt);
          client.println(" Volt
Startart : " + ResetOrBoot);
          client.println(" </font></h5></center>");



          client.println("</body></html>");

          break;
        }
        if (c == '\n') {

          blank_line = true;
        }
        else if (c != '\r') {

          blank_line = false;

        }
      }
    }

    delay(1);
    client.stop();
    Serial.println("Client disconnected.");

  }
}

Orientiere Dich mal an den aktuellen Beispielen zum HttpClient.

Daa hast Du wenigstens einen Fehlercode, wenn es nicht geht.

Gruß Tommy

Danke, das war der fehlende Fingerzeig, läuft jetzt.