Hallo, ich habe einen ESP8266 auf dem ein kleiner Webserver läuft und ein Relays schaltet. HTTP://192.168.2.221:84/relays-on" und HTTP://192.168.2.221:84/relays-off" funktioniert im Browser prima. Nun ist da aber noch ein Arduino-Uno mit ETH Shield im Netz, auf diesem läuft ein anderer Webserver. Von diesem soll in regelmäßigen Abständen von 30Sekunden auf den ESP Webserver mit eine der beiden Zeilen zugegriffen werden, um das Relays zu schalten. Wie kann man vom Arduino Webserver die IP Adresse des ESP ansprechen?
Wolfram F. schrieb: > Wie kann man vom Arduino Webserver die IP Adresse des ESP ansprechen? Ein Server ist ein Server und kein Client. Zwei Server unterhalten sich nicht.
Wie schon erwähnt geht das wohl mit dem Server nicht, aber hiermit sollte es funktionieren: https://www.arduino.cc/en/Tutorial/WebClient
würde evt schon ein Ping auf HTTP://192.168.2.221:84/relays-on" reichen oder nimmt Ping nicht den ganzen Pfad? das o.g. Beispiel funktioniert nicht mit dem /relays-on ... mit google schon. der Code der auf dem Uno existiert sieht so aus:
1 | EthernetClient client = server.available(); // try to get client |
2 | |
3 | if (client) |
4 | { // got client? |
5 | boolean currentLineIsBlank = true; |
6 | |
7 | while (client.connected()) |
8 | {
|
9 | int count = 0; |
10 | if (client.available()) |
11 | { // client data available to read |
12 | char c = client.read(); // read 1 byte (character) from client |
13 | // limit the size of the stored received HTTP request
|
14 | // buffer first part of HTTP request in HTTP_req array (string)
|
15 | // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
|
16 | if (req_index < (REQ_BUF_SZ - 1)) |
17 | {
|
18 | HTTP_req[req_index] = c; // save HTTP request character |
19 | req_index++; |
20 | }
|
21 | // last line of client request is blank and ends with \n
|
22 | // respond to client only after last line received
|
23 | // if (c == '\n' && currentLineIsBlank)
|
24 | if (c == '\n') |
25 | {
|
26 | client.println(F("HTTP/1.1 200 OK")); |
27 | client.println(F("Access-Control-Allow-Origin: *")); |
28 | // nur Ajax requests - send XML file
|
29 | if (StrContains(HTTP_req, "ajax_inputs")) |
30 | {
|
31 | digitalWriteFast(A0, HIGH); // LED einschalten |
32 | // send rest of HTTP header
|
33 | client.println(F("Content-Type: text/xml")); |
34 | client.println(F("Connection: keep-alive")); |
35 | client.println(); |
36 | SetLEDs(); // alle Ausgangs - Zustände setzen |
37 | // send XML file containing input states
|
38 | XML_response(client); // alle Daten zurücksenden |
39 | digitalWriteFast(A0, LOW); // LED ausschalten |
40 | }
|
41 | |
42 | // reset buffer index and all buffer elements to 0
|
43 | req_index = 0; |
44 | StrClear(HTTP_req, REQ_BUF_SZ); |
45 | |
46 | break; |
47 | }
|
48 | |
49 | // every line of text received from the client ends with \r\n
|
50 | if (c == '\n') |
51 | {
|
52 | // last character on line of received text
|
53 | // starting new line with next character read
|
54 | currentLineIsBlank = true; |
55 | }
|
56 | else if (c != '\r') |
57 | {
|
58 | // a text character was received from client
|
59 | currentLineIsBlank = false; |
60 | } // end if (client.available()) |
61 | } // end while (client.connected()) |
62 | }
|
63 | delay(1); // give the web browser time to receive the data |
64 | |
65 | client.stop(); // close the connection |
66 | } // end if (client) |
Kann man nicht einen Aufruf vor dem client.stop() einfügen der den ESP anspricht?
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.