我正在构建一个简单的网站,当主机从连接到同一网络的另一台设备接收数据时,该网站应更新文本文件 . 有问题的设备是一个测量温度的小型气象站 . 站点通过PHP GET命令通过来自ESP8266芯片的Wifi发送温度 . 该信号由家庭路由器接收并重定向到托管该网站的网络上的笔记本电脑 .
我有问题,因为ESP8266芯片似乎正确发送数据/ PHP GET命令 . 然而,该网站从未更新自己 .
为了简化故障排除系统,气象站由笔记本电脑取代 . 笔记本电脑通过USB转串口(UART)电缆直接连接到ESP8266芯片 . 所有与ESP8266芯片通信的AT命令都在Arduino IDE串行监视器中输入 .
The website
该网站非常简单 . 每当它从ESP8266芯片接收数据时,它就会将其写入文本文件中 .
该网站存储在IP为192.168.1.2的笔记本电脑上 .
phodor@UBUNTU:~$ 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中 .
phodor@UBUNTU:~$ 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中 .
phodor@UBUNTU:~$ cat /var/www/html/index.php
$a = $_GET['temp'];
$dataSaved = file_put_contents("data.txt",$a . "\n",FILE_APPEND);
echo "Temperature is " . $a . " oC.";
?>
当我在Firefox中手动键入以下行时:
http://192.168.1.2/index.php?temp=28
以下文本显示在浏览器中,数字“28”保存在data.txt中 .
Temperature is 28 oC.
The ESP8266 Chip
如上所述,在最终系统中,ESP8266芯片将接收来自小型气象站的串行指令 . 但为了简化调试,芯片现在通过USB转串口(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
所以在这一点上,消息“温度是10 oC” . 应出现在串行监视器中,数字“10”应附加到文件“data.txt” . 但没有任何反应......
有什么建议?
Additional Notes
2)正如下面的一些评论所指出的,GET命令可能不那么传统 . POST或PUT可能更合适 . 但目前我只是想了解为什么网站没有响应芯片 .