php - 接收串口数据 : real-time web display + logging (with downsampling)

标签 php python mysql logging serial-port

我正在从事一个小项目,该项目涉及显示和记录(用于以后处理)通过串行端口连接从某种测量设备接收的数据。我正在使用 Raspberry Pi 读取和存储接收到的信息:这是通过一个用 Python 编写的小程序完成的,该程序打开串行设备,读取帧并将数据存储在 MySQL 数据库中(无需轮询或交互)使用设备,数据会自动发送)。

串行数据被格式化为大约 2.5kbits 长的帧,以 1200baud 重复发送,这意味着大约每 2 秒接收一个新帧。

现在,即使有用的数据只是帧的一部分,但存储的信息太多,无法满足我的需要,所以我目前正在做的是通过仅读取一次帧来“下采样”数据每分钟。目前,这是通过每分钟调用我的日志脚本的 cron 任务完成的。

我的设置的问题是用于显示(和处理)接收到的数据(从 MySQL 数据库中提取)的 PHP 网页每分钟不能显示超过一次新数据。

所以我的问题来了:

How would you do to make the webpage show the live data (which doesn't need to be saved), while keeping the logging to the MySQL database @ once per minute?

我想解决方案会涉及某种守护进程,它以指定的频率(每分钟一次)存储数据,同时保持最新接收到的数据可用于 php 网页(如何?)。你怎么认为?您是否有任何类似代码/应用程序的示例可供我用作起点?

谢谢!

最佳答案

我不知道我是否正确理解了您的问题,但您似乎想用 PHP 脚本显示不间断的数据“流”。那样的话,恐怕就没那么容易了。

HTTP 协议(protocol)的基本思想是基于请求/响应的。您的浏览器发送请求并接收(静态)响应。

您可以构建某种“流媒体”服务器,但流媒体(例如 youtube.com 所做的)也只不过是定期发送视频文件的静态 block ,然后播放器将它们重新组合成视频或音频“流”。

但是,您可以研究“网络套接字”和“长轮询”等概念。例如,您可以创建一个长时间运行的 PHP 脚本,它每两秒读取一次特定文件并输出值。 (记得使用 flush() ,否则输出将被缓冲。)

一个聪明的解决方案甚至可以每两秒输出一个 JavaScript 片段,这将再次更新某种 <div>显示图表和其他内容的容器。

例如,有使用这种方法实现的进度表的实现。

关于php - 接收串口数据 : real-time web display + logging (with downsampling),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23312182/

相关文章:

c++ - 将指针从 C++ 传递到 Python/w boost python?

php - 如何一劳永逸地设置laravel文件权限

javascript - 如果元素 id 被定义为 php 函数,如何编写 jquery append $ ("#id").append() 语句?

php - 需要有关 Twitter 的 CSS 和 JQuery 的帮助,例如下拉登录框

python - 如何获得模块中类的定义?

javascript - 如何从未加载的 wordpress 帖子中检索 img src 值?

javascript php AJAX 刷新 DIV 的一部分

python - 设置类组成对象的属性的功能

mysql - 获取 MySQL 中具有特定值的列的计数

mysql - 端口重定向