我在树莓派上写了一个程序来读取GPIO输入,并将它们写入。csv文件,然后由Javascript脚本读取并显示在树莓派上的网页上。
Pi每0.1秒轮询pin并写入文件,脚本每0.2秒读取该文件并更新网页。
我遇到的问题是,有时脚本将读取值为全零,而不是保存在文件中的实际数字,而不会抛出任何错误。这是随机发生的,有时脚本确实正确读取文件。刷新页面,重新启动apache和重启Pi似乎没有效果。
脚本没有返回错误的事实使我相信问题发生在脚本获取文件之前,但在cat
中查看文件显示正确的值。
有人有什么想法吗?
相关Javascript代码:var csv_path = "/data/loads.csv";
function update_vars() {
//get latest data
var response = $.get(csv_path, function(data) {
var csv_string = data;
var res = csv_string.split("n")[1].split(",");
//parse values into variables
...
});
示例文件内容:
TV,AC,Oven,Light,Solar,inverter,inverter(controlled)
1,3,2,6,0,0,0
Javascript日志输出示例:
TV,AC,Oven,Light,Solar,inverter,inverter(controlled)
0,0,0,0,0,0,0
我最终解决了这个问题,用MySQL数据库和php代替了csv文件和javascript。
现在,我的python使用php脚本向数据库添加一个条目,选择正确的值并显示它们。这样做的好处是不需要在客户端处理任何东西。
对于我的应用程序来说,这感觉有点过分,但它似乎工作得更好,更不用说现在理解LAMP堆栈是什么了。