INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
ESP als server zum daten empfangen
13.01.2019, 17:17
Beitrag #17
RE: ESP als server zum daten empfangen
Ich würde die Variante mit den Funktionen im server.on nehmen, die ist übersichtlicher.

Schläft nur der neue BME oder beide (ein Server sollte nicht schlafen).
Wenn nur der neue BME schläft, dann würde ich dem den Client verpassen und dem mit der Anzeige den Server.

Wenn beide schlafen, funktioniert das Konzept nicht wirklich.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.01.2019, 17:23 (Dieser Beitrag wurde zuletzt bearbeitet: 13.01.2019 18:02 von Fips.)
Beitrag #18
RE: ESP als server zum daten empfangen
Zitat:exit status 1
'class WiFiServer' has no member named 'on'

Du musst den Webserver einbinden!!

ESP8266WebServer server(80);


Wenn der Aussensensor nur aller 5 Minuten aufwacht, muss der httpClient auf dem Aussensensor laufen.

Hatte ich auch schon mal gebaut.
Ich suche die Links mal raus.

Der Aussensensor wacht aller 5 Minuten auf schickt die Daten, wertet die Antwort aus und schläft wieder ein.

Der Innensensor bekommt die Daten vom Aussensensor, stellt die Daten von Innen und Aussen für die Webseite zur Verfügung (inklusive Warnung wenn vom Aussensensor länger keine Daten empfangen wurden.

Die Webseite damit du siehst was deine Esp8266 die ganze Zeit so treiben.

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.01.2019, 18:24 (Dieser Beitrag wurde zuletzt bearbeitet: 13.01.2019 19:20 von Gandalf.)
Beitrag #19
RE: ESP als server zum daten empfangen
(13.01.2019 17:17)Tommy56 schrieb:  Schläft nur der neue BME oder beide (ein Server sollte nicht schlafen).
Wenn nur der neue BME schläft, dann würde ich dem den Client verpassen und dem mit der Anzeige den Server.

Wenn beide schlafen, funktioniert das Konzept nicht wirklich.

Gruß Tommy

Es ist nur der außen ist ( Client ) der nach dem Aufwecken sein Programm runterspielt und dann wieder schläft

@Fips
Ich muss da erstmal durchsteigen ! ich Baue auch blöcke aber da muss ich mich erstmal durchwurschteln

Gruss Gandi

Ich noch mal zurück !
soweit habe ich das eingebunden bekommen ....
ist noch Katastropfe der Sketch
nur habe ich eine Fehlermeldung bei der ausgabe

Fehler
Code:
Funktion: void httpClient() meldet in Zeile: 273 -> HttpClient Begin
Fehler: connection refused
Empfänger
Code:
#include <TimeLib.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <BME280I2C.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
BME280I2C bme;
const char ssid[] = "0815";  //  your network SSID (name)
const char pass[] = "4711";       // your network password

// NTP Servers:
static const char ntpServerName[] = "us.pool.ntp.org";
//static const char ntpServerName[] = "time.nist.gov";
//static const char ntpServerName[] = "time-a.timefreq.bldrdoc.gov";
//static const char ntpServerName[] = "time-b.timefreq.bldrdoc.gov";
//static const char ntpServerName[] = "time-c.timefreq.bldrdoc.gov";

const int timeZone = 1;     // Central European Time
//const int timeZone = -5;  // Eastern Standard Time (USA)
//const int timeZone = -4;  // Eastern Daylight Time (USA)
//const int timeZone = -8;  // Pacific Standard Time (USA)
//const int timeZone = -7;  // Pacific Daylight Time (USA)


WiFiUDP Udp;
unsigned int localPort = 8888;  // local port to listen for UDP packets

time_t getNtpTime();
void digitalClockDisplay();
void printDigits(int digits);
void sendNTPpacket(IPAddress &address);
LiquidCrystal_I2C lcd(0x27, 20, 4);
float cel;
void setup()
{
  Serial.begin(115200);
  while (!Serial) ; // Needed for Leonardo only
  delay(250);
  Serial.println("TimeNTP Example");
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);

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

  Serial.print("IP number assigned by DHCP is ");
  Serial.println(WiFi.localIP());
  Serial.println("Starting UDP");
  Udp.begin(localPort);
  Serial.print("Local port: ");
  Serial.println(Udp.localPort());
  Serial.println("waiting for sync");
  setSyncProvider(getNtpTime);
  setSyncInterval(300);
  lcd.init();
  lcd.backlight();
  lcd.setCursor( 0, 0);
  lcd.print("WETTERSTATION - V1.0");
  lcd.setCursor( 0, 2);
  lcd.print("Innen  ");
  lcd.setCursor( 8, 2);
  lcd.print("Aussen");
  lcd.setCursor( 16, 2);
  lcd.print("Luft");
  // Chip abfragen
  Wire.begin();

  while (!bme.begin())
  {
    Serial.println("Could not find BME280 sensor!");
    delay(1000);
  }

  switch (bme.chipModel())
  {
    case BME280::ChipModel_BME280:
      Serial.println("Found BME280 sensor! Success.");
      break;
    case BME280::ChipModel_BMP280:
      Serial.println("Found BMP280 sensor! No Humidity available.");
      break;
    default:
      Serial.println("Found UNKNOWN sensor! Error!");
  }

// Connect();
}

time_t prevDisplay = 0; // when the digital clock was displayed

void loop()
{
  if (timeStatus() != timeNotSet) {
    if (now() != prevDisplay) { //update the display only if time has changed
      prevDisplay = now();
      digitalClockDisplay();
      printBME280Data(&Serial);
      httpClient();
      lcd_display();
    }
  }
}

void digitalClockDisplay()
{
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(".");
  Serial.print(month());
  Serial.print(".");
  Serial.print(year());
  Serial.println();
}
void lcd_display()
{
  lcd.setCursor( 0, 1);
  //  lcd.print(" ");
  lcd.print(hour());
  lcd.print(":");

  if (minute() <= 9)
  {
    lcd.print("0");
  }
  lcd.print(minute());
  lcd.print(":");
  if (second() <= 9)
  {
    lcd.print("0");
  }
  lcd.print(second());
  // ----------------------------------------------------------------------------
  lcd.setCursor( 10, 1);
  //lcd.print(" ");
  if (day() <= 9)
  {
    lcd.print("0");
  }
  lcd.print(day());
  lcd.print(".");

  if (month() <= 9)
  {
    lcd.print("0");
  }
  lcd.print(month());
  lcd.print(".");

  lcd.print(year());

  lcd.setCursor( 0, 3);
  lcd.print(cel, 1);
  lcd.print(" C ");
  lcd.setCursor( 8, 3);
  lcd.print(cel, 1);
  lcd.print(" C ");
}

void printDigits(int digits)
{
  // utility for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

/*-------- NTP code ----------*/

const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message
byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets

time_t getNtpTime()
{
  IPAddress ntpServerIP; // NTP server's ip address

  while (Udp.parsePacket() > 0) ; // discard any previously received packets
  Serial.println("Transmit NTP Request");
  // get a random server from the pool
  WiFi.hostByName(ntpServerName, ntpServerIP);
  Serial.print(ntpServerName);
  Serial.print(": ");
  Serial.println(ntpServerIP);
  sendNTPpacket(ntpServerIP);
  uint32_t beginWait = millis();
  while (millis() - beginWait < 1500) {
    int size = Udp.parsePacket();
    if (size >= NTP_PACKET_SIZE) {
      Serial.println("Receive NTP Response");
      Udp.read(packetBuffer, NTP_PACKET_SIZE);  // read packet into the buffer
      unsigned long secsSince1900;
      // convert four bytes starting at location 40 to a long integer
      secsSince1900 =  (unsigned long)packetBuffer[40] << 24;
      secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
      secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
      secsSince1900 |= (unsigned long)packetBuffer[43];
      return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
    }
  }
  Serial.println("No NTP Response :-(");
  return 0; // return 0 if unable to get the time
}

// send an NTP request to the time server at the given address
void sendNTPpacket(IPAddress &address)
{
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12] = 49;
  packetBuffer[13] = 0x4E;
  packetBuffer[14] = 49;
  packetBuffer[15] = 52;
  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:
  Udp.beginPacket(address, 123); //NTP requests are to port 123
  Udp.write(packetBuffer, NTP_PACKET_SIZE);
  Udp.endPacket();
}
void printBME280Data
(
  Stream* client
)
{
  float temp(NAN), hum(NAN), pres(NAN);

  BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
  BME280::PresUnit presUnit(BME280::PresUnit_Pa);

  bme.read(pres, temp, hum, tempUnit, presUnit);

  client->print("Temp: ");
  client->print(temp);
  client->print("°" + String(tempUnit == BME280::TempUnit_Celsius ? 'C' : 'F'));
  client->print("\t\tHumidity: ");
  client->print(hum);
  client->print("% RH");
  client->print("\t\tPressure: ");
  client->print(pres);
  client->println("Pa");
  cel = (temp);
}

// ----- HttpClient by Fips ---------

void httpClient() {
  const char* url = "http://192.168.10.94/bme280";        // trage hier die URL deines ESP... mit Bme280 Sketch ein

  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    Serial.printf("\nFunktion: %s meldet in Zeile: %d -> HttpClient Begin\n", __PRETTY_FUNCTION__, __LINE__);
    http.begin(url);
    int16_t httpCode = http.GET();
    if (httpCode > 0) {
      Serial.println("HTTP / 1.1 " + (String)httpCode);
      if (httpCode == HTTP_CODE_OK) {
        String payload = http.getString();
        Serial.println("Antwort: " + payload);

        int tempint = payload.substring(2, payload.length()).toInt();
        Serial.printf("Aussentemperatur: %d°C\n", tempint);
        float tempfloat = payload.substring(2, payload.length()).toFloat();
        Serial.printf("Aussentemperatur: %.1f°C\n", tempfloat);               // ab Core Version 2.4.0 -> ältere können kein float mit prinf ausgeben
        //Serial.println("Aussentemperatur: " + String(tempfloat,1) + "°C");  // bis Core Version 2.3.0
      }
    }
    else {
      Serial.println("Fehler: " + http.errorToString(httpCode));
    }
    http.end();
  }
}
hier noch mal der Sender Sketch

Code:
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
#include <Wire.h>
#include <BME280I2C.h>    

ESP8266WiFiMulti WiFiMulti;
BME280I2C bme;    
ESP8266WebServer server(80);


