Forum: Mikrocontroller und Digitale Elektronik Arduino als Webserver --> Aufruf funktioniert nicht!


von Mad M. (madang)


Lesenswert?

Hallo!
Ich betreibe den Arduino UNO mit Ethernet-Shield und verwende das 
Beispiel "WebServer" der Arduino IDE.
Verbunden habe ich den UNO mit dem PC über den WLAN-Router über 
Patch-Kabel. Nur leider kann ich den Webserver nicht ansprechen.
Habe leider von TCP/IP keine Ahnung, wo-was-wann eingestellt werden 
muss, damit ich vom UNO-als Webserver betrieben etwas zurückbekomme.
Ich dachte durch Eingabe am Internetbrowser (192.168.1.177) wird der 
Arduino Aufgerufen und liefert in Form eines HTML-Skript etwas zurück.
Vielleicht kann mir jemand weiterhelfen.
Danke Mad!
1
#include <SPI.h>
2
#include <Ethernet.h>
3
4
// Enter a MAC address and IP address for your controller below.
5
// The IP address will be dependent on your local network:
6
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x1C, 0x36 };
7
IPAddress ip(192,168,1,177);
8
9
// Initialize the Ethernet server library
10
// with the IP address and port you want to use 
11
// (port 80 is default for HTTP):
12
EthernetServer server(80);
13
14
void setup() {
15
 // Open serial communications and wait for port to open:
16
  Serial.begin(9600);
17
   while (!Serial) {
18
    ; // wait for serial port to connect. Needed for Leonardo only
19
  }
20
21
22
  // start the Ethernet connection and the server:
23
  Ethernet.begin(mac, ip);
24
  server.begin();
25
  Serial.print("server is at ");
26
  Serial.println(Ethernet.localIP());
27
}
28
29
30
void loop() {
31
  // listen for incoming clients
32
  EthernetClient client = server.available();
33
  if (client) {
34
    Serial.println("new client");
35
    // an http request ends with a blank line
36
    boolean currentLineIsBlank = true;
37
    while (client.connected()) {
38
      if (client.available()) {
39
        char c = client.read();
40
        Serial.write(c);
41
        // if you've gotten to the end of the line (received a newline
42
        // character) and the line is blank, the http request has ended,
43
        // so you can send a reply
44
        if (c == '\n' && currentLineIsBlank) {
45
          // send a standard http response header
46
          client.println("HTTP/1.1 200 OK");
47
          client.println("Content-Type: text/html");
48
          client.println("Connection: close");  // the connection will be closed after completion of the response
49
    client.println("Refresh: 5");  // refresh the page automatically every 5 sec
50
          client.println();
51
          client.println("<!DOCTYPE HTML>");
52
          client.println("<html>");
53
          // output the value of each analog input pin
54
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
55
            int sensorReading = analogRead(analogChannel);
56
            client.print("analog input ");
57
            client.print(analogChannel);
58
            client.print(" is ");
59
            client.print(sensorReading);
60
            client.println("<br />");       
61
          }
62
          client.println("</html>");
63
          break;
64
        }
65
        if (c == '\n') {
66
          // you're starting a new line
67
          currentLineIsBlank = true;
68
        } 
69
        else if (c != '\r') {
70
          // you've gotten a character on the current line
71
          currentLineIsBlank = false;
72
        }
73
      }
74
    }
75
    // give the web browser time to receive the data
76
    delay(1);
77
    // close the connection:
78
    client.stop();
79
    Serial.println("client disconnected");
80
  }
81
}

von Mark R. (stevestrong)


Lesenswert?

Welche Uno Revision-Nummer hast du?
Welches Ethernet Shield: orginal oder clone?

Mad Madang schrieb:
> Ich dachte durch Eingabe am Internetbrowser (192.168.1.177) wird der
> Arduino Aufgerufen und liefert in Form eines HTML-Skript etwas zurück.

Ja, so ist es. Und was genau geht nicht? Was bekommst du angezeigt?
Was zeigt der Serial Monitor? Welche IP wurde an das Board alloziert?
Normalerweise wird die IP Adresse vom Router (DHCP) zugewiesen.

: Bearbeitet durch User
von Jürgen S. (jurs)


Lesenswert?

Mad Madang schrieb:

> Verbunden habe ich den UNO mit dem PC über den WLAN-Router
> über Patch-Kabel.

Also das Netzwerkkabel ist zwischen UNO und Router gesteckt?
Netzwerkkabel zwischen UNO und PC wäre im Normalfall falsch!

> Vielleicht kann mir jemand weiterhelfen.
> IPAddress ip(192,168,1,177);

Hast Du überprüft, dass die angegebene IP-Adresse auch zur Konfiguration 
Deines Heimnetzwerks passt? Und dass kein anderes Gerät im Netzwerk 
diese Adresse bereits hat?

von Mad M. (madang)


Lesenswert?

