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
11.01.2019, 22:37
Beitrag #1
ESP als server zum daten empfangen
Moin moin,

Erstmal ein Frohes Neues an alle da ich über den Jahreswechsel ein Zimmer in der Knochenflickzentrum buchen musste Sad

Durch den Aufenthalt ist ein Geschenk liegen geblieben wo ich mal ein rat bräuchte!

Ich habe einige Messsensoren die Luftfeuchte, Luftdruck und Temperatur messen, diese schmeissen immer diese zeile an meinen Homeserver
"192.168.xxx.xxx/data1.php?CE1=26.8&HU1=0&PR=10.33&BA=100"
CE = Temperatur
HU = Luftfeuchte
PR = Luftdruck
BA = Batterie

Nun habe ich mir das Beispiel "Hello Server" für den ESp angesehen und wollte wissen, ist es Möglich das da rein zu Würgen?
Code:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

const char* ssid = "0815";  // Name des Testrouters
const char* password = "4711";  // Passwort des Testrouters

ESP8266WebServer server(80);

const int led = LED_BUILTIN;

void handleRoot() {
  digitalWrite(led, 0);
  server.send(200, "text/plain", "hello from esp8266!");
  delay(1000);
  digitalWrite(led, 1);
}

void handleNotFound() {
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void) {
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);

  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

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

Ich möchte dies in eine Wetterstation einbinden die schon Zeit und innen Temperatur verfügt, soll jetzt ein externer Tempsensor, der sich in einen Carport befindet, mit angezeigt werden.
die wetterstation selber sieht etwas unaufgeräumt aus
Code:
#include <TimeLib.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <BME280I2C.h>
BME280I2C bme;
const char ssid[] = "0815";  //  Name des Testrouters
const char pass[] = "4711";       // Passwort des Testrouters

// 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!");
  }
}

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);
      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);
}
würde mich über eine Hilfe freuen !
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
11.01.2019, 22:40
Beitrag #2
RE: ESP als server zum daten empfangen
Du hast evtl mitbekommen, dass es für den ESP ein eigenes Unterforum gibt?

@Mod: bitte verschieben.

Was verstehst Du unter: Das da rein zu würgen?

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
11.01.2019, 22:47
Beitrag #3
RE: ESP als server zum daten empfangen
(11.01.2019 22:40)Tommy56 schrieb:  Du hast evtl mitbekommen, dass es für den ESP ein eigenes Unterforum gibt?

@Mod: bitte verschieben.

Was verstehst Du unter: Das da rein zu würgen?

Gruß Tommy


Hi Tommy
Sorry nein ... ja bitte verschieben danke

Reinwürgen meine ich das er sie daten so zuorden kann, das ich Temperatur und die Luftfeuchte auf ein Das Display übernehmen kann

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
11.01.2019, 23:17
Beitrag #4
RE: ESP als server zum daten empfangen
Dann solltest Du Deinen bestehenden Sketch ausmisten und neu strukturieren.

Im loop alle 1 (10,60,...) Sekunden die Werte auslesen und den Zeitstempel dazu.

Dann kann der Webserver diese Werte anzeigen und der Client die genau so an den Homeserver übertragen.

Die Zeit hängt davon ab, woher die Messwerte stammen. Wenn es normale umgebungswerte (Wohnung, Balkon/Garten) sind genügt auch evtl. eine Änderung alle 5 Minuten oder alle Minuten messen und dann den Mittelwert bilden.

Beide Übertragungen (Webserver und Übertragung zum "Zentralserver") können dann auf die gleichen Daten zugreifen.

Das Webserverbeispiel des ESP8266 sollte Dein Ausgangspunkt sein - also neu schreiben (ist besser und übersichtlicher)

Schau mal bei Fips rein, wenn Du Anregungen für den Webserver brauchst.

Gruß Tommy

Den Client zum "Zentralserver" würde ich in eine Funktion auslagern und im Loop in der Zeitsteuerung mit abfrühstücken.

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
11.01.2019, 23:24 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2019 23:24 von Fips.)
Beitrag #5
RE: ESP als server zum daten empfangen
(11.01.2019 22:37)Gandalf schrieb:  ist es Möglich das da rein zu Würgen??

Ja!
Würgen geht bestimmt!
Und wie lautet deine konkrete Frage?
Ich bin verwundert, "Solaranlage Projekt 2", und jetzt die Frage "ist es Möglich das da rein zu Würgen"

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2019, 09:28
Beitrag #6
RE: ESP als server zum daten empfangen
Hallo,

naja, wenn die so gebaut ist, wie er hier vormuliert hat... ;-)

Zitat von Gandalf:
Ich habe einige Messsensoren die Luftfeuchte, Luftdruck und Temperatur messen, diese schmeissen immer diese zeile an meinen Homeserver
"192.168.xxx.xxx/data1.php?CE1=26.8&HU1=0&PR=10.33&BA=100"
Zitat ende.

Die Daten werden nicht zum Homeserver geschmissen, der Homserver ist der Server (kommt daher vielleicht der Name?).
Der Sensor ist der Client.
Der Server fragt die Daten vom Client mit HTTP GET ab.

Kann man natürlich auch auf dem ESP machen, eben mit dem HTTPClient, sicher nicht mit einem Server.
Zeile holen, auseinandernehmen, Werte rausfischen, passend verarbeiten und anzeigen eben.

Also HTTPClient aus den Beispielen nehmen, URL an die vom Sensor anpassen, Daten vom Sensor holen und erstmal seriell ausgeben und dann weiter nachdenken.

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2019, 10:32
Beitrag #7
RE: ESP als server zum daten empfangen
(12.01.2019 09:28)amithlon schrieb:  Der Server fragt die Daten vom Client mit HTTP GET ab.
Nein, der Client sendet die Daten zum Server.
Von Websockets abgesehen, wartet der Server nur, dass ein Client etwas von ihm will.

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
12.01.2019, 10:58
Beitrag #8
RE: ESP als server zum daten empfangen
Hallo,

@Tommy56
hast Du natürlich völlig recht, wohl nicht mein Tag heute...

Dann hat er aber das Problem, daß er dem Sensor den ESP als Server sagen muß und dann bekommt sein Homeserver die Daten nicht mehr zu sehen.
Eigentlich müßte er dann die data1.php auf dem Homeserver dahin erweitern, das die zusätzlich dem ESP-Webserver eine Anfrage schickt und die Daten damit zusätzlich weiterreicht.

Oder schlafe ich wirklich noch?

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP8266 als SPIFFS/Webserver soll Daten verarbeiten TiRe 9 136 Heute 15:20
Letzter Beitrag: Tommy56
Smile ESP8266 Daten übertragen Matze8266 13 882 13.12.2018 12:17
Letzter Beitrag: Fips
  ESP8266 mit welchen Daten versucht es den Verbindungsaufbau? BlackGuest 6 992 30.08.2018 23:37
Letzter Beitrag: BlackGuest
  ESP8266 Server connect sowerum 9 3.985 30.12.2017 17:14
Letzter Beitrag: h0ffnung
  NodeMCU12E mit UDP Client & UDP Server & Webserver rkuehle 4 2.125 17.10.2017 23:49
Letzter Beitrag: Fips
  nodeMCU ESP 12E V3 - Frage zum Beispielsketch "Hello Server" Stargazer 2 1.761 13.08.2017 21:09
Letzter Beitrag: Stargazer

Gehe zu:


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