无需浏览器/用户即可定期更新数据库

时间:2012-04-04 10:41:38

标签: php mysql live arduino

我目前有一个MySQL数据库,我希望用它来存储连接到互联网的温度传感器定期更新的数据。

我目前有一个页面,当打开时,它将获取当前温度和当前时间戳并将其添加为数据库的条目,但我正在寻找一种方法来做到这一点,而不是每隔5秒刷新一次页面

详情: 数据来自Arduino以太网,发布到IP地址。 目前,我正在使用cURL从IP中获取数据,添加时间戳并将其保存到数据库中。 显然只有刷新页面时更新(它使用PHP)。

以下是数据的实时Feed - http://wetdreams.org.uk/ChrisProject/UI/live_graph_two.html

TL; DR - 基本上我需要一个中间人从IP中获取数据并将其发布到MySQL

编辑:感谢您的所有建议。可能会有一些混乱,我正在寻找一种解决方案(理想情况下)根本不需要计算机(除了包含数据库的服务器)。由于我希望在很长一段时间(几周)内存储数据,我想设置它并在服务器(或Arduino)上运行一个脚本来获取临时值并将其发布到数据库。

在我的脑海中,我想在服务器上有一个页面自动(没有任何浏览器打开,或者除了计时器之外的任何其他提示)调用PHP脚本。

希望能够解决问题!

5 个答案:

答案 0 :(得分:2)

您可以使用ArduinoEtherenetClient从您的arduino直接发布到网络服务器(点击链接获取示例)

POST /insertData.php - 在insertData.php中使用$_POST["tempCaptured"]获取临时值并将其插入db。

关于使用ArduinoEthernetClient http://interactive-matter.eu/how-to/arduino-http-client-library/

的好文章

答案 1 :(得分:1)

编写一个代码(ping.php),以固定的时间间隔对此网址进行ping操作。

现在,设置cronjob,以固定的时间间隔运行此代码。

您的cron可以是0 */2 * * * PATH_TO_{ping.php} // will run every 2 hours

你的ping.php文件将连接到实时订阅源,获取数据并将结果存储到数据库。

答案 2 :(得分:0)

您可以使用JavaScript自动刷新页面

<script type="text/javascript">
    function timedRefresh(timeoutPeriod) {
        setTimeout("location.reload(true);", timeoutPeriod);
}
</script>

更好的解决方案是ajax并将后台的日期定期发送到数据库。

另一种方法是使用PHP-CLI script并使用cron jobs安排它自动从传感器获取值。

答案 3 :(得分:0)

如果我理解了这个问题。您只需每隔5秒更换一次网页即可刷新页面吗? 没有得到数据?

我会设置一个ajax连接,让php运行在一种无限循环中。将新数据回显给您的javascript以更新图表。 PHP循环必须进行超时检查才能最终关闭脚本。

答案 4 :(得分:0)

在这种情况下,最好的解决方案是使用Arduino将请求发布到PHP脚本,该脚本完成了它的操作并将检索到的值添加到数据库中。我刚刚运行它的方式(为简单起见)是使用EthernetClient从Arduino获取GET请求。

代码:

char server[] = "www.example.com";

if(client.connect(server, 80)){
  client.println("GET /test.php?input_val=99 HTTP/1.0");
  client.println("HOST: www.example.com");
}

但是,由于我已经建立了我的网站围绕数据发布到独立服务器/ IP *的事实,我选择使用cron来安排任务。在这种情况下,我想每5到10秒更新一次我的数据库。但是,我正在捎带别人的服务器,所以我联系了服务器所有者并要求他们每分钟设置一个调用“/mysubdir/cron_update.php”的cron作业(最快的cron可以调用)。从那里我做了一些'ScriptCeption'并在PHP脚本中,在完成脚本之前每隔10秒完成一次我的调用。

感谢所有帮助我的人,我在这里发布这个作为完整的答案和解释,因为从技术上讲,每个人都是正确的。