虽然简单,但初学者的我还是弄了一周,最后的成果是理清了一个概念问题。废话少说,先上代码。
1 if (client.connect(server, 80)) //用Tomcat的默认8080端口
2 {3 Serial.println("connected");4 client.println("GET /yinjiaozhichuli.php?q=ethernet"); //要传递的数据放在?后面,等号左边是变量名,//等号右边是数值(一般都是字符型)
5 client.println();6 } else{7 Serial.println("connection failed");8 }
这个是写在arduino里的部分代码,作用就是通过GET请求带着?后面的参数一起发到服务器。这里按理说是没有问题的,网上、书上全部都是标准格式的代码。
之后我在服务器端写了一个简单的PHP文件来处理这个请求:
1 <?php2 if($_GET["q"])3 {4 $yinjiaozhi=$_GET["q"];5 }6 else7 {8 $yinjiaozhi="error";9 }10 12 echo "$yinjiaozhi"13 ?>
这个只要运行的话,按照原计划是不是接到数据就输出q的数据?没接到就输出ERROR?一眼就看出问题的绝对是大神,对我这种小白来说却是百思不得其解了,运行结果却是这样的:
但是当我直接用浏览器发送请求时却成功了:
什么鬼?和说好的不一样啊!!为啥找不到q呢?在arduino的引脚监视器里明明显示连接成功并且请求也发到服务器了啊。而且语句语法完全没有错啊,我开始怀疑人生了。
吊胃口的事情咱就不做了,我就直接说我怎么发现问题的吧,当我把php文件改成这样时:我加入了把q值写到
1 <?php2 if($_GET["q"])3 {4 $yinjiaozhi=$_GET["q"];5 }6 else7 {8 $yinjiaozhi="error";9 }10 $stream = fopen("ttt.txt", "w+");11 fwrite($stream, $yinjiaozhi);12 echo "$yinjiaozhi"13 ?>
再运行PHP文件时网页上还是和上图一样
但是在我的ttt.txt文件中却出现了数值:
这说明服务器确实收到了arduino发的请求信息,并可以对其发来的数据进行操作,那为什么网页上却显示不了信息呢?原因是这样的:
php相当于一个信息处理器,作用就是将接收到的get请求中的数据保存入ttt.TXT文件并执行echo语句。当arduino向服务器发送请求时,服务器接受到了“q=arduino”这一信息。此时想看到结果的我急忙用浏览器打开php文件。php将服务器中储存的信息存入ttt.txt文件中(所以文件中有arduino字样),然后执行echo语。此时注意了,和php交互的此时是浏览器,而浏览器只是单纯的打开了PHP文件,并没有向服务器发出任何请求,所以网页上会显示找不到“q”的错误了。
当我在打开php文件的时候同时输入请求时,php文件就会找到我从地址栏发送的请求信息并进行显示了。
注:(本人是初学者,以上均为个人理解,如果在逻辑上有问题请指正,但所列举的事件都是事实证明过的)。