PHP站点控制Arduino在网页加载时发送代码


PHP site to control Arduino sends code on load of webpage

我正试图用我的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发送任何内容,我应该更改什么

我想您对开关的理解是错误的。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将表单数据发送到当前页面。有关多个提交按钮的使用,请参阅一个表单中的两个提交按钮。