void setup() {
  Serial.begin(115200);
  delay(10);

  // We start by connecting to a WiFi network
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("0815", "11500743428819756841");

  Serial.println();
  Serial.print("Wait for WiFi... ");

  while (WiFiMulti.run() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  delay(500);
  bme280();
}

void bme280() {       // Funktionsaufruf "bme280();" muss im Setup eingebunden werden
  Wire.begin();
  if (!bme.begin()) {
    Serial.println("Keinen BME280 Sensor gefunden!");
  }
  server.on("/bme280", []() {
    server.send(200, "application/json", handleBme());

  });
}


void loop() {
     bme280();
     delay(5000);
}

String handleBme() {
  const int hoehe = 163;        // virtuelle Höhe in Meter über Meeresspiegel an deinem Standort anpassen
  float temp(NAN), hum(NAN), pres(NAN), sealevel;
  bme.read(pres, temp, hum, BME280::TempUnit_Celsius, BME280::PresUnit_hPa);
  sealevel = (pres / pow(1 - ((0.0065 * hoehe) / (temp + (0.0065 * hoehe) + 273.15)), 5.257));    // Berechnung relativer Luftdruck
  return (String)"[\"" + temp + "\",\"" + hum + "\",\"" + sealevel + "\"]";
}
habe das Deep Sleep noch nicht eingebunden

wenn es so funktioniert, das er den empfang überspringt ist das schon mal ein Gewaltiger schritt zu dem was ich wollte

Gruss Gandi

Ich möchte niemanden reinwaschen, ich möchte den dreck besser verteilenHuh
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.01.2019, 09:53
Beitrag #20
RE: ESP als server zum daten empfangen
Du wolltest es mit schlafenden Aussensensor?

Dann gehört der httpClient in den Aussensensor!

Probier doch erstmal ob die von mir verlinkten beiden Sketche bei dir laufen!

Wenn ja, dann bau doch darauf auf.

PS.: Warum zum Teufel, holts du die Uhrzeit vom Ami ?


Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.01.2019, 19:48
Beitrag #21
RE: ESP als server zum daten empfangen
(14.01.2019 09:53)Fips schrieb:  Du wolltest es mit schlafenden Aussensensor?

Dann gehört der httpClient in den Aussensensor!

Probier doch erstmal ob die von mir verlinkten beiden Sketche bei dir laufen!

Wenn ja, dann bau doch darauf auf.

PS.: Warum zum Teufel, holts du die Uhrzeit vom Ami ?


Gruß Fips
Kosmetik kommt zum schluss Fips
der Ami stand drinne

Gruss Gandi

Ich möchte niemanden reinwaschen, ich möchte den dreck besser verteilenHuh
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Gestern, 23:28
Beitrag #22
RE: ESP als server zum daten empfangen
--- Rückmeldung ---

Nabend Zusammen,

habe den letzten sketch von Fips ausprobiert !
Der Innensensor zeit mir nach dem Starz nur

Code:
Verbunden mit: 0815
Esp8266 IP: 192.168.10.202
Scheint aber soweit zu funktioniren weil er die webseite im Browser anzeigt !
jedoch bekomme ich keine aufkunft über die sensoren im Serielen Monitor!
Nicht mal der im Innensensor.

beim Aussensensor ist das so, das der versucht 2 mal zu Connecten und dann schlafen gehen soll für 2 Min. was er macht aber nach den 2 Min. geht die LED an und dann wars das .

Innensensor
Code:
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>     // https://arduino-esp8266.readthedocs.io/en/latest/ota_updates/readme.html
#include "FS.h"
#include <Wire.h>
#include <BME280I2C.h>        // Version 2.3 https://www.github.com/finitespace/BME280

ESP8266WebServer server(80);
BME280I2C bme;                // Standard : Zwangsmodus, Standby-Zeit = 1000 ms

unsigned long lastResponce;
String aussenklima = "nan";

#define CONFIG           // Einkommentieren wenn der ESP dem Router die IP mitteilen soll.
#define NO_SLEEP           // Auskommentieren wenn der Nodemcu den deep sleep Modus nutzt.

const char* ssid = "0815";             // << kann bis zu 32 Zeichen haben
const char* password = "4711";  // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen



void setup() {
  Serial.begin(115200);
  delay(100);
  //Serial.printf("\nSketchname: %s\nBuild: %s\n\n", (__FILE__), (__TIMESTAMP__));  // Core Version 2.3.0
  Serial.printf("\nSketchname: %s\nBuild: %s\n%s\n\n", (__FILE__), (__TIMESTAMP__), ESP.getFullVersion().c_str()); // ab Core Version 2.4.0


    
  server.on("/aussenklima", []() {        // emfängt die Werte und schickt die Antwort
    if (server.arg(0) != "") {
      aussenklima = (server.arg(0));
      server.send(200, "text/plain", "OK" );
      lastResponce = millis()/1000;
    }
  });

  ArduinoOTA.begin();
  server.begin();
    //spiffs();
  Connect();
  bme280();

}

void loop() {
  ArduinoOTA.handle();
  server.handleClient();
}

#ifdef CONFIG
IPAddress staticIP(192, 168, 10, 202);      // statische IP des NodeMCU ESP8266
IPAddress gateway(192, 168, 10, 1);        // IP-Adresse des Router
IPAddress subnet(255, 255, 255, 0);         // Subnetzmaske des Netzwerkes
#endif

void Connect() {      // Funktionsaufruf "Connect();" muss im Setup eingebunden werden
  byte i = 0;
  //WiFi.disconnect();      // nur erforderlich wenn Esp den AP Modus nicht verlassen will
  WiFi.persistent(false);   // auskommentieren wenn Netzwerkname oder Passwort in den Flash geschrieben werden sollen
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
#ifdef CONFIG
  WiFi.config(staticIP, gateway, subnet);
#endif
  while (WiFi.status() != WL_CONNECTED) {
#ifdef NO_SLEEP
    pinMode(LED_BUILTIN, OUTPUT);     // OnBoardLed Nodemcu, Wemos D1 Mini Pro
    digitalWrite(LED_BUILTIN, 0);
#endif
    delay(500);
    digitalWrite(LED_BUILTIN, 1);
    delay(500);
    i++;
    Serial.printf(" %i sek\n", i);
    if (i > 9) {
      Serial.print("\nVerbindung zum AP fehlgeschlagen !\n\n");
      ESP.restart();
    }
  }
  Serial.println("\nVerbunden mit: " + WiFi.SSID());
  Serial.println("Esp8266 IP: " + WiFi.localIP().toString());
}
void bme280() {       // Funktionsaufruf "bme280();" muss im Setup eingebunden werden
  Wire.begin();
  if (!bme.begin()) {
    Serial.println("Keinen BME280 Sensor gefunden!");
  }
  server.on("/bme280", []() {
    server.send(200, "application/json", handleBme());
  });
}

String handleBme() {
  const int hoehe = 163;        // virtuelle Höhe in Meter über Meeresspiegel an deinem Standort anpassen
  float temp(NAN), hum(NAN), pres(NAN), sealevel;
  BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);    //TempUnit_: Celsius, Fahrenheit
  BME280::PresUnit presUnit(BME280::PresUnit_hPa);        //PresUnit_: Pa, hPa, inHg, atm, bar, torr, psi
  bme.read(pres, temp, hum, tempUnit, presUnit);
  sealevel = (pres / pow(1 - ((0.0065 * hoehe) / (temp + (0.0065 * hoehe) + 273.15)), 5.257));    // Berechnung relativer Luftdruck
  char buf[55];               // Nachkommastellen zwichen "Punkt" und "f" angeben                                            // Zeit für Warnung in Sekunden
  snprintf(buf, sizeof(buf), "[\"%.1f\",\"%.f\",\"%.f\",\"%d\",\"%s\"]", temp, hum, sealevel, millis() / 1000 - lastResponce < 1200 ? false : true, aussenklima.c_str());
  return buf;
}

