ESP8266 BasicHttpClient

Ich Wünsche allen Board-Mietliedern ein schönes Weihnachtsfest
Ich habe da ein kleines Problem Ich benutze den Hallo Server jetzt
möchte mit einen Client Daten vom Server lesen mit meinen alten
Server hat das so geklappt http://192.168.1.51/sol1
jetzt habe Ich den Client aus den Beispielen den BasicHttpClient
wenn Ich das eingebe http://192.168.1.51/sol1 Kommt folgender Fehler
[HTTP] GET… failed, error: connection refused

Ich danke schon mal

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#include <WiFiClient.h>

ESP8266WiFiMulti WiFiMulti;

void setup() {

  Serial.begin(9600);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("-----", "-----");

}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    WiFiClient client;

    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    if (http.begin(client, "http://192.168.1.51/sol1")) {  // HTTP


      Serial.print("[HTTP] GET...\n");
      // start connection and send HTTP header
      int httpCode = http.GET();

      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTP] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
      }

      http.end();
    } else {
      Serial.printf("[HTTP} Unable to connect\n");
    }
  }

  delay(10000);
}

Connection refused heißt Dein Server weist die Verbindung ab. Schaue mal in die Serverlogs.

Gruß Tommy

Hallo Tommi

wenn Ich es im Browser Firefox sende Klappt es untender
eventhandler

Gruss juergen

handlesol1() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", ausgabe);
  digitalWrite(led, 0);
  ausgabe = "utime;";
  ausgabe += now();

}

Der Sketch funktioniert!
Zeigt mir sauber die Daten von einem anderen Esp(Webserver) an.

juergen01:
wenn Ich das eingebe http://192.168.1.51/sol1 Kommt folgender Fehler
[HTTP] GET... failed, error: connection refused

Diese Fehlermeldung erhalte ich, wenn ich eine in meinem Netzwerk nicht vorhandene IP eingebe.

Gruß Fips

Hallo Derfips

Aus meinen Firefox browser klappt es nur nicht mit dem Klint
habe den Helloserver mit esp8266

oder gibt es einen anderen Client

gruss juergen

juergen01:
habe den Helloserver mit esp8266

Hello Server gibt es mehrere, zeig den kompletten Sketch den du auf dem Esp8266 laufen hast.

Gruß Fips

Hallo Derfips

Musste Meinen Server kürzen habe den gekürzten getestet
gibt die gleichen Fehler Meldungen aus Habe auch das

Ich danke schon mal

#include <Time.h>
#include <TimeLib.h>
#include <SPI.h>

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266mDNS.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <DelayTimer.h>
#include <Wire.h>

#include "Arduino.h"
// include the SevenSegmentTM1637 library
#include "SevenSegmentTM1637.h"
#include "SevenSegmentExtended.h"
#include <SoftwareSerial.h>

#ifndef STASSID
#define STASSID "--"
#define STAPSK  "--"
#endif
const int led = D4;
const char* ssid = STASSID;
const char* password = STAPSK;
ESP8266WebServer server(80);
SoftwareSerial porteins(D5, D4);

String sResponse,clientsenden,ausgabe,seraus;
unsigned long ulReqcount;
unsigned long ulReconncount;
static const int BUFSIZE = 50;
const int SERIAL_BUFFER_SIZE = 40;
char zeile[SERIAL_BUFFER_SIZE];
char zeile1[SERIAL_BUFFER_SIZE];

char localipadresse[16];
long j;
long i;
int stringlaenge;
int value = random(1, 61);
//char localipadresse[16];
IPAddress  localAddr;
char s[16];
char pumpenpause[5] = "***"; //

//byte akkuprofile = 0;
byte serialanzeige = 0;
char megalaufzeit[6];
byte menue = 0;

char zeithatum[30];
char uhrzeit[12];
char datum[12];
byte anztelstr;byte anzteilstr;
char teilstr[10][15];//Anzahl,laenge