Hallo,
wenn ich 192.168.1.177 eingebe kommt die folgende Meldung:
--> Der Server unter 192.168.1.177 braucht zu lange, um eine Antwort zu 
senden.

- Hast Du überprüft, dass die angegebene IP-Adresse auch zur 
Konfiguration
- Deines Heimnetzwerks passt?
   * wie kann ich das überprüfen, den Router kann ich über 10.0.0.138
   * ansprechen
- Und dass kein anderes Gerät im Netzwerk diese Adresse bereits hat
   * wo sieht man wer welche Adresse hat.

Danke für deine Hilfe
Mad

von Mad M. (madang)


Lesenswert?

Hallo Mark
Welche Uno Revision-Nummer hast du?
 # R3

Welches Ethernet Shield: orginal oder clone?
 # Ethernet Shield Model R3 Made in Italy

Mad Madang schrieb:
> Ich dachte durch Eingabe am Internetbrowser (192.168.1.177) wird der
> Arduino Aufgerufen und liefert in Form eines HTML-Skript etwas zurück.

Ja, so ist es. Und was genau geht nicht? Was bekommst du angezeigt?
Was zeigt der Serial Monitor? Welche IP wurde an das Board alloziert?
 # was meist du mit alloziert? Dem Board habe ich die 192.168.1.177
   raufgespielt
Normalerweise wird die IP Adresse vom Router (DHCP) zugewiesen

 # der serielle Monitor spukt folgendes aus: "server is at 
192.168.1.177"
 # der Router, über den der Arduino angesprochen wird, hat die
   IP-Adresse : 10.0.0.38

IP-mäßig habe ich leider ein schlechtes Verständnis!
Danke für deine Hilfe
Mad

von Jürgen S. (jurs)


Lesenswert?

Mad Madang schrieb:
> wenn ich 192.168.1.177 eingebe kommt die folgende Meldung:
> --> Der Server unter 192.168.1.177 braucht zu lange, um eine Antwort zu
> senden.

Das bedeutet: Entweder der Server ist nicht vorhanden oder diese Adresse 
ist aus Deinem Netzwerk heraus überhaupt nicht erreichbar.

>    * wie kann ich das überprüfen, den Router kann ich über 10.0.0.138
>    * ansprechen

Das sieht mir nicht nach einem kleinen Heim- oder Büronetzwerk aus, 
sondern nach einem Riesennetzwerk. Was ist das? Hängst Du irgendwo auf 
einem Universitäts-Campus am Netz? In einer Riesenfirma?

Das Netz sieht mir aus als wenn es einen Netzwerkadministrator hat.

In dem Netz würde ich als erstes mal probieren, eine IP-Adresse per DHCP 
zu beziehen. Ändere Dein Programm in der Initialisierung und lasse die 
ip weg:
1
//  Ethernet.begin(mac, ip);
2
  Ethernet.begin(mac);

Wird Dir dann vom Programm eine lokale IP-Adresse angegeben?
Welche lokale IP-Adresse bekommst Du dann vom Netzwerk zugeteilt?

von Mad M. (madang)


Lesenswert?

Jürgen S. schrieb:
> Mad Madang schrieb:
>> wenn ich 192.168.1.177 eingebe kommt die folgende Meldung:
>> --> Der Server unter 192.168.1.177 braucht zu lange, um eine Antwort zu
>> senden.
>
> Das bedeutet: Entweder der Server ist nicht vorhanden oder diese Adresse
> ist aus Deinem Netzwerk heraus überhaupt nicht erreichbar.
>
>>    * wie kann ich das überprüfen, den Router kann ich über 10.0.0.138
>>    * ansprechen
>
> Das sieht mir nicht nach einem kleinen Heim- oder Büronetzwerk aus,
> sondern nach einem Riesennetzwerk. Was ist das? Hängst Du irgendwo auf
> einem Universitäts-Campus am Netz? In einer Riesenfirma?
 ## nein, es ist bei mir zuhause, ganz ein einfacher w-lan-Router, den
    ich zwischen pc und uno-ethernet-shield via patch-kabel geschaltet
    habe.

> Das Netz sieht mir aus als wenn es einen Netzwerkadministrator hat.
>
> In dem Netz würde ich als erstes mal probieren, eine IP-Adresse per DHCP
> zu beziehen. Ändere Dein Programm in der Initialisierung und lasse die
> ip weg:
> //  Ethernet.begin(mac, ip);
>   Ethernet.begin(mac);
 ## initalisiert habe ich erledigt
>
> Wird Dir dann vom Programm eine lokale IP-Adresse angegeben?
 ## wie finde ich heraus, welche ip-adresse mir zugeteilt wurde?

> Welche lokale IP-Adresse bekommst Du dann vom Netzwerk zugeteilt?

von Chris D. (xportdus)


Lesenswert?

Mad Madang schrieb:
>
>  # der serielle Monitor spukt folgendes aus: "server is at
> 192.168.1.177"
>  # der Router, über den der Arduino angesprochen wird, hat die
>    IP-Adresse : 10.0.0.38
>
> IP-mäßig habe ich leider ein schlechtes Verständnis!
> Danke für deine Hilfe
> Mad

