Binärdaten von ESP32 per WiFi an PC übertragen.

Hallo, ich muss ein Geständniss machen: Ich arbeite noch mit Visaual Basic 6.
Warum lassen wir mal dahingestellt sein.
In VB6 gibt es ein Winsocket, mit dem man sich mit einer anderen IP-addresse verbinden und Daten austauschen kann. Ich möchte also einfach nur binäre Daten vom ESP32 an meinen Computer senden.
Ohne Webseite, ohne Schnick-Schnack, nur binäre Daten von Peer to Peer bzw Socket zu Socket.
Habe schon viele Client-Server-Anwendungen unter Verwendung des Sockets programmiert, UDP, TCP/IP, Ports und der ganze Krims-Krams sind also keine Fremdwörter für mich.
Der ESP32 sollte eine IP-Address vom lokalen DNS-Server beziehen, damit ich auch Daten zurückschicken kann.
Existieren da schon Lösungen?
Gibt es so etwas wie ein Socket auch in der Arduino-Welt? Oder gibt es was ähnliches?
Oder wie würde so ein einfachen Peer to Peer Datentransfer in der Arduino-Welt aussehen?

Dank im voraus

In den Beispielen der IDE findest du ein Beispiel für einen Client und damit verwendest du UDP.
Das wird der einfachste Weg sein.

das Wifi - WifiClientBasic Beispiel wäre TCP.

In den Beispielen zum ESP8266 ist auch UDP dabei.

Gruß Tommy

So, ich habe jetz einen kleinen Server erstellt.
Ich kann den Server mit Telnet testen und da funzt alles perfect.
Ich habe den "WiFi-WifiClientBasic" angepasst.

Der Clinet logt sich erfolgreich in mein Heimnetz ein.

Ich versuche statt mit dem Servernamen mit der IP-Adderess zu connecten:

char ipa[4] = {192,168,178,20};

const int httpPort = 1234;

if (!client.connect(ipa, httpPort)) {
......

Beim Server kommt kein "connection requst" an.

Ich hasse Blindflug. Dieses "rumprobieren" nervt.
Gibt es eine vernünftige WiFi" Programmers Refence?

protolus:
Ich habe den “WiFi-WifiClientBasic” angepasst.

Ich hasse Blindflug. Dieses “rumprobieren” nervt.

Warum sollen wir deinen Blindflug folgen - dein Sketch würde für eine Unterstützung fehlen.

Aber, nimm den IDE Sketch so wie er ist, passe ausschließlich in Zeile 39 und Zeile 40 die Werte an, doktore nicht an den Variabeln rum, sondern probier es aus wie es ist und poste den Serial Output falls das nicht gehen soll.

P.S.: du bist ja kein Anfänger, was willst in der Rerferenz lesen, was nicht auch in der .h und .cpp stehen würde???

@TO: Meinst Du mit Deinem Fragment kann jemand etwas anfangen?
Poste bitte den kompletten Code in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter oder gehe in der IDE auf Bearbeiten - Für Forum kopieren und füge es hier ein).
Dann ist er auch auf mobilen Geräten besser lesbar.

Was soll das für ein Server sein? TCP/UDP/HTTP?

Gruß Tommy

Also der Server ist ein TCP-Server.
Der Server wartet auf ein “ConnectionRequest”. Mit dem connectionRequest kommt bei TCP eine “requestID”, die mit connectionAccept wieder zurückgeschickt wird.

Wie schon gesagt, der Connect zu meinem Heimnetz funktioniert.

Hier der Client-sketch:


/*

  • This sketch sends data via HTTP GET requests to my Server.

*/

#include <WiFi.h>

const char* ssid = “Flying************”;
const char* password = “9124601*************”;

const char* host = “192,168,178,20”;
char ipa[4]={192,168,178,20};

String tex=“Hallo Manze”;

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

// We start by connecting to a WiFi network

Serial.println();
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”);
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

