Cosi' e' nata SismoYUN
Come visto nel precedente post e' piuttosto lento scambiare i dati dalla parte Arduino (quella deputata alla acquisizione del dato) a quella di presentazione del dato di Linux; per questo motivo ho cercato un escamotage ovvero di salvare i dati sulla scheda SD dallo sketch di Arduino per poi recuperarli in PHP
I dati per motivi di spazio sono salvati sulla scheda SD
--------------------------------------------------------------
#include <FileIO.h>
void setup() {
Bridge.begin();
Serial.begin(9600);
FileSystem.begin();
}
void loop() {
char buf[50];
File dataFile = FileSystem.open("/mnt/sda1/datalog.txt",FILE_APPEND);
unsigned long tempo = millis();
sprintf(buf,"%lu",tempo);
dataFile.print(tempo);
dataFile.print(",");
dataFile.print(analogRead(A3));
dataFile.print(",");
dataFile.print(analogRead(A4));
dataFile.print(",");
dataFile.println(analogRead(A5));
delay(2);
}
--------------------------------------------------------------
La velocita' di scrittura sulla SD e' diciamo pessima. Ogni ciclo di scrittura impiega 150 ms (6.6Hz) :<<
ma dato e' poco piu' di un test facciamo finta che vada bene
Lo script in PHP recupera le ultime 100 linee del file di datalog.txt e crea un csv
--------------------------------------------------------------
<?php
function tailShell($filepath, $lines = 1) {
ob_start();
passthru('tail -' . $lines . ' ' . escapeshellarg($filepath));
return trim(ob_get_clean());
}
header('Content-Type: text/csv; charset=utf-8');
$output = fopen('php://output','w');
$dati = tailShell("/mnt/sda1/datalog.txt",100);
$dati2 = str_replace(" ","\r\n",$dati);
fputs($output,$dati2);
?>
--------------------------------------------------------------
--------------------------------------------------------------
<html>
<META HTTP-EQUIV="refresh" CONTENT="900">
<head>
<script type="text/javascript"
src="dygraph-combined.js"></script>
</head>
<body>
<div id="graphdiv2"
style="width:1000px; height:700px;"></div>
<br>
<script type="text/javascript">
g2 = new Dygraph(
document.getElementById("graphdiv2"),
"dati.php",
{title: 'SismoYUN'} // options
);
var update = function(){
g2.updateOptions({'file': 'dati.php'});
};
window.setInterval(update,1000);
</script>
</body>
</html>
--------------------------------------------------------------
Considerando che tutto gira su una schedina che sta nel palmo di una manno (connessione Wifi e wired incluse) con un server web completo e che fa acquisizione realtime non e' proprio male
Nessun commento:
Posta un commento