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
Logging nach Serial und/oder Telnet
18.02.2021, 10:51
Beitrag #17
RE: Logging nach Serial und/oder Telnet
Noch ein Nachtrag: ich hatte übersehen, dass es in Print.h auch noch eine Funktion
Code:
virtual size_t write(const char *buffer, size_t size);
gibt. Die wird von Print benutzt, um Ausgaben aus printf(), println() etc. zu machen. Die interne Implementierung dieser Funktion benutzt aber dann das single-char-Write
Code:
size_t write(char c);
das jede von Print abgeleitete Klasse implementieren muss (weil pure virtual).

Damit kommt die Ineffizienz zustande. Wenn man aber die Buffer-write()-Funktion ebenfalls implementiert, wird auch blockweise ausgegeben und das Ganze ist effizienter.

Klappt gut jetzt - ich bin's zufrieden.Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.06.2021, 14:57
Beitrag #18
RE: Logging nach Serial und/oder Telnet
@mic19:

Hallo, ich habe gerade fast genau den Fall das ich Ausgaben entweder per Serial oder per Ethernet (Client) schicken muss.

Habe wie in deinem Beispiel oben
Code:
Print& port = Serial;
eingefügt.

Alle Ausgaben sind nun auf
Code:
port.print(F("TEXT"));
umgestellt.
Das klappt soweit auch.
mit
Code:
Print& port = client;
funktioniert es nicht, gibt eine Fehlermeldung das client nicht definiert ist.

Die Befehlsübergabe von TCP funktioniert, nur die port.print Ausgaben kommen jedoch trotzdem über die Serielle.

Ich verstehe Deine Zeile nicht:
Code:
Mit einem "Print *LOGDEVICE;", also einem Pointer, geht es dann natürlich.

Wie muss das genau geschrieben werden um den "port" umzuschalten?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.06.2021, 15:24
Beitrag #19
RE: Logging nach Serial und/oder Telnet
Vergiss mal den Kram mit LOGDEVICE - das wäre nur relevant, falls Du meine komplette telnet-Log-Funktion übernehmen wolltest.

Du musst "client" definieren - das ist der TCP-Client, der die Ausgaben versenden soll. Kann WiFi oder Ethernet sein - das kommt auf Deine Randbedingungen an. Wichtig ist nur, dass es ein von der Klasse Print abgeleitetes Objekt ist - nur dann kannst Du port eine Referenz zuweisen und "port.print()" usw. benutzen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.06.2021, 20:50
Beitrag #20
RE: Logging nach Serial und/oder Telnet
client ist doch hier definiert:
Code:
Ethernet.begin(mac, ip);  // initialize Ethernet device
   server.begin();           // start to listen for clients
   EthernetClient client = server.available();  ...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.06.2021, 21:08
Beitrag #21
RE: Logging nach Serial und/oder Telnet
Dann würde ich sagen, dass die Definition irgendwo lokal bei dir steht, an der Stelle aber nicht sichtbar.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.06.2021, 22:22 (Dieser Beitrag wurde zuletzt bearbeitet: 17.06.2021 22:23 von mega-hz.)
Beitrag #22
RE: Logging nach Serial und/oder Telnet
ok, da muss ich suchen, krieg ich aber hin.

Aber wie lautet dann der Befehl zum umswitchen von Serial zu client?
Kannst Du mir da ein kurzen 2Zeiler schreiben?

Code:
Print& port = Serial;

ist ja ganz oben als Definition und kann später nicht geändert werden, richtig?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.06.2021, 04:56
Beitrag #23
RE: Logging nach Serial und/oder Telnet
Dafür müsstest du mal wieder deinen kompletten, aktuellen Code hier posten. Bruckstücke helfen nicht weiter.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.06.2021, 08:44
Beitrag #24
RE: Logging nach Serial und/oder Telnet
Das ganze Listing kann ich nicht posten, 1. zu groß und 2. müsste ich zu viele private Daten ändern.
Es geht ja lediglich um die richtige Schreibweise des Befehls zum umschalten zwischen Serial und client!

Warum ich einen Fehler bekommen hatte war klar:
ich habe oben
Code:
EthernetServer server(82);
angegeben, da kann ich ja nicht mit client abfragen sondern mit server!
Wenn ich nun in der Defination anstatt
Code:
Print& port = Serial;
Code:
Print& port = server;
schreibe, funktioniert die Kommunikation per Ethernet so wie sie soll!
Ein Schritt weiter!

Der Programmabschnitt um den es geht ist folgender:
Code:
//----------------------------------------------------------------------------------------------
void ser1()
//----------------------------------------------------------------------------------------------
{
  EthernetClient client = server.available();  

  if (readSerial(Serial) == true)
  {
    Print& port = Serial; // <--------------- nicht richtig! ---------- umschalten auf Serial
    parseSerial();
  }

  
  if (client)
  {
    while (client.connected())
    {
      if (client.available())
      {

      if (readSerial(client) == true)
      {
        Print& port = server; // <--------------- nicht richtig! ---------- umschalten auf Ethernet
        parseSerial();
      }
      } // end if (client.available())
    } // end while (client.connected())
    client.stop(); // close the connection
  } // end if (client)
}
//----------------------------------------------------------------------------------------------

Wie lautet der Befehl zum umschalten?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Wemos D1 mini: Startet nur nach Upload 1 mal RudolfAtITD 5 776 24.05.2021 18:38
Letzter Beitrag: Tommy56
  Serial Puffer manipulieren. Trexis5 46 4.326 21.05.2021 11:28
Letzter Beitrag: Trexis5
  Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe... Arduino4Fun 23 5.569 09.04.2021 16:15
Letzter Beitrag: amshh
  ESP8266 Webserver nach Zeit nicht mehr verfügbar. ESPWolf 21 3.357 02.02.2021 17:54
Letzter Beitrag: Tommy56
  falsches Display oder einfach nur keine Ahnung? Steinspiel 30 3.231 11.01.2021 19:48
Letzter Beitrag: Tommy56
  ESP-32 USB->Serial Adapter Positiv 1 1.367 31.08.2020 19:04
Letzter Beitrag: KlaRa
  Esp8266 GPIO default In- oder Out-put? N1d45 0 978 29.08.2020 06:58
Letzter Beitrag: N1d45
  Grundsätzliche Fragen nach Umstieg von Lua auf Arduino Stefan72 6 1.790 06.07.2020 22:58
Letzter Beitrag: Stefan72
  WEMOS D1 mini pro nach 4 Jahren gestorben Tommy56 1 1.254 02.07.2020 05:52
Letzter Beitrag: amithlon
  Allgemeine Frage zu serial.Print array Benny86 4 1.747 16.06.2020 02:10
Letzter Beitrag: Benny86

Gehe zu:


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