int value = 0;

void loop()
{
delay(5000);
++value;

Serial.print("connecting to ");
Serial.println(host);

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 1234;
if (!client.connect(ipa, httpPort)) {
Serial.println(“connection failed”);
return;
}

// This will send Data to the server
client.print (tex);
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}

// Read all the lines of the reply from server and print them to Serial
//while(client.available()) {
// String line = client.readStringUntil(’\r’);
//Serial.print(line);
//}

Serial.println(“Daten gesendet”);

//Serial.println();
//Serial.println(“closing connection”);
}

also in meiner IDE schaut der Mustersketch so aus:

/*
 *  This sketch sends a message to a TCP server
 *
 */

#include <WiFi.h>
#include <WiFiMulti.h>

WiFiMulti WiFiMulti;

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

    // We start by connecting to a WiFi network
    WiFiMulti.addAP("SSID", "passpasspass");

    Serial.println();
    Serial.println();
    Serial.print("Waiting 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);
}


void loop()
{
    const uint16_t port = 80;
    const char * host = "192.168.1.1"; // ip or dns  --> nix Beistriche!

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

    // Use WiFiClient class to create TCP connections
    WiFiClient client;

    if (!client.connect(host, port)) {
        Serial.println("Connection failed.");
        Serial.println("Waiting 5 seconds before retrying...");
        delay(5000);
        return;
    }

    // This will send a request to the server
    client.print("Send this data to the server");

    //read back one line from the server
    String line = client.readStringUntil('\r');
    client.println(line);

    Serial.println("Closing connection.");
    client.stop();

    Serial.println("Waiting 5 seconds before restarting...");
    delay(5000);
}

protolus:
Hier der Client-sketch:

Du solltest Dir nochmal #6 durchlesen.

Gruß Tommy

Ein kleiner Tip, dass bei “Für Forum Kopieren” der Text in der Zwischenablage landet, hätte mir viel Sucherei und Zeit erspart.

Die Statusanzeige des Servers sagt: “Der Server ist empfangsbereit”

Hier zuerst noch, was im Arduino Terminal erscheint:

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8

Connecting to FlyingDutchman
.
WiFi connected
IP address:
192.168.178.102
connecting to 192,168,178,20
connection failed
connecting to 192,168,178,20
connection failed

/*
 *  This sketch sends data via HTTP GET requests to my Server.
 *
 */

#include <WiFi.h>

const char* ssid     = "FlyingDutchman";
const char* password = "9124601*************";

const char* host = "192,168,178,20";
char ipa[4]={192,168,178,20};

String tex="Hallo manze";

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

    // We start by connecting to a WiFi network

    Serial.println();
    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");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}

int value = 0;

void loop()
{
    delay(5000);
    ++value;

    Serial.print("connecting to ");
    Serial.println(host);

    // Use WiFiClient class to create TCP connections
    WiFiClient client;
    const int httpPort = 1234;
    if (!client.connect(ipa, httpPort)) {
        Serial.println("connection failed");
        return;
    }

    // This will send Data to the server
    client.print (tex);
    unsigned long timeout = millis();
    while (client.available() == 0) {
        if (millis() - timeout > 5000) {
            Serial.println(">>> Client Timeout !");
            client.stop();
            return;
        }
    }

    // Read all the lines of the reply from server and print them to Serial
    //while(client.available()) {
      //  String line = client.readStringUntil('\r');
        //Serial.print(line);
    //}

    Serial.println("Daten gesendet");

    //Serial.println();
    //Serial.println("closing connection");
}

einmal probier ich es noch:

connecting to 192,168,178,20

PUNKTE
keine Komma.

Warum hältst du dich nicht an einen funktonierenden Sketch so wie er in der IDE vorkommt?!?

Also ich versuchs jetzt auch noch mal:

Ich möchte auch Server connecten, von denen ich nur die IP-Addresse kenne.

