raspberry Pi3 GPSモジュール(U-BLOX NEO-6M)で遊んでみた

【この記事を読むのに必要な時間は約 6 分です。】

ドライブが大好きで普段はスマホをナビとして使っています。
今回、Raspberry Pi用のGPSモジュールを見つけたので、手持ちのRaspberry Pi3に組み込んでナビを自作してみたいと思い購入しました。

スポンサーリンク
レクタングル(大)広告




今回購入した製品と入手先

私はAmazonで購入しました。Raspberry Pi専門店舗です。
中国系の販売業者のようですが、今のところいくつか業者に問い合わせたところ明快な回答が得られているので安心です。

販売店舗coopar

製品詳細

■U-BLOX NEO-6Mモジュール/型番:GPS-NEO-6M-001搭載
■セラミックパッシブアンテナ搭載
■EEPROM/データバックアップ電池搭載
■LEDパイロットランプ搭載
■供給電圧:3V/5V
■モジュールサイズ:25.5mm*31.5mm
■取り付け穴サイズ:2mm
■デフォルトボーレート:38400
■デフォルト出力:NMEA0183

開封

密封パッケージにモジュールだけが入っています。付属品その他はありません。

表側

裏側

必要なもの

raspberry Pi本体と接続のためのジャンパワイヤが必要になります。

raspberry Pi3は手持ちのものを使用しました。購入したのはこちらです。

販売店舗wiwiston

その他接続用にメス-メスのジャンパワイヤが必要になります。購入したのはこちらです。

販売店舗HappinessPlus

もちろんRaspberry Pi3を使用するためにディスプレイ、キーボード、マウス等も必要になります。

raspberry Piのバージョンによる注意点

今回購入したGPSモジュールのようにシリアル接続を利用するモジュールの場合、raspberry Pi3では使用出来ませんとの注意書きがあるモジュールが相当数あります。
raspberry Pi2まではそのままシリアル接続するだけで問題なく使用できるのですが、raspberry Pi3ではそのままシリアル接続しただけでは使用できません。
raspberry Pi3から新しく採用されたBluetooth機能がデフォルトでシリアルポートを使用しているためです。
実際には、使用できるように設定を変更してやれば利用可能です。

raspberry pi3との接続

最初にraspberyy Pi3のGPIOピンにGPSモジュールを接続します。
接続には上述のとおりメス-メスのジャンパワイヤを利用します。

raspberry Pi側の接続

raspberry Pi側は4つのピンを使用します。
電源用     +3v3
アース用    GND ※GNDであればどれでも良いです。
シリアル送信用 TXD0/GPIO14
シリアル受信用 RXD0/GPIO15

なお、raspberry Pi3側のTXDとモジュール側のRXD、raspberry Pi3側のRXDとモジュール側のTXDを接続します。間違えないように。

GPSモジュール側の接続

GPSモジュール側は5つのピンがありますが、PPS以外の4つのピンを使用します。
VCC +3v3と接続
GND GNDと接続
TXD RXD0/GPIO15と接続
RXD TXD0/GPIO14と接続

実際に接続した状態

raspberry Pi側

GPSモジュール側


【参考】raspberry Pi3の UART(シリアル通信)について

従来使用のURAT0(ttyAMA0)について

1.RPi3では、Bluetooth機能が加わったため、その通信に従来のシリーズで利用していたURAT0(ttyAMA0)を割り当てました。
2.そのため、デフォルトのままではシリアルコンソールが利用できなくなりました。
3.また、RPi3にはソフトウェア制御によるUART1(ttyS0)が加わりましたが、CPUのコアクロックに依存してしまいます。
4.RPi3のコアクロックはデフォルトでは可変のため、CPUの負荷状況により変化し、それに依存しているUART1のボーレートも同様に変化してしまい、通信に失敗します。

解決方法

Bluetoothを無効にしてしまう方法とCPUのコアクロックを固定してしまう方法があります。
Bluetoothを利用しないなら最初の方法がよいでしょう。
両方利用したい場合は2つ目の方法になりますが、コアクロックが固定されるので、少々パフォーマンス(性能)が落ちるらしいです。
なお、 どちらのシリアル設定でも、GPIO14(TDX)とGPIO15(RDX)にシリアルポートはマッピングされます。

シリアル通信に使うデバイスファイル

Bluetoothを無効にした場合:
  /dev/serial0 -> /dev/ttyAMA0
  /dev/serial1 -> /dev/ttyS0
CPUコアクロックを固定した場合:
  /dev/serial0 -> /dev/ttyS0
  /dev/serial1 -> /dev/ttyAMA0

シリアルコンソールを有効にするには


#SDカードをPCで読み込んで、「config.txt」ファイルを修正
#シリアル通信を有効にするため以下を追加
enable_uart=1
#Bluetoothを無効にして、シリアルコンソール(ttyAMA0)を有効にするためには以下を追加
dtoverlay=pi3-miniuart-bt
#Bluetoothもシリアルコンソール(ttyS0)も有効にするためには以下を追加
core_freq = 250

シリアル通信を有効にするには

シリアルコンソールでなく、プログラム等でのシリアル通信のための設定は以下のとおりです。

#SDカードをPCで読み込んで、「config.txt」ファイルを修正
#シリアル通信を有効にするためには以下を追加
enable_uart=1
#SDカードをPCで読み込んで、「cmdline.txt」ファイルを修正
#シリアルコンソールを無効にするためには以下を削除
console=serial0,115200
#コンソールの使用を停止・無効にするコマンド(ttyS0の場合)
$ sudo systemctl stop serial-getty@ttyS0.service 
$ sudo systemctl disable serial-getty@ttyS0.service
#RPi3上から設定する場合は/boot/下の「config.txt」および「cmdline.txt」を修正する事で修正可能です。

#ちなみにLinuxコンソール上から、シリアル通信する場合
#【通信速度設定】
 $ stty -F /dev/serial0 115200
#【文字列送信】
 $ echo "hello" > /dev/serial0
#or
 $ echo "hello" > /dev/serial1

GPSを動かしてみる

raspberry Pi3の場合は、上述の方法でシリアル通信が可能な状態にしておきます。

gpsd をインストール

GPSから出てくる情報を解析する gpsd デーモンをインストールします。

$ sudo apt-get -y install gpsd gpsd-clients

gpsdの設定

以下の設定で読めます。

$ cat << EOS | sudo tee -a  /etc/default/gpsd
USBAUTO="false"
DEVICES="/dev/gps0"
EOS

gpsdを起動

gpsdを起動します。

$ sudo systemctl start gpsd
$ sudo systemctl enable gpsd
Synchronizing state for gpsd.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d gpsd defaults
Executing /usr/sbin/update-rc.d gpsd enable

cgpsでモニタリング

cgpsでモニタリング出来ます。

$ cgps -s

最後に

これで無事にGPSモジュールを使用してGPSデータをモニタリングすることが出来ました。
raspberry Pi3を使用する場合、コンソールの設定が必要な点だけ知っていればあとは問題なく利用できると思います。

なお、このGPSモジュールは、上述のとおり、EEPROM(不揮発性メモリ)やバックアップ用電池もついていますが、ヘタっている場合もありアタリハズレはあるようです。アンテナも内蔵ですが、屋外で使用する限り問題なく受信してくれます。
以上

スポンサーリンク
レクタングル(大)広告