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:
GPGGA
(GPS Fix Data) - posizione dal GPSGPGSV
(GPS Satellites in View) - satelliti americani GPS visti dalla schedaGLGSV
(GLONASS Satellites in View) - satelliti russi GLONASS visti dalla schedaGPGSA
(GPS Satellites Active) - satelliti americani GPS attivamente usati dalla scheda per determinare la posizioneGNGSA
(GNSS Satellites Active) - tutti i satelliti di tutti i sistemi attivamente usati dalla scheda per determinare la posizioneQZGSA
(QZSS Satellites Active) - satelliti giapponesi QZSS attivamente usati dalla scheda per determinare la posizioneGPRMC
(Recommended Minium Navigation Information) - velocità, altitudine, rilevamento, latitudine, longitudine.