Natürlich weiss ich, dass in einem String die IP-Adresse mit Punkten angegeben wird

"192.168.178.20"
Laut Arduino-Referenz kann man aber auch die IP-Adresse als 4 byte Array übergebn:

Siehe:
--------------- https://forum.arduino.cc index.php?topic=726389.new#new-----------------

Reference Language | Libraries | Comparison | Changes
WiFi : Client class
connect()
Description
Connect to the IP address and port specified in the constructor. The return value indicates success or failure. connect() also supports DNS lookups when using a domain name (ex:google.com).
Syntax
client.connect(ip, port)
client.connect(URL, port)
Parameters
ip: the IP address that the client will connect to (array of 4 bytes)
URL: the domain name the client will connect to (string, ex.:"arduino.cc")
port: the port that the client will connect to (int)
Returns
Returns true if the connection succeeds, false if not.

Darum in meinem Code die Zeile:
char ipa[4]={192,168,178,20};
Ich wüsste nicht, wie ich in einem Char-Array punkte unterbringen sollte.

protolus:
Ein kleiner Tip, dass bei "Für Forum Kopieren" der Text in der Zwischenablage landet, hätte mir viel Sucherei und Zeit erspart.

Wenn das schon zu kompliziert ist, ... Woraus fügt man ein?

Gruß Tommy

Normal füge ich das ein, das ich vorher bewusst mit Ctrl/C in die Zwischenablage kopiert habe. Ich glaube, jeder vernunftbegabte Mensch geht davon aus, wenn in einem Menü steht “Für Forum kopieren”, dass der Text in irgend ein File exportiert wird.

Sag mal, was soll das?

Warum gehst Du mich ständig von der Seite an?

Ich bin seit 1971 in der IT. Ich war 15 Jahre lang Field-Service-Engineer für wissenschaftliche Mainframe Grossrechner und bin dann in die Entwicklung Analog- Digitalelektronik Microcomputer Hard- und Software gegangen und war da sehr erfolgreich. 1988 habe ich die gesamte Digital- und Analogelektronik samt Software für den ersten Computergesteuerten Kamerawagen der Welt entwickelt. Dieser Kamerawagen hat 1989 den technischen Oscar in Los Angeles als das beste Filmequippment des Jahres gewonnen.
Der technische Oscar ist prestigeträchtiger als der Künstler-Oscar.
Du hast nicht mal gecheckt, dass ich die IP-Addresse als byte-array übergebe und mir vorgeschlagen, Punkte in ein array einzufügen. Und nur weil ich ein paar Fragen zur WiFi-Library habe, kommst Du mir blöd? Irgend was brauchbar fachliches hast Du bisher jedenfalls nicht von Dir gegeben.
Ich hoffe, Dein obergäriges Ego ist nicht symptomatisch für dieses Forum.
Ich habe das Problem inzwischen selber gelöst. Bin der Sache auf die Spur gekommen, als ich merkte, dass ich den Client anpingen kann. Der Client connected zum Server und die Daten flitzen nur so hin und her.
Also, danke für Nichts.

protolus:
Normal füge ich das ein, das ich vorher bewusst mit Ctrl/C in die Zwischenablage kopiert habe. Ich glaube, jeder vernunftbegabte Mensch geht davon aus, wenn in einem Menü steht "Für Forum kopieren", dass der Text in irgend ein File exportiert wird.

Sag mal, was soll das?

Warum gehst Du mich ständig von der Seite an?

...

Du hast nicht mal gecheckt, dass ich die IP-Addresse als byte-array übergebe und mir vorgeschlagen, Punkte in ein array einzufügen. Und nur weil ich ein paar Fragen zur WiFi-Library habe, kommst Du mir blöd? Irgend was brauchbar fachliches hast Du bisher jedenfalls nicht von Dir gegeben.

Du solltest lernen zu begreifen, wer was greschrieben hat. Das mit den Punkten kam nicht von mir.

Gruß Tommy

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.