Aussensensor
Code:
#include <ESP8266WebServer.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include "FS.h"
#include <Wire.h>
#include <BME280I2C.h>        // Version 2.3 https://www.github.com/finitespace/BME280



ESP8266WebServer server(80);
BME280I2C bme;                // Standard : Zwangsmodus, Standby-Zeit = 1000 ms

bool error;

#define CONFIG           // Einkommentieren wenn der ESP dem Router die IP mitteilen soll.
#define NO_SLEEP           // Auskommentieren wenn der Nodemcu den deep sleep Modus nutzt.

const char* ssid = "0815";             // << kann bis zu 32 Zeichen haben
const char* password = "11500743428819756841";  // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen

void setup() {
  Serial.begin(115200);
  delay(100);
  //Serial.printf("\nSketchname: %s\nBuild: %s\n\n", (__FILE__), (__TIMESTAMP__));  // Core Version 2.3.0
  Serial.printf("\nSketchname: %s\nBuild: %s\n%s\n\n", (__FILE__), (__TIMESTAMP__), ESP.getFullVersion().c_str()); // ab Core Version 2.4.0

  Connect();
  bme280();
}

void loop() {
  httpClient();
}



#ifdef CONFIG
IPAddress staticIP(192, 168, 10, 201);      // statische IP des NodeMCU ESP8266
IPAddress gateway(192, 168, 10, 1);        // IP-Adresse des Router
IPAddress subnet(255, 255, 255, 0);         // Subnetzmaske des Netzwerkes
#endif

void Connect() {      // Funktionsaufruf "Connect();" muss im Setup eingebunden werden
  byte i = 0;
  //WiFi.disconnect();      // nur erforderlich wenn Esp den AP Modus nicht verlassen will
  WiFi.persistent(false);   // auskommentieren wenn Netzwerkname oder Passwort in den Flash geschrieben werden sollen
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
#ifdef CONFIG
  WiFi.config(staticIP, gateway, subnet);
#endif
  while (WiFi.status() != WL_CONNECTED) {
#ifdef NO_SLEEP
    pinMode(LED_BUILTIN, OUTPUT);     // OnBoardLed Nodemcu, Wemos D1 Mini Pro
    digitalWrite(LED_BUILTIN, 0);
#endif
    delay(500);
    digitalWrite(LED_BUILTIN, 1);
    delay(500);
    i++;
    Serial.printf(" %i sek\n", i);
    if (i > 9) {
      Serial.print("\nVerbindung zum AP fehlgeschlagen !\n\n");
      ESP.deepSleep(300e6);                                  // 5 Minuten Tiefschlaf falls der Router nicht erreichbar ist
    }
  }
  Serial.println("\nVerbunden mit: " + WiFi.SSID());
  Serial.println("Esp8266 IP: " + WiFi.localIP().toString());
}

