【问题标题】:PHP site to control Arduino sends code on load of webpage控制 Arduino 的 PHP 站点在加载网页时发送代码
【发布时间】:2015-11-08 13:41:09
【问题描述】:

我正在尝试使用我的 Arduino 和我的服务器创建一个 domotica 设置。在使用射频发射器之前,我正在尝试从我的 php 网页控制 LED(将它们设置为开/关)。

除了在我加载/刷新网页时 LED1 亮起之外,一切都运行良好。我的网页包含以下代码(我改编自https://www.lassiemarlowe.com/tutorials/power-led-bulbs-arduino-php-part-2/):

<html>
<head>
<title>Arduino Domotica Control Panel</title>

这里有一些 css 代码...

<?php
switch($_POST)
{
    case isset($_POST['submitOn']):
        $fp = fopen("/dev/ttyUSB1", "w");
        fwrite($fp, 1);
        fclose($fp);
        break;
    case isset($_POST['submitOff']):
        $fp = fopen("/dev/ttyUSB1", "w");
        fwrite($fp, 2);
        fclose($fp);
        break;
    case isset($_POST['submitOn1']):
        $fp = fopen("/dev/ttyUSB1", "w");
        fwrite($fp, 3);
        fclose($fp);
        break;
    case isset($_POST['submitOff1']):
        $fp = fopen("/dev/ttyUSB1", "w");
        fwrite($fp, 4);
        fclose($fp);
        break;
    case isset($_POST['submitOn2']):
        $fp = fopen("/dev/ttyUSB1", "w");
        fwrite($fp, 5);
        fclose($fp);
        break;
    case isset($_POST['submitOff2']):
        $fp = fopen("/dev/ttyUSB1", "w");
        fwrite($fp, 6);
        fclose($fp);
        break;
    case isset($_POST['allon']):
        $fp = fopen("/dev/ttyUSB1", "w");
        fwrite($fp, 7);
        fclose($fp);
        break;
    case isset($_POST['alloff']):
        $fp = fopen("/dev/ttyUSB1", "w");
        fwrite($fp, 8);
        fclose($fp);
        break;
}

?>
</head>


<body>

<h1>Control Panel</h1>


<form class="control-panel-frm" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <input type='submit'  class="s3d turnOn" name='submitOn' value='LED 1 on'>
    <input type='submit' class="s3d switchoff" name='submitOff' value='LED 1 off'>
    <br><br>
    <input type='submit'  class="s3d turnOn" name='submitOn1'  value='LED 2 on'>
    <input type='submit'  class="s3d switchoff"  name='submitOff1' value='LED 2 off'>
    <br><br>
    <input type='submit'  class="s3d turnOn" name='submitOn2'  value='LED 3 on'>
    <input type='submit'  class="s3d switchoff"  name='submitOff2'  value='LED 3 off'>
    <br><br>
    <input type='submit' class="s3d turnOn"  name='allon' value='All LEDs on'>
    <input type='submit'  class="s3d switchoff"  name='alloff' value='All LEDs off'>

</form>

如前所述,问题是当我加载/刷新网页时 LED1(对应于 php post 'submitOn')打开。检查串行监视器时,Arduino 收到“1”。

为了防止我的网页在加载时向 Arduino 发送任何内容,我应该进行哪些更改?

【问题讨论】:

    标签: php arduino


    【解决方案1】:

    我认为你理解 switch 错误。 Switch 将大括号() 中的值与大小写给出的值进行比较。请参阅 switch 的手册页以获得更多说明。

    此外,您还没有理解数据从 html 表单到 PHP 应用程序的传输。您发送LED 1 on 作为表单元素submitOn 的值。

    试试这个:

    <?php
    $actions = [
        'submitOn' => 1,
        'submitOff' => 2, 
        //...
    ];
    
    if(!empty($_POST['action']) && array_key_exists($_POST['action'], $actions)){
        $fp = fopen("/dev/ttyUSB1", "w");
        fwrite($fp, $actions[$_POST['action']]);
        fclose($fp);
    }
    
    ?>
    <form class="control-panel-frm" method="post" action="">
        <input type="submit" class="s3d turnOn" name="action" value="submitOn">
        <input type="submit" class="s3d switchoff" name="action" value="submitOff">
    </form>
    

    请注意,表单的空action 会将表单数据发送到当前页面。如需使用多个提交按钮,请参阅Two submit buttons in one form

    【讨论】:

    • 代码if行有一处语法错误;该行应以 3 个括号 ) 结尾,而不是代码中看到的两个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多