int stunde;
int minuten;
int sekunde;
int tag;
int monat = 4;
int jahr;
//char jahrsend[6];
long sec;//
byte haussecsenden = 0;
byte zeitverschiebung = 7;
unsigned int seczaehler;
unsigned int analogreadzaehler;
unsigned int gestag;
unsigned int gesmonat;
unsigned int gesjahr;
char gesdatum[21];
unsigned int vorgestag;
unsigned int vorgesmonat;
unsigned int vorgesjahr;
char vorgesdatum[21];
byte zeitvomserver = 1;
byte ausgabezaehler = 1;
unsigned int ntpzeitholensec;
byte serausgabe;
byte letzteipnr;

int fuenfmintag;
int fuenfmonat;
int fuenfminjahr;
int fuenfminstunden;
int fuenfminminuten;
char stundendatensatz[30];
unsigned int pv1impulsstunde;
int stundetag;
int stundemonat;
int stundejahr;
int stundestunden;
int tagtag;
int tagmonat;
int tagjahr;
unsigned long megaunixtime;

static DelayTimer serialsenddelay;
static DelayTimer menuausgabe;

void handleneu() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", "hello from esp32 mit test!");
  digitalWrite(led, 0);
}
void handleseraus() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", seraus);
  digitalWrite(led, 0);seraus += "seraus";seraus += "\r\n";
}

void handlesol1() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", ausgabe);
  digitalWrite(led, 0);
  ausgabe = "utime;";
  ausgabe += now();

}

void handlesol0() {
  digitalWrite(led, 1);
       clientsenden = "<H3>";  
       clientsenden += "ime;";
       clientsenden += now();
       clientsenden += ";";
       clientsenden += "Server Laeuft";
         
        Serial.println("solarrelay;0");
        porteins.print("esphomelaeuft;");
        porteins.println(localipadresse);
        server.send(200, "text/plain", clientsenden);
        digitalWrite(led, 0);
}

bool read_serial()
{
  delay(100);

  zeile[0] = '\0';
  static byte index;

  while (Serial.available())
  {
    char c = Serial.read();

    if (c >= 32 && index < BUFSIZE - 1)
    {
       zeile[index++] = c;
     }
    else if (c == '\n' && index > 0)
    {
      zeile[index] = '\0';
      index = 0;
      return true;
    }
  }

  return false;
}

bool read_porteins()
{
  static byte index;
  delay(300);
  while (porteins.available())
  {
    char c = porteins.read();
    if (c >= 32 && index < BUFSIZE - 1)
    {
      zeile[index++] = c;
    }
    else if (c == '\n' && index > 0)
    {
      zeile[index] = '\0';
      index = 0;
      return true;
    }
  }

  return false;
}
void setup() {
  sResponse.reserve(4000);
  clientsenden.reserve(500);
  ausgabe.reserve(300);
  seraus.reserve(300);
  Serial.begin(9600);
  porteins.begin(9600);  
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

   ArduinoOTA.setHostname("myesp8266");


  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH) {
      type = "sketch";
    } else { // U_FS
      type = "filesystem";
    }

    // NOTE: if updating FS this would be the place to unmount FS using FS.end()
    Serial.println("Start updating " + type);
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) {
      Serial.println("Auth Failed");
    } else if (error == OTA_BEGIN_ERROR) {
      Serial.println("Begin Failed");
    } else if (error == OTA_CONNECT_ERROR) {
      Serial.println("Connect Failed");
    } else if (error == OTA_RECEIVE_ERROR) {
      Serial.println("Receive Failed");
    } else if (error == OTA_END_ERROR) {
      Serial.println("End Failed");
    }
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  localAddr = WiFi.localIP();
  byte oct1 = localAddr[0];
  byte oct2 = localAddr[1];
  byte oct3 = localAddr[2];
  byte oct4 = localAddr[3];
  // char s[16];
  letzteipnr = oct4;
  snprintf(localipadresse, 15, "%d.%d.%d.%d", oct1, oct2, oct3, oct4);
  Serial.println(localipadresse);

  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.on("/sol0", handlesol0);
  server.on("/sol1", handlesol1);
  server.on("/seraus", handleseraus);
  server.begin();
  Serial.println("HTTP server started");




}

