2017年6月13日 星期二

GPS以uart與樹莓派Raspberry Pi 3連接使用紀錄

使用材料:
  1. 樹莓派Raspberry Pi 3 (以下簡稱為RasPi3)
  2. GPS Receiver - LS20031 5Hz (66 Channel),
    https://www.sparkfun.com/products/8975 
    1. 預先焊接針腳, 使用4條雙母杜邦線與樹莓派連接
      可參閱SparkFun網頁上的Connection Tutorial
    2. 留意GPS模組使用電壓3.3V
    3. GPS模組的TX連接到RasPi3的GPIO Pin10(RXD)、
      RX連接到RasPi3的GPIO Pin8(TXD)。
      詳細的RasPi3 GPIO針腳定義請參閱: https://pinout.xyz/#

樹莓派的作業系統, 我是以AiGO 2017 v1為架構, 再新增軟體套件
$ sudo apt-get update && sudo apt-get upgrade -y
$ sudo apt-get install build-essential gpsd gpsd-clients python-gps joe
$ sudo reboot



其中joe是我個人在linux系統下慣用的文字編輯器, 作業系統內建有nano 或 vi可以使用。

針對GPS使用RasPi3的UART連線, 作業系統要新增設定/boot/config.txt,
$ sudo joe /boot/config.txt
在文件的最後一行加入
enable_uart=1
存檔後, 重新開機
$ sudo reboot 

在RaspPi3的系統中, 是以/dev/ttyAMA0與 UART0連線的, 所以啟動gpsd時, 要指向這個裝置

$ sudo gpsd /dev/ttyAMA0 -n -F /var/run/gpsd.sock
$ cgps  -s


參考網頁都是像上面寫的指令一樣, 但是我一直無法在cgps中看到gps傳資料進來, 因此我執行cgps時, 不加-s參數, 可以監視GPS模組的訊息是否傳入。
後來發來gpsd有一支程式gpscat, 也可以直接讀取gps模組傳入的訊息, 使用方式如下:
$ gpscat -s 57600 /dev/ttyAMA0
其中 -s 57600是傳輸速率(baud rate), 我試過57600 bps是這款gps模組的上限。

令我疑惑的是, 若我沒有執行 "gpscat -s 57600 /dev/ttyAMA0" 則 cgps 無法正常讀取GPS模組的訊息, 因此我推論是沒有設定 /dev/ttyAMA0 的傳輸速率所致。
最後在gpsd的faq網頁中, 查到可以使用 "stty speed 57600 < /dev/ttyAMA0" 來設定傳輸速率。其餘的執行程序如下:
sudo systemctl stop gpsd.socket
sudo systemctl disable gpsd.socket
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
sudo killall gpsd
stty speed 57600 < /dev/ttyAMA0

sudo gpsd -n /dev/ttyAMA0 -F /var/run/gpsd.sock
cgps

終於可以從 cgps 讀到GPS模組的定位資訊。
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqklqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x    Time:       2017-06-12T15:52:14.000Z   xxPRN:   Elev:  Azim:  SNR:  Used: x
x    Latitude:    24.XXXXXX N               xx 193    66    048    26      Y   x
x    Longitude:  120.XXXXXX E               xx  15    63    277    00      N   x
x    Altitude:   167.7 ft                   xx  13    62    019    33      Y   x
x    Speed:      0.5 mph                    xx 129    54    138    26      N   x
x    Heading:    192.6 deg (true)           xx  20    50    343    23      N   x
x    Climb:      0.0 ft/min                 xx   5    40    056    39      Y   x
x    Status:     3D FIX (266 secs)          xx   2    39    141    24      Y   x
x    Longitude Err:   +/- 46 ft             xx  29    36    254    19      Y   x
x    Latitude Err:    +/- 67 ft             xx  24    27    182    00      N   x
x    Altitude Err:    +/- 73 ft             xx  21    17    320    15      N   x
x    Course Err:      n/a                   xx  30    10    044    00      N   x
x    Speed Err:       +/- 92 mph            xx  18    03    290    00      N   x
x    Time offset:     -872.718              xx                                 x
x    Grid Square:     PL04gc                xx                                 x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj



參考資料
  1. https://medium.com/@phutidus/%E7%94%A8-raspberry-pi-gps-%E6%A8%A1%E7%B5%84%E5%BB%BA%E7%AB%8B-stratum-1-%E7%9A%84-ntp-server-cb1b501a5f91 
  2. http://www.catb.org/gpsd/faq.html
  3. http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3
  4. https://learn.adafruit.com/adafruit-ultimate-gps-on-the-raspberry-pi/using-uart-instead-of-usb