Ich baue eine einfache Website, die eine Textdatei aktualisieren sollte, wenn der Host Daten von einem anderen Gerät mit dem gleichen Netzwerk verbunden erhält. Das fragliche Gerät ist eine kleine Wetterstation, die die Temperatur misst. Die Temperatur wird von der Station in einem PHP-GET-Befehl über Wifi von einem ESP8266-Chip gesendet. Das Signal wird vom Heimrouter empfangen und an einen Laptop im Netzwerk umgeleitet, auf dem die Website gehostet wird.PHP GET Anfrage gesendet von ESP8266 Wifi Chip aber nicht von der Website empfangen
Ich habe Probleme, weil der ESP8266-Chip den Befehl data/PHP GET korrekt zu senden scheint. Dennoch aktualisiert sich die Website niemals selbst.
Um das System zur Fehlersuche zu vereinfachen, wird die Wetterstation durch den Laptop ersetzt. Der Laptop ist über ein USB-zu-Seriell (UART) -Kabel direkt mit dem ESP8266-Chip verbunden. Alle AT-Befehle zur Kommunikation mit dem ESP8266-Chip werden in den Arduino IDE Serial Monitor eingegeben.
Die Website
Die Website ist sehr einfach. Wenn es Daten vom ESP8266-Chip empfängt, schreibt es es in eine Textdatei.
Die Website wird auf einem Laptop mit der IP-Adresse 192.168.1.2 gespeichert.
[email protected]:~$ ifconfig
wlp2s0 Link encap:Ethernet HWaddr 18:cf:5e:ee:3f:10
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
Die Website ist eine PHP-Datei, die auf einem Apache2-Server gehostet wird. Wenn sie ausgeführt wird, speichert die PHP-Datei die Temperatur in der Datei data.txt. Die Dateien werden unter/var/www/html gespeichert.
Jede GET-Anfrage, die an die PHP-Datei gesendet wird, sollte die Temperatur enthalten, damit die PHP-Datei die Temperatur in der Datei data.txt speichern kann.
[email protected]:~$ cat /var/www/html/index.php
<!DOCTYPE html>
<html>
<body>
<?php
$a = $_GET['temp'];
$dataSaved = file_put_contents("data.txt",$a . "\n",FILE_APPEND);
echo "Temperature is " . $a . " oC.";
?>
</body>
</html>
Wenn ich manuell eingeben die folgende Zeile in Firefox:
http://192.168.1.2/index.php?temp=28
Der folgende Text im Browser & Nummer "28" angezeigt wird, wird auch in data.txt gespeichert.
Temperature is 28 oC.
Die Esp8266 Chip
Wie oben erläutert, in das endgültige System der Esp8266 Chip serielle Befehle von einer kleinen Wetterstation empfangen wird. Um das Debuggen zu vereinfachen, ist der Chip jetzt mit einem USB-zu-Seriell (UART) -Kabel mit dem Laptop verbunden. Serielle Befehle werden mit dem Arduino IDE Serial Monitor an den Chip gesendet. Hier sind die Befehle gesendet.
AT
OK
AT+CWLAP
+CWLAP:(3,"MYMODEM",-31,"aa:bb:cc:dd:ee:ff",1,21)
OK
AT+CWJAP="MYMODEM","mypassword"
WIFI CONNECTED
WIFI GOT IP
OK
AT+CIPSTART="TCP","192.168.1.2",80
CONNECT
OK
AT+CIPSEND=56
OK
> GET /index.php?temp=10 HTTP/1.1\r\nHost: 192.168.1.2\r\n\r\n
busy s...
Recv 56 bytes
SEND OK
CLOSED
Also an dieser Stelle, Meldung "Temperatur ist 10 oC." sollte im Serial Monitor erscheinen und die Nummer "10" sollte an die Datei "data.txt" angehängt werden. Aber nichts passiert ...
Irgendwelche Vorschläge?
Zusätzliche Hinweise
1) Die PHP und AT Code Ich verwende ist sehr ähnlich zu dem, was in diesem Beitrag vorgestellt: https://www.youtube.com/watch?v=q02f4sPghSo.
2) Wie unten in einigen Kommentaren gezeigt wurde, ist der Befehl GET möglicherweise weniger konventionell. POST oder PUT sind möglicherweise besser geeignet. Im Moment versuche ich nur zu verstehen, warum die Website nicht auf den Chip reagiert.
FYI es ist schlecht/unkonventionell/kontra-indiced Stil, eine GET-Anfrage zu verwenden, um den Zustand des Servers zu ändern. Sie sollten POST oder PUT verwenden. – barny
Verwenden Sie einen Protokoll-Sniffer, um zu sehen, was tatsächlich im Netzwerk passiert, um zu sehen, welche Anfrage/Antwort stattfindet. – barny
@ barny: Danke für die Info oben. Irgendein Protokoll-Sniffer zum Vorschlagen? Ich kenne Protokoll-Sniffer nicht. – phodor