【问题标题】:How do I control a webpage with an arduino?如何使用 arduino 控制网页?
【发布时间】:2023-03-08 18:42:01
【问题描述】:

我有一个 Arduino,我想设置一个按钮,通过输入引脚输入信号,这将打开或关闭外部网站上的灯(未托管在以太网屏蔽上)。我一直在浏览在线文档,但我唯一能找到的就是温度计读数。一些相关信息,我有一个带有以太网屏蔽的 Arduino Uno。我已经使用该站点进行了这项工作以打开或关闭 Arduino,我现在正尝试在另一个方向上执行此操作。我使用 php 脚本从页面控制 Arduino,如果有人愿意,我可以提供我的代码。

谁能给我任何建议或指出正确的方向?

【问题讨论】:

    标签: arduino


    【解决方案1】:

    您已经从 PHP 获得了一个网页,该网页已完全加载到您的浏览器窗口中。现在没有更多的服务器端操作,直到客户端发生某些事情(表单提交、刷新、单击新页面的链接等)

    我认为您应该研究的是 ajax 或 node.js 套接字传输,以在设备打开或关闭时实时显示页面上的灯光或其他内容。

    TL;DR 在这种情况下,仅 PHP 并不能满足您的需求。你需要一些异步的东西。

    【讨论】:

    • 好的,你能建议我如何将信息从 Arduino 发送到网络服务器,以及如何让页面使用这些信息吗?我对 ajax 或 node.js 一无所知。或者你可以链接一个关于如何做到这一点的网络指南吗?
    • 我从未使用过 Arduino,也从未使用过 Ajax。但我确实广泛使用 PHP,所以我知道它的局限性。如果您稍微更新您的问题,也许更有资格的人可以为您提供进一步的帮助。
    • 我应该添加什么样的信息?我很少使用堆栈溢出。
    • 我已经为您指出了一个模糊的正确方向,也许 AJAX 将是您异步更新网页的最佳选择,可以在外部站点上实时关闭和打开灯-时间。所以现在你需要做的事情的范围更窄了。您需要以某种方式在您的外部站点上存储一个变量,它会告诉您的 arduino 当前是打开还是关闭。您可能希望您的 ajax 页面监听该值的变化,并且您希望在您的 arduino 打开或关闭时以某种方式更改该值。无论如何,这似乎是您正在寻找的功能。
    • 如果在您的 arduino 代码中,您可以以某种方式将 GET 或 POST 数据发送到您的 Web 服务器,则 Web 服务器(使用 ajax 或节点)可以接收该 POST 数据,并将其存储在 javascript 变量中。它可以是一个简单的真/假全局布尔值,每次灯光改变状态时都会更新,并发送更新。从节点,可以以编程方式将更新广播到所有活动的客户端(每个需要立即查看灯是亮还是灭的人)。然后,每个客户端都会收到更新并相应地更改他们的视图。
    【解决方案2】:

    我在 2 年前做过一个项目,使用 arduino+ethernet 监测水位。我用过PHP。该项目在网页上显示水位,arduino 使用一些传感器测量水位,以太网模块将传感器值发送到服务器。我正在使用 tank.php 将水位(传感器值)发送到服务器上的文本文件 (L.txt)。

    arduino 代码

    /* put this in loop so that it reads level value and and send to the server every second*/
    sprintf(buffer, "GET /tank.php?level=%d HTTP/1.0",level );
    client.println(buffer);
    client.println( "Host: localhost");
    

    tank.php 会将等级值写入 L.txt。

    tank.php 的代码

    <?php
    $l = $_GET["level"]; 
    $fileLocation= "L.txt";
    $fl = fopen($fileLocation, 'w') or die("Something went wrong!"); 
    fwrite($fl, $l);
    fclose($fl); 
    ?> 
    

    最后是 waterlevel.php 用于显示。 waterlevel.php 从 L.txt 读取值并在网页上显示水位(我使用 Meta 标签每秒自动刷新)。

    waterlevel.php 的代码

    <?php
    $l = file_get_contents("L.txt");
    $tanklevel=$l;
    $a = 2 *(100 - $tanklevel) ;
    $b = 2*$tanklevel ;
    echo "<html><center>";
    echo "<meta http-equiv=refresh content=1>";
    echo "<p align= center >";
    echo "<font size= 8 >";
    echo "<h1>Tank Level</h1>";
    echo "<h2> $tanklevel% </h2>";
    echo "</p>";
    echo "<table width=200 cellspacing=0 cellpadding=0 border=1>";
    echo "<tr><td bgcolor=#cccccc height= $a ></td></tr>";
    echo "<tr><td bgcolor=#3333aa height= $b ></td></tr>";
    echo "</table>";
    echo "</center></html>";
    ?> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      相关资源
      最近更新 更多