호스트가 동일한 네트워크에 연결된 다른 장치로부터 데이터를 수신 할 때 텍스트 파일을 업데이트해야하는 간단한 웹 사이트를 구축 중입니다. 해당 장치는 온도를 측정하는 작은 기상 관측소입니다. 온도는 ESP8266 칩에서 Wifi를 통해 PHP GET 명령으로 스테이션에서 전송됩니다. 신호는 홈 라우터에서 수신하고 웹 사이트를 호스팅하는 네트워크의 랩톱으로 리디렉션됩니다.PHP GET 요청이 ESP8266 Wifi 칩에 의해 전송되었지만 웹 사이트에서 수신되지 않았습니다.
ESP8266 칩이 데이터/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 파일에 보낸 GET 요청에는 온도가 포함되어 있어야 PHP 파일이 온도를 data.txt에 저장할 수 있습니다.
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>
내가 수동으로 파이어 폭스에서 다음 줄을 입력합니다.
Temperature is 28 oC.
ESP8266 칩
As를
는 ESP8266 칩 작은 기상대로부터 일련의 지시를받을 최종 시스템에서, 상술. 그러나 디버깅을 단순화하기 위해이 칩은 UART (USB-to-Serial) 케이블로 랩톱에 연결됩니다. 직렬 명령은 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
이 시점에서 "온도는 10 oC입니다."라는 메시지가 표시됩니다. 시리얼 모니터에 나타나야하며 숫자 "10"은 "data.txt"파일에 추가되어야합니다. 그러나 아무 일도 일어나지 않습니다 ...
어떤 제안이 있습니까?
추가 정보
1)를 PHP 코드 AT 내가 사용이 게시물에 제시된 것과 매우 유사하다 : https://www.youtube.com/watch?v=q02f4sPghSo.
2) 아래의 몇 가지 의견에서 지적했듯이 GET 명령은 덜 일반적입니다. POST 또는 PUT이 더 적절할 수 있습니다. 그러나 그 순간 나는 왜 웹 사이트가 칩에 응답하지 않는지 이해하려고 노력하고 있습니다.
참고 GET 요청을 사용하여 서버 상태를 수정하는 것은 좋지 않은/틀에 얽매이지 않는/반대 표현 스타일입니다. POST 또는 PUT을 사용해야합니다. – barny
프로토콜 스니퍼를 사용하여 네트워크에서 실제로 어떤 일이 일어나고 있는지 확인하고 어떤 요청/응답이 일어나는지 확인하십시오. – barny
@barny : 위의 정보를 제공해 주셔서 감사합니다. 제안 할 프로토콜 스니퍼가 있습니까? 나는 프로토콜 스니퍼에 익숙하지 않다. – phodor