void loop() {
  ArduinoOTA.handle();
  //Serial.println(WiFi.localIP());
  server.handleClient();
  MDNS.update();
  serialempfangen();  
  if (serialsenddelay.isExpired()) {
    serialsenddelay.setDelayTimer(5000);
  snprintf(uhrzeit, 9, "%02d%s%02d%s%02d", hour(), ":", minute(), ":", second());
  snprintf(datum, 11, "%02d.%02d.%02d.", day(), month(), year());
  }

  
} //loop

int serialempfangen(){
  if (read_porteins())
  {
    zeile[SERIAL_BUFFER_SIZE] = '\0';
    snprintf(zeile1, SERIAL_BUFFER_SIZE - 1, "%s", zeile);
  anzteilstr=0;seraus += zeile;seraus += "\r\n";
  char *ptr = strtok(zeile1,";");
   while (ptr != NULL) {
    //porteins.println(ptr);
    snprintf(teilstr[anzteilstr], 14, "%s", ptr );
    anzteilstr++;    
    ptr = strtok(NULL,";");
   }    
  if (ausgabe.length() >= 499) {
    ausgabe = "utime;";
    ausgabe += now();         
  }
  if (seraus.length() >= 299) {
    seraus = "seraus;";seraus += "\r\n";
  }

  }//read_porteins()
  snprintf(teilstr[0], 2, "%s", "4");
}// serialempfangen()

void handleRoot() {
    digitalWrite(led, 0);
  char temp[500];
  int sec = millis() / 1000;
  int min = sec / 60;
  int hr = min / 60;
int anzahl = server.args();
String param;
  Serial.print("Anzahl Arg: ");
  Serial.println(anzahl);
  for(int i=0; i<anzahl;i++) {
    param = server.argName(i);
    Serial.print(param);
    Serial.print(" = ");
    if (server.hasArg(param)) {
       Serial.println(server.arg(param));    
    }
    else {
      Serial.print(i);
      Serial.println(" fehlt");
    }
  } 

  sResponse = "das wir eine Tabelle";  

  server.send(200, "text/html", sResponse);
  digitalWrite(led, 1);  digitalWrite(led, 0);
}

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);
}

Hallo,

bau dir doch mal eine serielle Ausgabe in void handlesol1() ein um zu sehen ob du da überhaupt reinkommst. Dann ist mir noch aufgefallen das in der void handlesol0() ein String aufgefüllt wird , der sollte zu Anfang mal gelöscht werden, oder local sein, so wird er ja immer länger.

warum sind tage monat jahr integer, erwartest Du negative Tage,

wozu deklarierst Du im global Teil Variablen als static ?
static DelayTimer serialsenddelay;
static DelayTimer menuausgabe;

dan finde ich im Setup

sResponse.reserve(4000);
clientsenden.reserve(500);
ausgabe.reserve(300);
seraus.reserve(300);

ist das richtig ? kenne ich so nicht, gibts da noch einen geheimen Teil.

Leider bekommen wir deinen Sketch so nicht zum laufen. Mein Vorschlag nimm den Hallo Server aus dem Beispiel und bau alles noch mal neu auf step by step.

Heinz

Hallo Rentner

Ich musste den Sketch kürzen es geht jetzt nur darum eine Antwort
zu bekommen im Firefox klappt es wenn Ich http://192.168.1.51/sol1
bekomme Ich eine Antwort gebe Ich es in den Beispiel Client ein verweigert
er Mir die Antwort Ich denke es liegt an dem client

Die Reserve wird ein Speicherbereich fuer Strings Reserviert die Daten der
Strings kommen dann nur in den Bereich

Also, es funktioniert im Browser wie mit dem Basic httpClient immer erst beim zweiten Aufruf, da deine Variable "ausgabe" beim ersten Aufruf noch leer ist. Diese befüllst du erst nach dem "server.send"!

Das ist der falsche Ablauf!