das kann so nicht klappen - verpasse dem Arduino Webserver mal eine 
Adresse im gleichen  Subnetz ist sonst wird das nie klappen

Was hat dein Rechner für eine IP Adresse vom Router bekommen ???

das muss irgendwas in richtung 10.0.0.xxx sein !

nun must die deinem Arduino auch eine ipadresse im gleichen Sunbnetz 
zuweisen sonst wird das nicht klappen

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x1C, 0x36 };
IPAddress ip(192,168,1,177);  <<<<----- genau hier

versuche es mal mit der z.B. 10.0.0.100 dann sollte der Webserver sich 
unter der Ipadresse 10.0.0.100 ansprechen lassen.

viel erfolg

chris

von Jürgen S. (jurs)


Lesenswert?

Mad Madang schrieb:
>  ## nein, es ist bei mir zuhause, ganz ein einfacher w-lan-Router, den
>     ich zwischen pc und uno-ethernet-shield via patch-kabel geschaltet
>     habe.

Aha, also hat Dein Netzwerk jetzt irgendwie zwei Router, oder was?

Einen Router, mit dem Du vom PC aus ins Internet gehst und über den Du 
jetzt an diesem Forum teilnimmst?

Und einen weiteren Router, den Du zwischen PC und Arduino UNO 
gestöpselst hast.

Wenn Du nicht wenigstens Grundkenntnisse in Netzwerkadministration hast, 
hört sich diese Konfiguration nicht so an, als wenn sie funktioniert.

"Einfache W-Lan Router" haben immer eine HTML-Administrationsoberfläche. 
Kannst Du von Deinem PC aus die HTML-Administrationsoberfläche Deines 
Routers erreichen, der zwischen PC und UNO hängt?

Normalerweise muß der UNO an demselben Router angeschlossen sein, an dem 
der PC angeschlossen ist und über den Du ins Internet gehst.

von Mad M. (madang)


Lesenswert?

Chris dus schrieb:
> Mad Madang schrieb:
>>
>>  # der serielle Monitor spukt folgendes aus: "server is at
>> 192.168.1.177"
>>  # der Router, über den der Arduino angesprochen wird, hat die
>>    IP-Adresse : 10.0.0.38
>>
>> IP-mäßig habe ich leider ein schlechtes Verständnis!
>> Danke für deine Hilfe
>> Mad
>
> das kann so nicht klappen - verpasse dem Arduino Webserver mal eine
> Adresse im gleichen  Subnetz ist sonst wird das nie klappen
>
> Was hat dein Rechner für eine IP Adresse vom Router bekommen ???
>
> das muss irgendwas in richtung 10.0.0.xxx sein !
>
> nun must die deinem Arduino auch eine ipadresse im gleichen Sunbnetz
> zuweisen sonst wird das nicht klappen
>
> // Enter a MAC address and IP address for your controller below.
> // The IP address will be dependent on your local network:
> byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x1C, 0x36 };
> IPAddress ip(192,168,1,177);  <<<<----- genau hier
>
> versuche es mal mit der z.B. 10.0.0.100 dann sollte der Webserver sich
> unter der Ipadresse 10.0.0.100 ansprechen lassen.
>
> viel erfolg
>
> chris

Hallo chris, wenn ich ipconfig über's cmd-tool auf meinem rechner 
eingebe, dann sehe ich folgendes: DNS-Suffix: lan
           ipv4-adresse 10.0.0.1
           subnetzmaske 255.255.255.0
           standardgateway 10.0.0.138
Mein Rechner läuft über w-lan (Wifi)
           ipv4-adresse 10.0.0.2

Habe den Uno die ip-adresse 10.0.0.100 gegeben und versucht, mit dieser 
adresse ihn aufzurufen, leider ohne erfolg!
danke für deine mühe
mad

von Walter (Gast)


Lesenswert?

Mad Madang schrieb:
> ## wie finde ich heraus, welche ip-adresse mir zugeteilt wurde?

indem Du dir mal die source anschaust die auf deinem Arduino läuft, da 
stehen dann nämlich die beiden folgenden Zeilen:

Mad Madang schrieb:
> Serial.print("server is at ");
>   Serial.println(Ethernet.localIP());

was die bedeuten solltest Du selber herausfinden

von Mad M. (madang)


Lesenswert?

Hallo Walter,
ja habe es herausgefunden!
Nämlich die Steckplätze des Router wollten nicht so richtig!
D.h., Steckplatz 1 und 3 von 4 vertragen sich nicht - 1 u. 2 hingegen 
schon.
Keine Ahnung warum. Ist halt so ;-)
Danke nochmals
Mad

von Mark R. (stevestrong)


Lesenswert?

Mit dem FritzBox kann einzelne LAN Ports ein/ausschalten, vielleicht ist 
bei dir auch sowas passiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.