以太网屏蔽:使用html格式将数据从web发送到arduino

时间:2014-03-25 18:26:38

标签: html web arduino ethernet

我已经使用按钮完成了通过互联网控制设备。我使用Arduino Uno + SD CARD +以太网屏蔽。现在我想修改它,以便used可以通过表单提交发送文本命令来控制它。

当我使用Arduino Uno Memory获取HTML代码时,我可以这样做,但是当我使用SD卡进行HTML时,我现在遇到了问题。期待代码模块相同。

2 个答案:

答案 0 :(得分:3)

是的,这是可能的。但是你需要使用网络套接字。我用PHP做过。 因此,您将创建一个包含html和php的页面,当您单击提交按钮时,将发送命令。它必须是这样的,在php中:

<?php 
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_connect($sock,"ip number of arduino", 8080);

$messsage = '0';
if (isset($_POST['on'])){
    $msg='1';
}
if (isset($_POST['off'])){
    $msg='0';
}

socket_write($sock, $msg);
?>

因此,您只需编写一个html即可在提交表单时发送post方法。

答案 1 :(得分:1)

提交HTML表单实际上会调用HTTP协议的POST或GET方法。该协议是人类可读的。

来自w3schools的HTTP请求示例:

POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

这是你将进入arduino缓冲区的内容。您只需搜索name1 = pattern并读取该值并采取相应的行动。

在下面的例子中,我读取了变量s和e的值。

word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if (pos) {
  bfill = ether.tcpOffset();
  char* socket = strstr((char *)Ethernet::buffer + pos, "?s=");


  if(socket != 0){
    byte s = getIntArg(socket, "s");
    byte e = getIntArg(socket, "e");
    Serial.println("Request");
    Serial.println(s);
    Serial.println(e);
    PlanActions(s, e)
    }

此请求的表单如下:

<form action="." method="POST">
    <select name="s" size="1">
        <option value="0">TV</option>
        <option value="1">HiFi</option>
    </select>
    <input name="e" type="submit" value="0">
    <input name="e" type="submit" value="1">
</form>

在示例中,我从arduino发送简单的表单页面,但您可以将页面放在任何您想要的位置。它可以在本地计算机或Web服务器上。只需将操作更改为<form action="arduino-ip"