void httpClient() {
  const char* url = "http://192.168.10.202/aussenklima";        // trage hier die URL deines ESP... mit Bme280 Sketch ein

    HTTPClient http;
    Serial.printf("\nFunktion: %s meldet in Zeile: %d -> HttpClient Begin\n", __PRETTY_FUNCTION__, __LINE__);
    http.begin(url);
    http.addHeader("Content-Type", "application/json");
    int httpCode = http.POST(handleBme());

    if (httpCode > 0) {
      Serial.println("\nHTTP / 1.1 " + (String)httpCode);
      if (httpCode == HTTP_CODE_OK) {
        //Serial.println("Antwort: " + http.getString());
        Serial.println("Ich geh schlafen\n");
        ESP.deepSleep(300e6);                                  // 5 Minuten Tiefschlaf
      }
    }
    else {
      Serial.println("Fehler: " + http.errorToString(httpCode));
      if (error) {                                             // Falls auch beim zweiten senden keine Antwort kommt wird geschlafen
        Serial.println("klappt nicht geh ersmal schlafen\n");
        ESP.deepSleep(120e6);                                  // 120 Sekunden Tiefschlaf
      }
      error = true;
    }
    http.end();
}

void bme280() {       // Funktionsaufruf "bme280();" muss im Setup eingebunden werden
  Wire.begin();
  if (!bme.begin()) {
    Serial.println("Keinen BME280 Sensor gefunden!");
  }
  server.on("/bme280", []() {
    server.send(200, "application/json", handleBme());
  });
}

String handleBme() {
  const int hoehe = 163;        // virtuelle Höhe in Meter über Meeresspiegel an deinem Standort anpassen
  float temp(NAN), hum(NAN), pres(NAN), sealevel;
  BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);    //TempUnit_: Celsius, Fahrenheit
  BME280::PresUnit presUnit(BME280::PresUnit_hPa);        //PresUnit_: Pa, hPa, inHg, atm, bar, torr, psi
  bme.read(pres, temp, hum, tempUnit, presUnit);
  sealevel = (pres / pow(1 - ((0.0065 * hoehe) / (temp + (0.0065 * hoehe) + 273.15)), 5.257));    // Berechnung relativer Luftdruck
  char buf[25];
  snprintf(buf, sizeof(buf), "%.1f\",\"%.1f\",\"%.1f", temp, hum, sealevel);    // Nachkommastellen zwichen "Punkt" und "f" angeben
  return buf;
}
habe ich was vergessen oder einen fehler gemacht ?

Gruss Gandi

Ich möchte niemanden reinwaschen, ich möchte den dreck besser verteilenHuh
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Heute, 14:25
Beitrag #23
RE: ESP als server zum daten empfangen
Welchen/s Esp../Board benutzt du? Wie hast du es beschaltet?

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Smile ESP8266 Daten übertragen Matze8266 13 837 13.12.2018 12:17
Letzter Beitrag: Fips
  ESP8266 mit welchen Daten versucht es den Verbindungsaufbau? BlackGuest 6 981 30.08.2018 23:37
Letzter Beitrag: BlackGuest
  ESP8266 Server connect sowerum 9 3.968 30.12.2017 17:14
Letzter Beitrag: h0ffnung
  NodeMCU12E mit UDP Client & UDP Server & Webserver rkuehle 4 2.118 17.10.2017 23:49
Letzter Beitrag: Fips
  nodeMCU ESP 12E V3 - Frage zum Beispielsketch "Hello Server" Stargazer 2 1.752 13.08.2017 21:09
Letzter Beitrag: Stargazer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste