Arduino Web 客户端,使用 PHP 打开 LED

arduino web client, turn on led with php

提问人:wolfphp22 提问时间:3/24/2015 更新时间:9/5/2015 访问量:4765

问:

我需要帮助。 现在mo Arduino连接到Web服务器。在网络服务器上,我会有一个.php页面,可以打开和关闭 LED .

不幸的是,我不知道如何编写.php页面,也不知道如何与Arduino交互。我在互联网上搜索了很多,但我没有找到帮助我的指南。

我已经做了同样的事情,但是使用Arduino Web服务器,它运行良好。我现在希望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);
  }
}

谢谢!

PHP Arduino-IDE

评论

1赞 Epodax 3/24/2015
那么,您希望我们编写打开和/或关闭 LED 开关的代码吗?
0赞 wolfphp22 3/24/2015
是的,@Epodax。我需要帮助来编写 php 代码和要插入草图的代码
0赞 Epodax 3/24/2015
对不起,这不是我们在 SO 所做的,您必须为此聘请自由职业者,或者学习如何自己做
0赞 frarugi87 3/25/2015
你已经知道C语言了,所以PHP本身应该不是一个真正的问题。我在嵌入式网络方面没有做太多工作,但我认为你应该尝试在你使用的服务器上创建一个网络服务器,并创建一个页面,其中 0 用于关闭 LED,1 用于打开它。然后arduino读取此页面(通过get指令)并执行操作。首先,您可以手动编辑页面,然后可以使用另一个PHP页面在公共数据库中写入数据。至少这是我会尝试的......

答:

1赞 phani_rohith 9/4/2015 #1

我正在分享我最后一年的 btech 项目“使用互联网控制设备”的代码链接。(当然,这可以通过使用Arduino + Ethernet作为服务器轻松完成,但问题是您需要端口转发路由器才能从本地网络外部访问服务器,从安全角度来看,端口转发的风险很小。

我使用了apache服务器(用于测试,我安装在笔记本电脑中,后来我使用托管站点)和Arduino + Ethernet Shield作为客户端。Arduino在获取XML文件后向服务器发送XML请求,它解析XMl并控制设备。我使用PHP创建UI和更新XML文件。

正如你问的“我现在希望Arduino是客户端,另一个服务器向他们发送参数”

将 xml 或文本文件放入服务器中。(现在我正在考虑test.xml,如果你想使用文本文件,把<1,0,1,0,1>放在文本文件中)

<?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 代码)

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