Text per TCP empfangen und per println anzeigen?

Hallo Arduino Freunde,

wieder stehe ich vor einem kleinen Problem.
Ich möchte mit einem kleinen Tool (namens Packet Sender) einen ASCII Text an meinen ENC28J60 senden und diesen empfangen Text mit dem println Befehl im Monitor anzeigen lassen.

Ich habe mich natürlich schon per Google umgeschaut, aber leider bin ich mit der ganzen Arduino IDE so frisch bewandert das mir die meisten Quellcode's einfach noch nicht genug sagen. Habe mir auch die Ethercard Lib Dokumentation (auf englisch) angeschaut, aber leider wurde ich nicht fündig.

Hier mal mein Beispielcode:

// Present a "Will be back soon web page", as stand-in webserver.
// 2011-01-30 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
 
#include <EtherCard.h>

#define STATIC 1  // set to 1 to disable DHCP (adjust myip/gwip values below)

#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,178,200 };
// gateway ip address
static byte gwip[] = { 192,168,178,1 };
// DNS Adress
static byte dnss[] = {192,168,178,1};
// Subnet Mask
static byte subm[] = {255, 255, 255, 0};
#endif

// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[500]; // tcp/ip send and receive buffer
static BufferFiller bfill;  // used as cursor while filling the buffer

const char page[] PROGMEM =
"HTTP/1.0 503 Service Unavailable\r\n"
"Content-Type: text/html\r\n"
"Retry-After: 600\r\n"
"\r\n"
"<html>"
  "<head><title>"
    "Service Temporarily Unavailable"
  "</title></head>"
  "<body>"
    "<h3>This service is currently unavailable</h3>"
    "<p><em>"
      "The main server is currently off-line.
"
      "Please try again later."
    "</em></p>"
  "</body>"
"</html>"
;




void setup(){
  Serial.begin(57600);
  while (!Serial) { } ; // wait for serial port to connect. Needed for native USB
  Serial.println("\n[backSoon]");
  
  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0) 
    Serial.println( "Failed to access Ethernet controller");
  #if STATIC
    ether.staticSetup(myip, gwip, dnss, subm);
    ether.hisport = 8080;
  #else
    if (!ether.dhcpSetup())
      Serial.println("DHCP failed");
  #endif

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip);  
  ether.printIp("Mask: ", ether.netmask);
 
}




void loop(){
  // wait for an incoming TCP packet, but ignore its contents
  if (ether.packetLoop(ether.packetReceive())) {
    Serial.println("Incoming TCP Packet...");
    
    Serial.println(???);
    
    memcpy_P(ether.tcpOffset(), page, sizeof page);
    ether.httpServerReply(sizeof page - 1);
  }
  
}

In der Loop Anweisung habe ich eine Zeile mit 'Serial.println(???);' hinzugefügt, weil ich an der Stelle gerne den Text ausgeben möchte der per TCP in dem Buffer empfangen wurde.

Wäre toll wenn mir jemand die herangehensweise erläutern kann wie ich das hin bekommen kann.

Mein Hauptziel liegt darin, später Befehle per TCP zu senden und der Arduino führt dann eine entsprechende Funktion aus. (Aber wäre erst der übernächste Step)

Vielen Dank schon mal im voraus :slight_smile:

Beste Grüße,
kinglazee

Hallo kinglazee,

schau dir mal diesen Post an, da wird genau das gemacht, was du suchst.

gruß
Reinhard

Danke Reinhard,

die Quellcode's arbeiten leider alle mit der Ethernet Lib, nicht mit der Ethercard Lib.
Könnte man die Lib's migrieren?

Ich werd mal weiter suchen...

Das geht doch aus mindestens einem der Beispiele ganz deutlich hervor:

word pos = ether.packetLoop(ether.packetReceive());
if (pos) 
{
  char* data = (char *) Ethernet::buffer + pos;

  Serial.println(data);
}

Der Text muss muss dabei Null-terminiert sein, sonst bricht println() nicht korrekt ab. Kann aber gut sein, dass der Speicher nach den empfangen Daten automatisch auf 0 steht.

Danke Serenifly,

das war genau das was mir gefehlt hat. Funktioniert Perfekt! :slight_smile:

Werde mir jetzt die Befehle mal im einzelnen genau anschauen um mehr von der Arduino-Sprache zu verstehen.

Vielen Dank

Gruß,
kinglazee

P.S. Super Forum hier übrigens. Top