首页 文章

以太网屏蔽:使用html格式从web发送数据到arduino [关闭]

提问于
浏览
0

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

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

2 回答

  • 1

    是的,这是可能的 . 但是你需要使用网络套接字 . 我用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方法 .

  • 3

    提交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"

相关问题