void handlesol1() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", ausgabe);
  digitalWrite(led, 0);
  ausgabe = "utime;";
  ausgabe += now();

}

Halte dich an das allgemein gültige Prinzip, zuerst die Verarbeitung und dann die Ausgabe!

void handlesol1() {
  ausgabe = "utime;";
  ausgabe += now();
  server.send(200, "text/plain", ausgabe);
}

Ansonsten muss ich unserem "Rentner" recht geben!

Der Sketch ist schlecht strukturiert und dadurch für andere schwer zu lesen.
Globale Variablen brauchen nicht static zu sein.
Variablen möglichst Local definieren.
Für Stunden, Minuten, Sekunden usw. reicht Byte.

Gruß Fips

Hallo Derfips

void handlesol1() {
  ausgabe = "utime;";
  ausgabe += now();
  server.send(200, "text/plain", ausgabe);
}

Habe Ich geander der Fehler ist geblieben
das dachte Ich Mir schon

 Stunden, Minuten, Sekunden usw. reicht Byte.

Das sind 3 Byte habe mehr wie 30000 Byte frei das ist auch nicht der Fehler

Gruss juergen

juergen01:
Das sind 3 Byte habe mehr wie 30000 Byte frei das ist auch nicht der Fehler

Das das nicht deinen Fehler behebt, war abzusehen!

Und ja, was soll ich sagen ich habe es mit deinem Sketch aus #6 und dem Basic httpclient der IDE getestet.

Ich habe lediglich die nicht vorhandenen Lib’s auskommentiert. (#include “SevenSegmentTM1637.h”, #include “SevenSegmentExtended.h”)

Der httpclient hat mir dein “utime;” angezeigt.

Mehr kann ich leider nicht tun!

Gruß Fips

Es liegt vermutlich an den kaputten Komma- und Punkt-Tasten an deinem Eingabegerät, mit dem du die Posts verfasst.

ElEspanol geile Antwort sehr Hilfreich und das zu Weihnachten Du bist der beste Oberlehrer

juergen01:
ElEspanol geile Antwort sehr Hilfreich und das zu Weihnachten Du bist der beste Oberlehrer

ElEspanols freundliche bitte scheint bei dir nicht angekommen zu sein!

Gruß Fips

Hi

@Derfips
Auch hier hätte ein großes B dem Satz den Sinn gegeben, Den Du wolltest.

@juergen01
Wenn Dir die Zeit fehlt, Dein Anliegen in halbwegs lesbarem Deutsch auszudrücken - dazu gehören nun auch Mal Satzzeichen, Die den Lesefluss erleichtern und auch den Sinn beeinflussen können - dann fehlt mir die Zeit, mich um Dein Geschreibsel zu kümmern - da ist selbst Rinnsteinkehrern sinnvoller investierte Zeit.

Hängt Ihn nicht freilassen.
Jo, wo wünscht Du Dir das Komma? Als Ankläger? Als Angeklagter?
(Nein, nicht hinter Hängt ... setzen, Sechs)

In diesem Sinne

So Leute

Es ging nicht um die Satzzeichen es ging um 2 Sätze

"Habe Ich geändert der Fehler ist geblieben"

"Das sind 3 Byte habe mehr wie 30000 Byte frei das ist auch nicht der Fehler"

Dann haben die sogenannten Experten gesucht und wer sucht der findet da
Ich ja niemanden beleidigt habe Ich habe in diesen Board noch nie Satzzeichen
benutzt und Ich bin schon einige Jahre in dem Board
Dann haben sich seine Freunde zusammengerottet um dann auf einen Einzelnen
drauf zuhauen man nennt das auch Mobbing auch Leute die vorher gar nicht geschrieben
haben haben sich dann gemeldet Ich habe auch keinen gezwungen Meine Texte zu lesen
einfach weiter scrollen geholfen hat nur einer aber das ist auch einer der Freunde

PS Hello Server und Client laufen gut

Ich Wünsche Euch noch einen Nassen Winter
Ich werde Mich Morgen bei 30 Grad in die Sonne legen und Mich verwöhnen lassen