ホストが同じネットワークに接続された別のデバイスからデータを受信すると、テキストファイルを更新する簡単なウェブサイトを構築します。問題のデバイスは温度を測定する小さな気象ステーションです。温度はESP8266チップからWifi経由でPHP GETコマンドでステーションから送信されます。信号はホームルータによって受信され、ウェブサイトをホストしているネットワーク上のラップトップにリダイレクトされる。PHP GETリクエストがESP8266無線チップで送信されましたが、ウェブサイトでは受信されません
ESP8266チップがdata/PHP GETコマンドを正しく送信しているように見えるため、問題が発生しています。しかし、ウェブサイトは決して更新されません。
システムのトラブルシューティングを簡素化するため、気象ステーションがラップトップに置き換えられました。ラップトップはUSB-to-Serial(UART)ケーブルを介してESP8266チップに直接接続されています。 ESP8266チップと通信するすべてのATコマンドは、Arduino IDEシリアル・モニターに入力されます。
ウェブサイト
ウェブサイトは非常に簡単です。 ESP8266チップからデータを受信するたびに、それはテキストファイルに書き込まれます。
ウェブサイトは、IPが192.168.1.2のラップトップに保存されています。
[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
ウェブサイトはapache2サーバーでホストされているphpファイルです。実行すると、phpファイルはdata.txtファイルに温度を格納します。ファイルは/ var/www/htmlに格納されています。
[email protected]:~$ ls -la /var/www/html
-rwxrwxrwx 1 root root 0 Jul 31 22:41 data.txt
-rwxr-xr-x 1 root root 127 Jul 31 21:40 index.php
PHPファイルはdata.txtを内の温度を格納できるように、PHPファイルに送信されたGETリクエストは温度が含まれている必要があります。
http://192.168.1.2/index.php?temp=28
次のテキストがブラウザ&番号「28」に表示されますdata.txtをで保存されます:
[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>
は私が手動でFirefoxで次の行を入力するとき。
Temperature is 28 oC.
ESP8266チップ
としては、最終的なシステムでESP8266チップは小さい気象局からのシリアル命令を受信し、上記説明しました。しかし、デバッグを簡単にするために、チップはUSB-to-Serial(UART)ケーブルでラップトップに接続されています。シリアルコマンドは、Arduino IDEシリアルモニタを使用してチップに送信されます。ここに送られたコマンドがあります。
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
この時点で、「Temperature is 10 oC」というメッセージが表示されます。シリアルモニタに表示され、番号 "10"がファイル "data.txt"に付加されるはずです。しかし、何も起こりません...
何か提案がありますか?
追加メモ
1)PHPとコードを私が使用していますが、この記事で提示されたものと非常に似ています:https://www.youtube.com/watch?v=q02f4sPghSo。
2)以下、いくつかのコメントで指摘したように、GETコマンドが少なく、従来のかもしれません。 POSTまたはPUTが適切かもしれません。しかし、現時点では、私はウェブサイトがチップに応答していない理由を理解しようとしています。
GI要求を使用してサーバーの状態を変更することは、貧弱な/非従来型/反対称のスタイルです。 POSTまたはPUTを使用する必要があります。 – barny
プロトコルスニファを使用して、ネットワーク上で実際に何が起こっているかを確認し、どのような要求/応答が起きているかを確認します。 – barny
@barny:上記の情報をありがとう。提案するプロトコルスニファはありますか?私はプロトコルスニファに精通していません。 – phodor