Jacopo's Lair


Introduzione

La Huawei ME906s (datasheet) è una scheda M.2 WWAN, compatibile con 4G LTE, 3G HSDPA/HSUPA/HSPA/UMTS e 2G EDGE/GPRS. Permette, oltre alla connessione ad Internet, anche l'invio di SMS. Tra le funzioni presenti sulla scheda c'è anche un ricevitore GPS/GLONASS, che risulta molto comodo: possiamo ad esempio usarlo per OpenCPN, oppure per dare la posizione precisa a WXtoIMG, etc. Tuttavia, di default questa funzionalità non è attiva. Per fortuna, su Linux, è molto facile porvi rimedio.

Primi passi

A causa di un bug in usb_modeswitch, talvolta può succedere che la scheda rimanga in uno stato catatonico in cui non può svolgere nessuna funzione. Per risolvere, apriamo una shell root con sudo -s e diamo questi comandi:

echo 0 > /sys/bus/usb/devices/1-3/bConfigurationValue
echo 3 > /sys/bus/usb/devices/1-3/bConfigurationValue

Questo resetterà la scheda prima in modalità 0, poi 3.

Abilitiamo il GPS

Il GPS si abilita con un comando AT inviato alla porta seriale CDC della scheda, di solito /dev/ttyUSB0 ma potrebbe variare se avete, ad esempio, un Arduino collegato al PC.

Il comando è AT^WPDGP.

Si può inviare sia scrivendolo tramite utility come minicom o screen, ma il modo più veloce è creare uno script.

#!/bin/bash
echo AT^WPDGP > /dev/ttyUSB0

Si potranno anche inserire le due righe precedentemente viste nel caso in cui siano necessarie, e naturalmente si può creare un lanciatore che esegua lo script con un semplice click dal menù del proprio desktop environment.

Verifichiamo il funzionamento del GPS

Come tutti i GPS anche quello della ME906s emette i suoi dati in formato a standard NMEA, sulla stessa porta seriale utilizzata precedentemente per inviare i comandi.

Si può verificare il suo funzionamento facendo cat /dev/ttyUSB0, si dovrebbe vedere un messaggio simile:

$GPGGA,092313.00,4300.000000,N,00612.000000,E,1,16,0.4,1.2,M,48.9,M,,*66
$GPGSV,3,1,10,27,72,332,44,16,60,195,37,10,58,125,39,23,49,070,31*79
$GPGSV,3,2,10,08,33,301,35,26,33,177,38,18,19,058,35,21,19,251,23*7D
$GPGSV,3,3,10,07,09,309,27,15,06,044,27*7E
$GLGSV,2,1,07,77,41,297,23,76,40,227,37,87,32,284,40,71,29,115,43*64
$GLGSV,2,2,07,85,23,064,38,78,04,341,32,75,02,186,18*5D
$GPGSA,A,3,07,08,10,15,16,18,21,23,26,27,,,1.7,0.8,1.4*3E
$GNGSA,A,3,07,08,10,15,16,18,21,23,26,27,,,1.7,0.8,1.4*20
$GNGSA,A,3,71,76,77,78,85,87,,,,,,,1.7,0.8,1.4*2D
$QZGSA,A,3,,,,,,,,,,,,,1.7,0.8,1.4*25
$GPRMC,092313.00,A,4300.000000,N,00612.000000,E,000.1,,180722,,,A*70

Per una spiegazione tecnica si veda in basso a questa pagina.

Utilizzo del GPS con gpsd

Installazione e configurazione di gpsd

gpsd è un demone particolarmente potente che permette di sfruttare rapidamente il GPS su varie applicazioni. Su Debian e derivate può essere installato con sudo apt install gpsd

Per essere utilizzato bisogna fare una piccola modifica nel suo file di configurazione, situato in /etc/default/gpsd.

La riga DEVICES="" deve essere modificata in DEVICES="/dev/ttyUSB0".

Successivamente, riavviare con sudo systemctl restart gpsd.socket.

Visualizzare i dati con xgps

Installando su Debian e derivate il pacchetto gpsd-clients si avranno accesso a vari programmi grafici che permetteranno di consultare tutti i dati forniti dal GPS.

Ad esempio, xgps permette di vedere la costellazione GPS ed i dati di base, xgpsspeed permette di visualizzare un pratico tachimetro, cgps è la stessa cosa di xgps ma da riga di comando.

Interfacciare il GPS con OpenCPN

OpenCPN è un pratico programma che permette la lettura di carte nautiche. IL GPS può essere interfacciato sia via porta seriale che via gpsd, la seconda è naturalmente più pratica.

Per fare ciò, basta recarsi nel menù Impostazioni di OpenCPN, fare clic su Connessioni, Aggiungi Connessione, selezionare il tipo Network, protocollo gpsd e inserire come indirizzo 127.0.0.1.

Per la connessione seriale invece basterà selezionare il tipo Seriale, selezionare /dev/ttyUSB0 e impostare il baudrate a 9600.

Interfacciare il GPS con WXtoIMG

WXtoIMG è un programma che permette di decodificare le immagini APT trasmesse dai satelliti meteo polari NOAA 15, 18 e 19. Per interfacciarlo con il GPS e quindi fornire risultati più precisi oltre a determinare automaticamente la posizione, basta andare in Options e poi in Ground Station Location, attivare la spunta su Use GPS, impostare la porta a /dev/ttyUSB0 ed il baud rate a 9600.

Se dovesse dare un avviso di porta occupata, bisogna fermare gpsd con sudo systemctl stop gpsd.socket.

Interfacciare il GPS con Google Earth

Basta andare in Strumenti -> GPS e fare clic su Avvia GPS.

Interfacciare il GPS con programmi Wine (Windows)

Sarà sufficiente selezionare la porta seriale COM virtuale creata da Wine in modo che combaci con quella reale /dev/ttyUSB0.

Si può verificare l'associazione utilizzando il comando ls .wine/dosdevices | grep com.

Nel mio caso questo è quello che viene restituito: lrwxrwxrwx 1 jacopo jacopo 12 lug 15 20:07 com33 -> /dev/ttyUSB0

In questo caso la porta seriale da selezionare sul programma Windows sarà, naturalmente, la COM33.

Approfondimento tecnico su NMEA

Il protocollo NMEA si basa su una serie di stringhe di testo chiamate sentences. Ogni sentence ha un prefisso formato da un dollaro $ e due caratteri, ad esempio GP per GPS, GL per GLONASS, QZ per QZSS, GN per GNSS (più costellazioni di satelliti insieme).

Ecco tutte le sentence emesse dal ME906s: