BN-357 も Raspberry Pi に接続


# BN-357 も USB シリアル経由で繋いでみた
[GG-1802](/jp_yen/items/738843ae538db1ec228a) に続いて BN-357 も接続。
gpsd の設定。DEVICES に USB ポートを追加。

# PPS を入力するには
GPS レシーバーは PPS 出力があるのに、渡せないのはなぁ。シリアルポートだと DCD から渡すみたいだけど、[USB シリアルインターフェイス](https://www.banggood.com/5PCS-USB-To-TTL-Debug-Serial-Port-Cable-For-Raspberry-Pi-3B-2B-COM-Port-p-1213690.html) に DCD 端子は出てない。ということでちょっと開けてみた。 (下に通ってるのは 0.6mm の糸ハンダ)
![PSX_20190519_071251.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/afc272d2-9cb5-fdac-0228-4515b5804c6a.jpeg)
CH340G とやらが入っているらしい。データシートを探してみるとこんなのが。
![PSX_20190519_073111.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/4066ca4d-9a46-a971-862d-96476d5dbd1f.jpeg)
14番ピンが DCD の反転入力っぽいなぁということで引っ張り出す。
![PSX_20190519_071541.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/446b5b1e-eec2-c8a9-611b-511b93488c99.jpeg)
![PSX_20190519_071812.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/b808343b-960a-cd04-b440-c6b0e101b69b.jpeg)
なんかフラックスが出てきてるみたいですが、これで Raspberry Pi に接続。

# gpsd の設定
/dev/ttyUSB0 を追加する

```tcsh:
> cat /etc/default/gpsd
# Default settings for the gpsd init script and the hotplug wrapper.

# Start the gpsd daemon automatically at boot time
START_DAEMON="true"

# Use USB hotplugging to add new USB devices automatically to the daemon
# USBAUTO="true"

# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyS0 /dev/pps0 /dev/ttyUSB0"

# Other options you want to pass to gpsd
GPSD_OPTIONS="-n"
```
起動スクリプトにシリアルポートの速度を指定 (これをすると gpsd を起動してからの認識が早くなる → 手動で通信速度を変えると認識が早くなりますが、スクリプトでやってもダメでした。sleep とかかまさないと駄目？)

```
> cat /etc/init.d/gpsd
...snip
        # serial speed
        sudo stty -F /dev/ttyS0   115200
        sudo stty -F /dev/ttyUSB0 115200
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
...snip

> /etc/init.d/gpsd restart
Restarting gpsd (via systemctl): gpsd.service.
```
gpsd に認識されているか、ntpd にどうやって書けばいいか確認。

```tcsh:
> sudo ntpshmmon
ntpshmmon version 1
#      Name   Seen@                Clock                Real               L Prec
sample NTP2 1556629906.000278455 1556629905.999802467 1556629906.000000000 0 -20
sample NTP4 1556629906.000450069 1556629906.000008248 1556629906.000000000 0 -10
sample NTP0 1556629906.058861268 1556629906.057788408 1556629906.000000000 0  -1
sample NTP3 1556629906.144365784 1556629906.144251045 1556629906.000000000 0  -1
sample NTP2 1556629907.000305096 1556629906.999805671 1556629907.000000000 0 -20
sample NTP4 1556629907.000418272 1556629907.000000930 1556629907.000000000 0 -10
sample NTP0 1556629907.055453428 1556629907.055175825 1556629907.000000000 0  -1
sample NTP3 1556629907.144505960 1556629907.144409502 1556629907.000000000 0  -1
sample NTP2 1556629907.999996830 1556629907.999809956 1556629908.000000000 0 -20
sample NTP4 1556629908.000062559 1556629907.999999122 1556629908.000000000 0 -10
sample NTP0 1556629908.062150403 1556629908.061069053 1556629908.000000000 0  -1
sample NTP3 1556629908.145007026 1556629908.144642653 1556629908.000000000 0  -1
^C
```
NTP3, NTP4 と認識された模様。2つ増えたから、『NEMA』と『DCD に繋いだ pps』で認識されたみたい。ntp.conf に 127.127.28.3 と 127.127.28.4 を追加。

```tcsh
> cat /etc/ntp.conf
...snip...
server ntp-a3.nict.go.jp minpool 8 maxpool 12 iburst
server ntp-b2.nict.go.jp minpool 8 maxpool 12 iburst
server ntp-b3.nict.go.jp minpool 8 maxpool 12 iburst
server ntp-a2.nict.go.jp minpool 8 maxpool 12 iburst

server ats1.e-timing.ne.jp minpool 8 maxpool 12 iburst
server cwa225.bai.ne.jp minpool 8 maxpool 12 iburst
server cwa201.bai.ne.jp minpool 8 maxpool 12 iburst

# GG-1802
server 127.127.28.0 minpoll 0 maxpoll 0 burst noselect
fudge 127.127.28.0 time1 0.0502 refid NEMA
server 127.127.28.2 minpoll 0 maxpoll 0 burst
fudge 127.127.28.2 refid PPS

# BN-357
server 127.127.28.3 minpoll 0 maxpoll 0 burst noselect
fudge 127.127.28.3 time1 0.1455 refid NEMA
server 127.127.28.4 minpoll 0 maxpoll 0 burst
fudge 127.127.28.4 refid PPS
...snip...
```
しばらく待ってみた。さて、どうなったかな？

```tcsh:
> ntp -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 SHM(0)          .NEMA.           0 l    1    8  377    0.000  -34.122   9.202
*SHM(2)          .PPS.            0 l    -    8  377    0.000    0.222   0.017
 SHM(3)          .NEMA.           0 l    -    8  377    0.000    0.206   0.877
+SHM(4)          .PPS.            0 l    -    8  377    0.000   -0.030   0.027
-ntp-a3.nict.go. .NICT.           1 u   11   64  377    8.983    0.561   1.721
+ntp-b2.nict.go. .NICT.           1 u    1   64  377    8.701    0.475   1.645
-ntp-b3.nict.go. .NICT.           1 u   37   64  377    9.466    0.883   1.260
-ntp-a2.nict.go. .NICT.           1 u   26   64  377    8.856    0.495   1.184
-61.114.187.55 ( .PPS.            1 u   11   64  277   11.204    1.294   1.490
-cwa225.bai.ne.j 210.171.0.34     4 u   34   64  377    3.481    0.625   0.689
-cwa201.bai.ne.j 210.171.0.34     4 u   33   64  377    3.235   -5.534   1.013
```
offset が 1ms を切り、jitter は 0.03ms 程度(@_@)
そして他の ntp サーバー minpoll 8 なのに、なんで poll が 64 なの？？？

#やっぱり BN-357 を設定する
やはりどの衛星を見るかとか、通信速度とか設定はしたほうが良いかなと。

通信速度は115200ボー
![port.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/4b15f329-f4a1-ac94-6a64-f86779c37369.png)

GPS + Galileo + 北斗にしてみました。
![GNSS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/37185da9-a5ba-1cdf-10a4-edb72e10f857.png)
→ 座標が安定しないので、その後北斗から GLONASS に変更。

USB の DCD が反転入力のため、PPS を立ち下がりに設定。(これで合ってるよねぇ？)
![TP_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/0d6fedfd-d5cd-9336-2611-53f9c055b545.png)

PPS が同期していないときはデューイ比 50% (同期するまでなにも点かないと電源が入っているか不安になるので)、同期してからは 10% で出力 (LED が点滅)
![TP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/e16505e4-9279-8b14-db18-cdd7988350de.png)

ナビゲーションモードは Stationary (固定局) にしておく。
![NAV5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/8442c6cd-954b-f6ad-87bf-406b4c298aef.png)



# Raspberry Pi に戻って gpsmon で見てみる
$HOME/opt の下で gpsd 3.18.1 をコンパイルして実行。42個も見えてる(@_@) そして 22個も使ってる(@_@)

```tcsh:~/opt/gpsd-3.18.1/cgps&nbsp;localhost&#x3a;2947&#x3a;/dev/ttyUSB0
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqklqqqqqqqqqqqqqqqqqqSeen 42/Used 22k
x Time:          2019-05-02T00:19:23.000Z   xx    PRN  Elev   Azim   SNR  Use  x
x Latitude:         34.xxxxxxxx N           xxGP   14    82    234    21    Y  x
x Longitude:       135.xxxxxxxx E           xxGP   22    15    286    21    Y  x
x Altitude:         46.631 ft               xxGP   25    35     44    24    Y  x
x Speed:             0.12 mph               xxGP   26    43    248    22    Y  x
x Heading:           6.6 deg (true)         xxGP   29    46     85    24    Y  x
x Climb:            29.53 ft/min            xxGP   31    59    335    25    Y  x
x Status:         3D FIX (643 secs)         xxGP   32    66    174    16    Y  x
x Long Err  (XDOP, EPX):  0.44, +/- 23.3 ft xxBD   33    72    205    21    Y  x
x Lat Err   (YDOP, EPY):  0.62, +/- 25.1 ft xxBD   34    61    267    30    Y  x
x Alt Err   (VDOP, EPV):  1.15, +/- 87.0 ft xxBD   36    64    294    31    Y  x
x 2D Err    (HDOP, CEP):  0.83, +/- 34.2 ft xxBD   37    36    253    18    Y  x
x 3D Err    (PDOP, SEP):  1.42, +/- 93.5 ft xxBD   39    31     74    16    Y  x
x Time Err  (TDOP):       0.90              xxBD   43    74    233    21    Y  x
x Geo Err   (GDOP):       1.68              xxBD   51    46     56    21    Y  x
x ECEF X, VX:   -3744226.050 m   -0.070 m/s xxBD   52    56    316    29    Y  x
x ECEF Y, VY:    3683707.980 m    0.060 m/s xxSB  122    49    166     0    Y  x
x ECEF Z, VZ:    3606198.470 m    0.130 m/s xxQZ  194    80      0    27    Y  x
x Speed Err (EPS):              +/-  1.6 mphxxGA  211    34     50    17    Y  x
x Head Err  (EPD):        n/a               xxGA  214    41    183    11    Y  x
x Time offset:            0.069 sec         xxGA  219    57    270    26    Y  x
x Grid Square:            PM74rp            xxGA  234    29    264    13    Y  x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmMore...qqqqqqqqqqqqqqqqqqqqqqqqqqj
```

# 数時間経つと時刻合わせできなくなった
しかし、暫くすると ntpd から見えなくなる。gpsmon とかでは見えるのに、ntpshmmon では見えなくなってしまい ntpd で時刻合わせできなくなってしまう。うーん。
gpspipe すると \$GPZDA,\$GPGGA,\$GPRMC,\$GPGSA は出力されてるけど \$GPGSV は出力されず gpsmon で pps も見えなくなってる。
\$GPGSV は待ってるとそのうち (30分とか経つと) 表示されるようになるんだけど、pps は復活せずセマフォも見えないまま。
gpsd を再起動したら復活する。うーん。なんだかなぁ。 USB シリアルがダメなのかなぁ。
ログを見てみると 11:44 に勝手に removed になってる。
pps は見えなくなってるけど gpsmon とか gpspipe では NEMA の情報は見える。ntpshmmon では見えなくなってる。gpsd 3.18.1 が何か悪さをしてる？

```tcsh:/var/log/syslog
> grep -e pps -e gpsd /var/log/syslog
May  2 09:43:20 Ras1 gpsd[10246]: gpsd:ERROR: shmget(0x47505344, 14024, 0666) for SHM export failed: Invalid argument
May  2 09:43:23 Ras1 kernel: [19228.548923] pps pps1: new PPS source serial0
May  2 09:43:23 Ras1 kernel: [19228.548961] pps pps1: source "/dev/ttyS0" added
May  2 09:43:25 Ras1 kernel: [19230.925644] pps pps2: new PPS source usbserial0
May  2 09:43:25 Ras1 kernel: [19230.925684] pps pps2: source "/dev/ttyUSB0" added
May  2 11:44:52 Ras1 kernel: [26517.369311] pps pps2: removed
```

syslog を tail -f しながら再起動。再起動後には ntpd で pps も NEMA も拾えてる。ntpshmmon も勿論OK

```tcsh:
Ras1:~> tail -f /var/log/syslog | grep -e pps -e gpsd &
[1] 11048 11049
Ras1:~> 
Ras1:~> sudo systemctl stop gpsd
May  2 11:55:21 Ras1 kernel: [27146.303092] pps pps1: removed
Warning: Stopping gpsd.service, but it can still be activated by:
  gpsd.socket
Ras1:~>
Ras1:~>
Ras1:~> sudo systemctl start gpsd
May  2 11:55:29 Ras1 gpsd[11086]: gpsd:ERROR: shmget(0x47505344, 14024, 0666) for SHM export failed: Invalid argument
Ras1:~> May  2 11:55:32 Ras1 kernel: [27157.625405] pps pps1: new PPS source serial0
May  2 11:55:32 Ras1 kernel: [27157.625468] pps pps1: source "/dev/ttyS0" added
May  2 11:55:34 Ras1 kernel: [27159.983266] pps pps2: new PPS source usbserial0
May  2 11:55:34 Ras1 kernel: [27159.983310] pps pps2: source "/dev/ttyUSB0" added
```
再度発生。まだ removed は出ていませんが ntpd が時刻合わせできなくなり ntpshmmon でも NTP3,4 を見失う。
そこで gpspipe -r してみると..."bps":57600 ...あー、勝手に速度が変わってしまって読めなくなってしまったのですかorz。 gpsd の速度を固定する方法って無いんですかねぇ？

```tcsh:
> gpspipe -r localhost:2947:/dev/ttyUSB0
{"class":"VERSION","release":"3.18.1","rev":"3.18.1","proto_major":3,"proto_minor":13}
{"class":"DEVICES","devices":[{"class":"DEVICE","path":"/dev/ttyS0","driver":"u-blox","subtype":"SW ROM CORE 3.01 (107888),HW 00080000,FWVER=SPG 3.0
1,PROTVER=18.00,GPS;GLO;GAL;BDS,SBAS;IMES;QZ","activated":"2019-05-02T04:18:19.074Z","flags":1,"native":1,"bps":115200,"parity":"N","stopbits":1,"cy
cle":1.00,"mincycle":0.25},{"class":"DEVICE","path":"/dev/pps0","driver":"PPS","activated":"2019-05-02T04:18:20.000Z"},{"class":"DEVICE","path":"/de
v/ttyUSB0","driver":"Trimble TSIP","subtype":"Unknown","activated":"2019-05-02T04:18:15.104Z","flags":1,"native":1,"bps":57600,"parity":"N","stopbit
s":2,"cycle":1.00}]}
{"class":"WATCH","enable":true,"json":false,"nmea":true,"raw":0,"scaled":false,"timing":false,"split24":false,"pps":false,"device":"/dev/ttyUSB0"} 
```

# UART 接続の GG-1802 も見えなくなることが
さらに 2日ほど経って見てみると /dev/ttyS0 の方も速度が合わなくなって ntpd と同期できなくなってました。ntppipe -r して暫く待つと通信速度が合い ntpd と同期が始まりました。(ntpshmmon でも見える)
まぁ、しかし、これじゃぁ使えないですねぇ。通信速度を固定るする方法を探してみましょうか。