接收串口数据:实时网页显示 + 记录(带降采样)

2 投票
1 回答
1191 浏览
提问于 2025-04-18 04:22

我正在做一个小项目,主要是通过串口连接从某种测量设备获取数据,并将这些数据展示出来和记录下来,以便后续处理。我使用树莓派来读取和存储接收到的信息:这通过一个用Python写的小程序实现,它打开串口设备,读取数据帧,并将数据存储到MySQL数据库中(不需要主动去询问或与设备互动,数据是自动发送的)。

这些串口数据被格式化成大约2.5千比特长的帧,以1200波特率重复发送,这意味着大约每2秒就会接收到一个新的数据帧。

不过,虽然有用的数据只是帧的一部分,但存储这些信息对我来说太多了,所以我现在的做法是“降采样”,也就是每分钟只读取一次数据帧。目前这是通过一个定时任务实现的,每分钟调用一次我的记录脚本。

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

所以我想问的是:

你会怎么做才能让网页显示实时数据(这些数据不需要保存),同时保持每分钟记录一次到MySQL数据库?

我猜解决方案可能涉及某种守护进程,它以指定的频率(每分钟一次)存储数据,同时保持最新接收到的数据可供PHP网页使用(怎么做呢?)。你觉得怎么样?有没有类似的代码或应用示例可以作为起点?

谢谢!

1 个回答

0

我不太确定我是否理解你的问题,但看起来你想用PHP脚本显示一个不停的“数据流”。如果是这样的话,这可不太简单。

HTTP协议的基本概念是请求/响应模式。你的浏览器发送一个请求,然后收到一个(静态的)响应。

你可以建立某种“流媒体”服务器,但流媒体(比如youtube.com做的)其实也就是定期发送视频文件的静态片段,然后播放器把这些片段重新组合成视频或音频“流”。

不过,你可以了解一些概念,比如“网页套接字”和“长轮询”。例如,你可以创建一个长时间运行的PHP脚本,每两秒读取一次某个文件并输出其值。(记得使用flush(),否则输出会被缓存。)

一个聪明的解决方案甚至可以每两秒输出一段JavaScript代码,这样就可以更新某种<div>容器,显示图表等等。

比如,有些进度条就是用这种方法实现的。

撰写回答