我需要帮助。 现在mo Arduino连接到Web服务器。在网络服务器上,我会有一个.php页面可以打开和关闭LED。
不幸的是我不知道如何编写.php页面而不知道如何与Arduino进行交互。我在互联网上搜索了很多,但我找不到帮助我的指南。
我已经做了同样的事情,但使用Arduino网络服务器,它完美无缺。我现在希望Arduino是客户端,另一台服务器发送参数。
有人有什么想法吗?
这是我的草图(成功连接到服务器):
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
IPAddress server(xxx,xxx,xxx,xxx); //
// char server[] = "www.google.com"; // name address for Google (using DNS)
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192,168,1,177);
// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
pinMode(2, OUTPUT);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip);
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.println("connecting...");
// if you get a connection, report back via serial:
if (client.connect(server, 80)) {
Serial.println("connected");
// Make a HTTP request:
// client.println("GET /search?q=arduino HTTP/1.1");
// client.println("Host: www.google.com");
// client.println("Connection: close");
client.println();
digitalWrite(2, HIGH);
}
else {
// kf you didn't get a connection to the server:
Serial.println("connection failed");
}
}
void loop()
{
// if there are incoming bytes available
// from the server, read them and print them:
if (client.available()) {
char c = client.read();
Serial.print(c);
}
// if the server's disconnected, stop the client:
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
// do nothing forevermore:
while(true);
}
}
谢谢!
答案 0 :(得分:1)
我正在分享我最后一年btech项目的代码链接&#34;使用互联网控制设备&#34;。 (当然这可以通过使用arduino + ethernet作为服务器轻松完成,但问题是你需要端口转发路由器以便从本地网络外部访问服务器端口转发根据安全方面的风险很小。)
我使用了apache服务器(用于测试我安装在我的笔记本电脑上,后来我使用了托管网站)和Arduino + Ethernet Shield作为客户端。获取后,Arduino将HTTP请求发送到服务器以获取XML文件,它解析XMl并控制设备。我使用PHP创建UI并更新XML文件....
正如你所说&#34;我现在希望Arduino是客户端,而另一台服务器发送参数&#34;
将xml或文本文件放在服务器中。(现在我正在考虑 test.xml ,如果你想使用文本文件,请输入&lt; 1,0,1,0,1&gt;在文本文件中)
<?xml version="1.0" encoding="utf-8"?>
<devices>
<device name="1">
<state>OFF</state>
</device>
<device name="2">
<state>ON</state>
</device>
</devices>
让你的arduino每秒向服务器发送一个xml文件的HTTP请求。
//sending HTTP request for xml file
client.println("GET /test.xml HTTP/1.1");
client.println( "Host: localhost");
client.println();
获取xml文件后,您需要解析 xml文件,以便在状态标记中读取值( ON或OFF )(检查<在arduino代码中强> xmlread()函数来解析xml)
以下链接包含4个文件 class.php,xmlupdate.php,test.xml,withxmldevicecontrol.ino(arduino code)
class.php 用于创建UI(按钮等),并通过 xmlupdate.php
更新XML文件xmlupdate.php 将更新XML文件( test.xml )
withxmldevicecontrol.ino 是arduino代码,Arduino从服务器获取 text.xml 文件,解析xml并控制设备。
使用这个arduino可以控制10个设备(可以使用端口扩展器IC控制许多设备)
代码链接:
https://drive.google.com/folderview?id=0BxWdBbr_6RYkSXVwcGxOa3pxTDA&usp=sharing