martedì 10 maggio 2016

NTP Server con GPS Seriale e Arduino YUN

Nel precedente post avevo utilizzato i dati derivati da un modulo GPS collegato via USB ad una Arduino YUN come fonte dati per un server NTP


Questa configurazione e' un po' costosa ed occupa la porta USB della YUN. Usando un modulo GPS con una seriale TTL con una connessiona a soli tre fili (VCC, GND e GPS-Tx collegato ad Arduino, il cavo GPS-Rx non e' necessaria perche' la comunicazione e' a senso unico) si puo' ottenere lo stesso risultato risparmiando un po'

Per prima cosa si deve configuare la YUN modificando il file /etc/inittab e commentando la terza riga (quella che inizia con ttyATH0...) e si riavvia il dispositivo

si collega poi il pin TX del GPS al pin D8 dell'Arduino e si carica lo sketch che semplicemente prende i dati dalla SoftSeriale e li spedisce sulla Serial1 (che e' quella di collegamento tra Linino ed Arduino)

-------------------------------------------------------
#include <SoftwareSerial.h>

SoftwareSerial mySerial(8, 3); // RX, TX

void setup() {
  delay(150000); //questo serve a non inviare dati sulla seriale in fase di boot altrimenti si blocca tutto
  Serial1.begin(115200);
  Serial.begin(115200);
  mySerial.begin(9600);
}

void loop() { 
  if (mySerial.available()) {
    char c = mySerial.read();
    Serial1.write(c);
    Serial.write(c);    
  }
}
---------------------------------------------------
A questo punto doveva essere tutto facile e si dovevano solo replicare i passi del precedente post...in realta', nonostante fosse possibile visualizzare il flusso seriale mediante minicom, il demone di gpsd non riusciva ad agganciarlo. Dopo varie prove ho messo il Serial1 a 115200 e installato stty con il comando

opkg update 
opkg install coreutils-stty
a questo punto ho forzato il riconoscimento della velocita' della seriale con stty
stty -F /dev/ttyATH0 ispeed 115200 && cat </dev/ttyXXX

e lanciato demonizzato gpsd

gpsd -D 5 -N -n /dev/ttyATH0 -F /var/run/gpsd.sock
a questo punto ha iniziato a funzionare cpgs