GPSモジュールが使えないか
秋月のGPSモジュールというのをゲットしていたのだけれど、使えないか…と思っていたら、使っている人がしっかりいたので、備忘録がてら書いておこうと思う。
まずは、こちらのブログで手順が書かれているので、その通りにやる。
作業手順
作業手順としては、次の通り。おいらのコメントを追加している。
- RaspberryPi Zero WHの4,6,8,10,12ピンに秋月のGPSモジュールの+5V,GND,RXD,TXD,1PPSにそれぞれ繋ぐ。横並びに接続するので、配線しやすい。タイプパルスを使わない人は、1PPSへの配線は不要。
- コンソールをserial0からtty1へ変更するため、bootディレクトリにあるcmdline.txtを編集。デフォルトの物は、ブログと一部異なっているけれど、デフォルトの方は無視してコメント。nanoなどのテキストエディタを使って、下記のように書き換える。
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
- systemdの設定を変更し、シリアルコンソールを無効化するため、下のsystemctlの呪文を唱える。
sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service
- bootディレクトリにあるconfig.txtをテキストエディタで編集。下記を一番最後の行に追加し、UARTを有効にする。
enable_uart=1
※タイムパルスを使う場合は、bootディレクトリにあるconfig.txtへ更に下記を追記する。GPSしか使わない人は不要。
dtoverlay=pps-gpio,gpiopin=18,assert_falling_edge=true
- etcディレクトリにあるmodulesをテキストエディタで編集。最終行にpps-gpioを追加。
pps-gpio
- rebootコマンドで再起動させる。
- 再起動したら、GPS関連のアプリをインストールする。タイムパルスを使わない人は、pps-toolsは不要。
sudo apt-get install gpsd gpsd-clients pps-tools
(sudo apt install gpsd gpsd-clients pps-tools でもOK!)
- etc/defaultディレクトリにあるgpsdをテキストエディタで編集し、gpsdの接続デバイスとオプションを修正。GPSモジュールにバッテリーを接続、ポーリングは行わないため、GPSD_OPTIONSを「-n」とするらしいが、逆にポーリングする場合は、-yとなりますな。1PPSを配線しない人は、/dev/pps0の記述は不要ではあるけれど、気が変わるかっも知れないので、今後のために記載しておく方が親切かも。
START_DAEMON=”true”
DEVICES=”/dev/ttyS0 /dev/pps0″
GPSD_OPTIONS=”-n”
- systemctlコマンドでgpsd.socketを有効に。
sudo systemctl enable gpsd.socket
- 再度、rebootコマンドで再起動。
- 前の手順でpps-toolsをインストールした場合は、pps-toolsを起動させると、GPSがきちんと電波を捉えられているか確認できる。電波が捉えられていない場合は、それっぽい数字が出てこない。
sudo ppstest /dev/pps0
- 更に細かい動きを確認するには、下記コマンドで。
cgps -s
そうすると、自分の位置情報を始め、補足している衛星のナンバーや衛星位置情報も瞬時に分かる。サイトによっては、gpsmonをお勧めしているが、おいらの場合は、何故か分からないが、動作が思わしくなかった。gpsmonを起動しても、ウンともスンとも言わず、マウスのダイヤルを下方向へ回すと、急に文字が出てくるようになるのだが、皆さんがアップしている画像のようにはならなかった。
これでようやっと、GPSを使う下準備ができた。でも、pythonなどでアプリを作って動かそうとすると、データが出てこない事態が発生する。どうも、先に紹介したcgpsなどがポートを占有してしまうのか、データが全く取れない状態になるのだ。再起動すれば解決されるのだが、これに嵌ってしまい、エライ時間を費やしてしまった。
ppsはGPSしか使わない人は不要と書いてしまったが、pps信号があると誤差が少なくなるみたい。こちらの方が検証されている。
\安価なRaspberry Pi ZERO WHを使おう!/